ধারকটি মেমরির সীমা ছাড়িয়ে চলেছে


85

হ্যাডোপ ভি 1 এ, আমি 1 জিবি আকারের সাথে প্রতিটি 7 ম্যাপার এবং রিডুসার স্লট বরাদ্দ করেছি, আমার ম্যাপারগুলি এবং হ্রাসকারীগুলি সূক্ষ্মভাবে চলে। আমার মেশিনে 8 জি মেমরি, 8 টি প্রসেসর রয়েছে। এখন ইয়ার্নের সাথে একই মেশিনে একই অ্যাপ্লিকেশনটি চালানোর সময় আমার ধারক ত্রুটি হয়েছে got ডিফল্টরূপে, আমার এই সেটিংসটি রয়েছে:

  <property>
    <name>yarn.scheduler.minimum-allocation-mb</name>
    <value>1024</value>
  </property>
  <property>
    <name>yarn.scheduler.maximum-allocation-mb</name>
    <value>8192</value>
  </property>
  <property>
    <name>yarn.nodemanager.resource.memory-mb</name>
    <value>8192</value>
  </property>

এটি আমাকে ত্রুটি দিয়েছে:

Container [pid=28920,containerID=container_1389136889967_0001_01_000121] is running beyond virtual memory limits. Current usage: 1.2 GB of 1 GB physical memory used; 2.2 GB of 2.1 GB virtual memory used. Killing container.

আমি তখন ম্যাপ্রেড-সাইট.xML এ মেমরি সীমাটি সেট করার চেষ্টা করেছি:

  <property>
    <name>mapreduce.map.memory.mb</name>
    <value>4096</value>
  </property>
  <property>
    <name>mapreduce.reduce.memory.mb</name>
    <value>4096</value>
  </property>

তবে তবু ত্রুটি হচ্ছে:

Container [pid=26783,containerID=container_1389136889967_0009_01_000002] is running beyond physical memory limits. Current usage: 4.2 GB of 4 GB physical memory used; 5.2 GB of 8.4 GB virtual memory used. Killing container.

আমি বিভ্রান্ত হয়েছি কেন মানচিত্রের টাস্কটির এত বেশি স্মৃতি দরকার। আমার বোঝার জন্য, আমার মানচিত্র / হ্রাস করা কাজের জন্য 1GB মেমরি যথেষ্ট। কেন আমি ধারককে আরও মেমরি বরাদ্দ করি, কাজটি আরও বেশি ব্যবহার করে? এটি কি কারণ প্রতিটি কাজ আরও বিভক্ত হয়? আমি মনে করি যে ধারকটির আকারটি কিছুটা কমিয়ে আরও বেশি পাত্রে তৈরি করা আরও বেশি দক্ষ, যাতে আরও কাজ সমান্তরালে চলছে। সমস্যাটি হ'ল আমি কীভাবে নিশ্চিত করতে পারি যে প্রতিটি কন্টেইনার এটি পরিচালনা করতে পারে তার চেয়ে বেশি বিভক্ত হবে না?



ওহে ! আপনার কনফিগারেশন 'yarn.nodemanager.vmem-pmem-अनुपात = 2'?
স্প্রিট করুন

উত্তর:


102

আপনার মানচিত্রের জন্য সর্বোচ্চ মেমরি বরাদ্দ সঠিকভাবে কনফিগার করা উচিত। থেকে এই HortonWorks টিউটোরিয়াল :

[...]

আমাদের ক্লাস্টারের প্রতিটি মেশিনের র‌্যাম ৪৮ জিবি রয়েছে। এই র‌্যামের কিছু> অপারেটিং সিস্টেম ব্যবহারের জন্য সংরক্ষিত হওয়া উচিত। প্রতিটি নোডে, আমরা> ইয়ার্ন ব্যবহার করতে এবং অপারেটিং সিস্টেমের জন্য 8 গিগাবাইট রাখার জন্য 40 জিবি র‌্যাম নির্ধারণ করব

আমাদের উদাহরণ ক্লাস্টারের জন্য, আমাদের একটি ধারকটির জন্য সর্বনিম্ন র‌্যাম রয়েছে (yarn.scheduler.minimum-বরাদ্দ-এমবি) = 2 গিগাবাইট। আমরা ম্যাপ টাস্ক কনটেইনারগুলির জন্য 4 জিবি এবং টাস্ক কনটেইনারগুলি হ্রাস করার জন্য 8 জিবি বরাদ্দ করব।

ম্যাপ্রেড-সাইট.xML এ:

mapreduce.map.memory.mb: 4096

mapreduce.reduce.memory.mb: 8192

প্রতিটি কনটেইনার মানচিত্রের জন্য JVM পরিচালনা করবে এবং কার্য হ্রাস করবে। জেভিএম হিপ আকারটি মানচিত্রের চেয়ে কম সেট করতে হবে এবং উপরে বর্ণিত মেমরি হ্রাস করতে হবে, যাতে তারা YARN দ্বারা বরাদ্দকৃত কনটেইনার মেমরির সীমানার মধ্যে থাকে।

ম্যাপ্রেড-সাইট.xML এ:

mapreduce.map.java.opts: -Xmx3072m

mapreduce.reduce.java.opts: -Xmx6144m

উপরের সেটিংসটি শারীরিক র‌্যামের উপরের সীমাটি কনফিগার করে যা মানচিত্র এবং হ্রাস কার্যগুলি ব্যবহার করবে

এটি যোগ করা:

  1. YARN এ আপনার mapreduceকনফিগারগুলি ব্যবহার করা উচিত , সেগুলি mapredনয়। সম্পাদনা: আপনি এখন আপনার মন্তব্য সম্পাদনা করেছেন এই মন্তব্যটি এখন আর প্রযোজ্য নয়।
  2. আপনি যা কনফিগার করছেন সেটি আসলে আপনি কতটা অনুরোধ করতে চান তা নয়, বরাদ্দ দেওয়ার সর্বোচ্চটি কী।
  3. সর্বাধিক সীমা java.optsউপরে উল্লিখিত সেটিংসের সাথে কনফিগার করা আছে ।

অবশেষে, আপনি এই অন্যান্য এসও প্রশ্নটি যাচাই করতে চাইতে পারেন যা একই ধরণের সমস্যা (এবং সমাধান) বর্ণনা করে।


হ্যাঁ. সেট করে mapreduce.map.java.optsএবং mapreduce.reduce.java.optsআমার সমস্যার সমাধান করে। আপনি কি জানেন যে কার্য দ্বারা নির্ধারিত প্রকৃত মেমরি কেবলমাত্র দ্বারা সংজ্ঞায়িত করা হয়েছে mapreduce.map/reduce.memory.mb? yarn.scheduler.minimum-allocation-mbপ্রকৃত মেমরি অ্যাসাইনমেন্ট কীভাবে প্রভাবিত করে ?
লিশু

@ ফ্লু, যদি সে সাহায্য করে তবে দয়া করে উত্তরটি গ্রহণ করুন। আপনার শেষ প্রশ্ন সম্পর্কে, সুতা সেটিংটি ক্লাস্টারে যে কোনও ধারক বরাদ্দের ক্ষেত্রে প্রযোজ্য; এটিতে মানচিত্র এবং কার্যগুলি হ্রাস করা রয়েছে, তবে অন্যান্য ধরণের অ্যাপ্লিকেশন থেকেও অন্যান্য কাজ। ম্যাপ্রেডস সেটিংস কেবল ম্যাপ্রেডস জবগুলিতে প্রয়োগ হয়।
ক্যাবাদ

@ কাবাদা, আমি লিশু যে লিব ব্যবহার করছে তা বিকাশ করি। আমি ভাবছিলাম যে এমআর টাস্কটি এমন একটি প্রক্রিয়া তৈরি করছে যা জেনে রাখে যে আসলে বেশিরভাগ মেমরি বরাদ্দ করা হয় (হ্যাডোপ স্ট্রিমিং)। অবশ্যই এক্সএমএক্স সেটিংস বাহ্যিক প্রক্রিয়াটিকে প্রভাবিত করে না, কারণ এটি জাভা প্রোগ্রাম নয়। আপনার সাহায্যের জন্য ধন্যবাদ.
পিক্কলবো

4
সুপারিশকৃত মানগুলি পাওয়ার জন্য এখন এইচডিপি-কনফিগারেশন-ইউটিস নামে হর্টনওয়ার্কসের একটি কার্যকর সরঞ্জাম রয়েছে। থেকে এটি পেতে github.com/hortonworks/hdp-configuration-utils
Selle

4
যথাযথ মেমরির কনফিগারেশন প্রয়োগ করা যদি সমস্যার সমাধান না করে (যেমন আমার ক্ষেত্রে এটি আসলে উবুন্টুতে চালিত হ্যান্ডোপের উপর কাজ করেছে তবে সেন্টোজে নয়) ভেমেম চেকটি অক্ষম করার চেষ্টা করুন: blog.cloudera.com/blog/2014/04/…
বখশি

47

ভার্চুয়াল এবং শারীরিক মেমরির ব্যবহারের অনুপাতের জন্য সুতা স্তরে একটি চেক রাখা আছে। ইস্যু কেবল ভিএমএমের পর্যাপ্ত শারীরিক মেমরির নয় তা নয়। তবে এটি কারণ শারীরিক মেমরি প্রদত্ত ভার্চুয়াল মেমরির প্রত্যাশার চেয়ে বেশি।

দ্রষ্টব্য : ভার্চুয়াল মেমরির আগ্রাসী বরাদ্দের কারণে এটি সেন্টোস / আরএইচএল 6 এ ঘটছে।

এটি দ্বারা সমাধান করা যেতে পারে:

  1. সেটিং দ্বারা ভার্চুয়াল মেমরি ব্যবহারের পরিমাণ চেক অক্ষম yarn.nodemanager.vmem-যাচাই-সক্রিয় করতে মিথ্যা ;

  2. কিছু উচ্চ মানের মান yarn.nodemanager.vmem-pmem-अनुपात সেট করে ভিএম: প্রধানমন্ত্রী অনুপাত বাড়ান ।

তথ্যসূত্র :

https://issues.apache.org/jira/browse/HADOOP-11364

http://blog.cloudera.com/blog/2014/04/apache-hadoop-yarn-avoider-6-time-consuming-gotchas/

সুতা-সাইট.xml এ নিম্নলিখিত সম্পত্তি যুক্ত করুন

 <property>
   <name>yarn.nodemanager.vmem-check-enabled</name>
    <value>false</value>
    <description>Whether virtual memory limits will be enforced for containers</description>
  </property>
 <property>
   <name>yarn.nodemanager.vmem-pmem-ratio</name>
    <value>4</value>
    <description>Ratio between virtual memory to physical memory when setting memory limits for containers</description>
  </property>

15

ইএমআরতে এইচআইভি ব্যবহার করে আমার সত্যিই একই সমস্যা হয়েছিল। কোন বিদ্যমান সলিউশন আমার পক্ষে কাজ করে নি - যেমন, ম্যাপ্রেডস কনফিগারেশনের কোনওটিই আমার পক্ষে কাজ করে নি; এবং উভয়ই yarn.nodemanager.vmem-check-enabledমিথ্যা হিসাবে সেট না ।

তবে, কী কাজ শেষ হয়েছিল সেটি সেট করা ছিল tez.am.resource.memory.mb, উদাহরণস্বরূপ:

hive -hiveconf tez.am.resource.memory.mb=4096

টুইটগুলি বিবেচনা করার জন্য আরেকটি সেটিং হ'ল yarn.app.mapreduce.am.resource.mb


উম @ হিরোপ্রোটোগোননিস্ট, আপনি কি জানেন যে "ইয়ার্ন শুরু করার আগে সুতা প্যারামিটারটি" টুইট করা "হয়েছে বা এটি কেবল প্রয়োগের সময় ব্যবহার করা হয় (এবং এটি একটি কাজ থেকে অন্যটিতে পরিবর্তন করা যেতে পারে)?
বিচারক মানসিক

4
আমি অ্যাপ্লিকেশন সময় সেট করতে সক্ষম হয়েছি। বিশেষত, মুরগীর ইন্টারেক্টিভ কনসোলের মধ্যে।
হিরোপ্রোটোগোননিস্ট

8

স্বল্প খ্যাতির কারণে আমি গৃহীত উত্তর সম্পর্কে মন্তব্য করতে পারি না। তবে আমি যুক্ত করতে চাই, এই আচরণটি ডিজাইন দ্বারা। নোডম্যানেজার আপনার ধারকটিকে হত্যা করছে। দেখে মনে হচ্ছে আপনি হ্যাডোপ স্ট্রিমিংটি ব্যবহার করার চেষ্টা করছেন যা মানচিত্র হ্রাস কাজের একটি শিশু প্রক্রিয়া হিসাবে চলছে। নোডম্যানেজার টাস্কটির সম্পূর্ণ প্রক্রিয়া গাছ পর্যবেক্ষণ করে এবং যদি এটি যথাক্রমে mapreduce.map.memory.mb বা mapreduce.reduce.memory.mb এ সর্বাধিক সেট চেয়ে বেশি মেমরি খায় তবে আমরা নোডেমেনজারটি টাস্কটি মেরে ফেলার আশা করব, অন্যথায় আপনার কাজটি অন্য পাত্রে অন্তর্ভুক্ত মেমরি চুরি করছে, যা আপনি চান না।


1

ইএমআর তে স্পার্ক নিয়ে কাজ করার সময় আমার একই সমস্যা ছিল এবং সেটটি maximizeResourceAllocation=trueকৌতুকটি করেছিল; আশা করি এটি কাউকে সাহায্য করবে আপনি যখন ক্লাস্টার তৈরি করবেন তখন আপনাকে এটি সেট করতে হবে। থেকে EMR দস্তাবেজ:

aws emr create-cluster --release-label emr-5.4.0 --applications Name=Spark \
--instance-type m3.xlarge --instance-count 2 --service-role EMR_DefaultRole --ec2-attributes InstanceProfile=EMR_EC2_DefaultRole --configurations https://s3.amazonaws.com/mybucket/myfolder/myConfig.json

যেখানে myConfig.json এর উচিত:

[
  {
    "Classification": "spark",
    "Properties": {
      "maximizeResourceAllocation": "true"
    }
  }
]

1

আমরা সম্প্রতি এই সমস্যাটির মুখোমুখি হয়েছি। যদি সমস্যাটি ম্যাপার মেমরির সাথে সম্পর্কিত হয় তবে আমি সুপারিশ করতে চাই যে দু'টি জিনিস যাচাই করা দরকার।

  • চেক combiner সক্ষম করতে হবে ? যদি হ্যাঁ, তবে এর অর্থ হ্রাস যুক্তিটি সমস্ত রেকর্ডে চালানো উচিত (ম্যাপারের আউটপুট)। স্মৃতিতে এটি ঘটে।আপনার আবেদনের উপর ভিত্তি করে আপনার যাচাই করতে হবে কম্বিনার সক্ষম করা সহায়তা করে কিনা। 'এক্স' রেকর্ডের সংখ্যার উপর যুক্তি হ্রাস করার জন্য নেটওয়ার্ক ট্রান্সফার বাইট এবং সময় / মেমরি / সিপিইউয়ের মধ্যে ট্রেড অফ হয়।
    • আপনি যদি মনে করেন যে সংযুক্তকারী খুব বেশি মূল্য নয় তবে কেবল এটি অক্ষম করুন।
    • আপনার যদি কম্বিনারের প্রয়োজন হয় এবং 'এক্স' একটি বিশাল সংখ্যক (লক্ষ লক্ষ রেকর্ড বলুন) তারপরে আপনার বিভক্ত যুক্তি পরিবর্তন করার কথা বিবেচনা করুন (ডিফল্ট ইনপুট ফর্ম্যাটগুলির জন্য কম ব্লকের আকার, সাধারণত 1 ব্লকের আকার = 1 বিভাজন) রেকর্ডের সংখ্যার কম মানচিত্র তৈরি করতে একক ম্যাপার
  • একক ম্যাপারে প্রক্রিয়াজাত রেকর্ডের সংখ্যা। মনে রাখবেন যে এই সমস্ত রেকর্ড মেমরিতে বাছাই করা প্রয়োজন (ম্যাপারের আউটপুট বাছাই করা হয়)। প্রয়োজনে mapreduce.task.io.sort.mb (ডিফল্ট 200MB) একটি উচ্চতর মান নির্ধারণ বিবেচনা করুন । mapred-configs.xML
  • উপরের কোনওটি যদি সহায়তা না করে তবে স্ট্যান্ডলোন অ্যাপ্লিকেশন হিসাবে ম্যাপার লজিকটি চালানোর চেষ্টা করুন এবং প্রোফাইলার (জেপ্রোফিলারের মতো) ব্যবহার করে অ্যাপ্লিকেশনটিকে প্রোফাইল করার চেষ্টা করুন এবং মেমরিটি কোথায় ব্যবহৃত হচ্ছে তা দেখুন। এটি আপনাকে খুব ভাল অন্তর্দৃষ্টি দিতে পারে।

1

উইন্ডোজ লিনাক্স সাব সিস্টেমে উবুন্টো ওএস সহ সুতা চালানো, ত্রুটি "ভার্চুয়াল মেমরি সীমা ছাড়িয়ে চলেছে, কন্টেইনার কিলিং" আমি ইয়ার্ন-সাইট.xML ফাইলটিতে ভার্চুয়াল মেমরি চেক অক্ষম করে সমাধান করেছি

<property> <name>yarn.nodemanager.vmem-check-enabled</name> <value>false</value> </property> 

ডাব্লুএসএলে ত্রুটি বার্তায় অযৌক্তিক সংখ্যা রয়েছে (কমপক্ষে আমার জন্য): "... ভার্চুয়াল মেমরির সীমা ছাড়িয়ে চলেছে Current বর্তমান ব্যবহার: ৩ জিবি প্রকৃত মেমরির ৩৩৮.৮ এমবি ব্যবহৃত হয়েছে; ৪.২ গিগাবাইট ভার্চুয়াল মেমরির ৪৮১.১ গিগাবাইট ব্যবহার করা হয়েছে। "
সামিক আর

@ সামিকআর হ্যাঁ, আমারও একই অবস্থা, আমি অনুমান করি এটি হুডোপ ইস্যু নয়, এটি ডাব্লুএসএল ইস্যু। হয়তো আমাকে একটি বাস্তব লিনাক্স ওএস কম্পিউটারে ডেমো স্থানান্তর করতে হবে
বিঙ্গোয়বস

0

আমি ব্যক্তিগতভাবে চেক করি নি, তবে Hadoop-সুতা-ধারক-ভার্চুয়াল-মেমরি বোঝার-এবং-সমাধান-ধারক-is-চলমান-পরলোক-ভার্চুয়াল-মেমরি সীমা-ত্রুটি শব্দসমূহ খুব যুক্তিসঙ্গত

পরিবর্তন করে বিষয়টি সমাধান করেছি yarn.nodemanager.vmem-pmem-ratio উচ্চতর মানতে এবং আমি তাতে সম্মত হব:

আর একটি কম প্রস্তাবিত সমাধান হ'ল yarn.nodemanager.vmem- চেক-সক্ষমটিকে মিথ্যাতে সক্ষম করে ভার্চুয়াল মেমরি চেকটি অক্ষম করা।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.