web-dev-qa-db-ja.com

MapReduceジョブがハングし、AMコンテナが割り当てられるのを待機しています

MapReduceジョブとして単純なWordカウントを実行しようとしました。ローカルで実行するとすべて正常に動作します(すべての作業はName Nodeで実行されます)。しかし、YARN(mapreduce.framework.name = yarnをmapred-site.confに追加)を使用してクラスターで実行しようとすると、ジョブがハングします。

ここで同様の問題に遭遇しました: MapReduceジョブがAccepted状態でスタックします

ジョブからの出力:

*** START ***
15/12/25 17:52:50 INFO client.RMProxy: Connecting to ResourceManager at /0.0.0.0:8032
15/12/25 17:52:51 WARN mapreduce.JobResourceUploader: Hadoop command-line option parsing not performed. Implement the Tool interface and execute your application with ToolRunner to remedy this.
15/12/25 17:52:51 INFO input.FileInputFormat: Total input paths to process : 5
15/12/25 17:52:52 INFO mapreduce.JobSubmitter: number of splits:5
15/12/25 17:52:52 INFO mapreduce.JobSubmitter: Submitting tokens for job: job_1451083949804_0001
15/12/25 17:52:53 INFO impl.YarnClientImpl: Submitted application application_1451083949804_0001
15/12/25 17:52:53 INFO mapreduce.Job: The url to track the job: http://hadoop-droplet:8088/proxy/application_1451083949804_0001/
15/12/25 17:52:53 INFO mapreduce.Job: Running job: job_1451083949804_0001

mapred-site.xml:

<configuration>

<property>
   <name>mapreduce.framework.name</name>
   <value>yarn</value>
</property>

<property>
   <name>mapreduce.job.tracker</name>
   <value>localhost:54311</value>
</property> 

<!--
<property>
   <name>mapreduce.job.tracker.reserved.physicalmemory.mb</name>
   <value></value>
</property>

<property>
   <name>mapreduce.map.memory.mb</name>
   <value>1024</value>
</property>

<property>
   <name>mapreduce.reduce.memory.mb</name>
   <value>2048</value>
</property>    

<property>
   <name>yarn.app.mapreduce.am.resource.mb</name>
   <value>3000</value>
   <source>mapred-site.xml</source>
</property> -->

</configuration>

糸サイト.xml

<configuration>
 <property>
   <name>yarn.nodemanager.aux-services</name>
   <value>mapreduce_shuffle</value>
 </property>
 <property>
   <name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>
   <value>org.Apache.hadoop.mapred.ShuffleHandler</value>
 </property>

<!--
<property>
<name>yarn.nodemanager.resource.memory-mb</name>
<value>3000</value>
<source>yarn-site.xml</source>
</property>

<property>
  <name>yarn.scheduler.minimum-allocation-mb</name>
  <value>500</value>
</property>

<property>
<name>yarn.scheduler.capacity.maximum-am-resource-percent</name>
<value>3000</value>
</property>
-->

</configuration>

//私はオプションにコメントを残しました-それらは問題を解決していませんでした

YarnApplicationState:ACCEPTED:AMコンテナが割り当てられ、起動され、RMに登録されるのを待機しています。

YarnApplicationState: ACCEPTED: waiting for AM container to be allocated, launched and register with RM.

何が問題なのでしょうか?

編集:

私はこの構成(コメント)をマシンで試しました:NameNode(8GB RAM)+ 2x DataNode(4GB RAM)。同じ効果が得られます。ACCEPTED状態でジョブがハングします。

EDIT2:構成を変更(@Manjunath Ballurに感謝):

yarn-site.xml:

<configuration>
  <property>
    <name>yarn.resourcemanager.hostname</name>
    <value>hadoop-droplet</value>
  </property>

  <property>
    <name>yarn.resourcemanager.resource-tracker.address</name>
    <value>hadoop-droplet:8031</value>
  </property>
  <property>
    <name>yarn.resourcemanager.address</name>
    <value>hadoop-droplet:8032</value>
  </property>
  <property>
    <name>yarn.resourcemanager.scheduler.address</name>
    <value>hadoop-droplet:8030</value>
  </property>
  <property>
    <name>yarn.resourcemanager.admin.address</name>
    <value>hadoop-droplet:8033</value>
  </property>
  <property>
    <name>yarn.resourcemanager.webapp.address</name>
    <value>hadoop-droplet:8088</value>
  </property>
  <property>
    <description>Classpath for typical applications.</description>
    <name>yarn.application.classpath</name>
    <value>
        $HADOOP_CONF_DIR,
        $HADOOP_COMMON_HOME/*,$HADOOP_COMMON_HOME/lib/*,
        $HADOOP_HDFS_HOME/*,$HADOOP_HDFS_HOME/lib/*,
        $HADOOP_MAPRED_HOME/*,$HADOOP_MAPRED_HOME/lib/*,
        $YARN_HOME/*,$YARN_HOME/lib/*
    </value>
  </property>
  <property>
    <name>yarn.nodemanager.aux-services</name>
    <value>mapreduce.shuffle</value>
  </property>
  <property>
    <name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>
    <value>org.Apache.hadoop.mapred.ShuffleHandler</value>
  </property>
  <property>
    <name>yarn.nodemanager.local-dirs</name>
    <value>/data/1/yarn/local,/data/2/yarn/local,/data/3/yarn/local</value>
  </property>
  <property>
    <name>yarn.nodemanager.log-dirs</name>
    <value>/data/1/yarn/logs,/data/2/yarn/logs,/data/3/yarn/logs</value>
  </property>
  <property>
    <description>Where to aggregate logs</description>
    <name>yarn.nodemanager.remote-app-log-dir</name>
    <value>/var/log/hadoop-yarn/apps</value>
  </property>
  <property> 
    <name>yarn.scheduler.minimum-allocation-mb</name> 
    <value>50</value>
  </property>
  <property> 
    <name>yarn.scheduler.maximum-allocation-mb</name> 
    <value>390</value>
  </property>
  <property> 
    <name>yarn.nodemanager.resource.memory-mb</name> 
    <value>390</value>
  </property>
</configuration>

mapred-site.xml:

<configuration>
<property>
    <name>mapreduce.framework.name</name>
    <value>yarn</value>
</property>

<property>  
    <name>yarn.app.mapreduce.am.resource.mb</name>  
    <value>50</value>
</property>
<property> 
    <name>yarn.app.mapreduce.am.command-opts</name> 
    <value>-Xmx40m</value>
</property>
<property>
    <name>mapreduce.map.memory.mb</name>
    <value>50</value>
</property>
<property>
    <name>mapreduce.reduce.memory.mb</name>
    <value>50</value>
</property>
<property>
    <name>mapreduce.map.Java.opts</name>
    <value>-Xmx40m</value>
</property>
<property>
    <name>mapreduce.reduce.Java.opts</name>
    <value>-Xmx40m</value>
</property>
</configuration>

まだ動かない。追加情報:クラスタープレビューでノードが表示されない(同様の問題がここにある: Yarn ResourceManagerにないスレーブノードenter image description here

17
KaP

Nodeマネージャーのクラスター内のマネージャーのステータスを確認する必要があります。NMノードのディスク領域が不足している場合、RMはそれらのノードを「異常」とマークし、それらのNMは新しいコンテナを割り当てることができません。

1)異常なノードを確認します:http://<active_RM>:8088/cluster/nodes/unhealthy

「正常性レポート」タブに「local-dirs is bad」と表示されている場合は、これらのノードからディスク領域をクリーンアップする必要があることを意味します。

2)DFSを確認しますdfs.data.dirプロパティhdfs-site.xml。 hdfsデータが保存されているローカルファイルシステム上の場所を指します。

3)それらのマシンにログインし、df -hhadoop fs - du -hコマンドは、占有されているスペースを測定します。

4)hadoopのゴミ箱を確認し、それがあなたをブロックしている場合は削除します。 hadoop fs -du -h /user/user_name/.Trashおよびhadoop fs -rm -r /user/user_name/.Trash/*

9
Vikas Ranjan

私はあなたがあなたのメモリ設定を間違っていると感じています。

YARN構成のチューニングを理解するために、これは非常に優れたソースであることがわかりました: http://www.cloudera.com/content/www/en-us/documentation/enterprise/latest/topics /cdh_ig_yarn_tuning.html

私はこのブログに記載されている指示に従い、自分の仕事を実行させることができました。ノードにある物理メモリに比例して設定を変更する必要があります。

覚えておくべき重要な点は次のとおりです。

  • mapreduce.map.memory.mbおよびmapreduce.reduce.memory.mbの値は、少なくともyarn.scheduler.minimum-allocation-mbである必要があります
  • mapreduce.map.Java.optsおよびmapreduce.reduce.Java.optsの値は、対応するmapreduce.map.memory.mbおよびmapreduce.reduce.memory.mb構成の「値の0.8倍」程度にする必要があります。 (私の場合は983 MB〜(0.8 * 1228 MB))
  • 同様に、yarn.app.mapreduce.am.command-optsの値は「yarn.app.mapreduce.am.resource.mbの値の0.8倍」である必要があります

以下は私が使用する設定であり、それらは私にとって完璧に機能します:

yarn-site.xml:

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

mapred-site.xml

<property>  
    <name>yarn.app.mapreduce.am.resource.mb</name>  
    <value>1228</value>
</property>
<property> 
    <name>yarn.app.mapreduce.am.command-opts</name> 
    <value>-Xmx983m</value>
</property>
<property>
    <name>mapreduce.map.memory.mb</name>
    <value>1228</value>
</property>
<property>
    <name>mapreduce.reduce.memory.mb</name>
    <value>1228</value>
</property>
<property>
    <name>mapreduce.map.Java.opts</name>
    <value>-Xmx983m</value>
</property>
<property>
    <name>mapreduce.reduce.Java.opts</name>
    <value>-Xmx983m</value>
</property>

ここで答えを参照することもできます: 糸コンテナーの理解と調整

コンテナーの割り当てでCPUも考慮に入れる場合は、vCore設定を追加できます。ただし、これを機能させるには、CapacitySchedulerDominantResourceCalculatorとともに使用する必要があります。これについては、こちらの説明を参照してください: MapReduce2のvcoreとメモリに基づいてコンテナーが作成される方法

3

これはこのエラーの私のケースを解決しました:

<property>
  <name>yarn.scheduler.capacity.maximum-am-resource-percent</name>
  <value>100</value>
</property>
2
Yousef Irman

マスターノードとスレーブノードのホストファイルを確認してください。私はまさにこの問題を抱えていました。私のhostsファイルは、例えばマスターノードでこのように見えました

127.0.0.0 localhost
 127.0.1.1 master-virtualbox
 192.168.15.101 master 

以下のように変更しました

192.168.15.101 master master-virtualbox localhost

うまくいきました。

1
marjan

これらの行

<property>
  <name>yarn.nodemanager.disk-health-checker.max-disk-utilization-per-disk-percentage</name>
  <value>100</value>
</property>

の中に yarn-site.xmlディスク使用率が95%以上になるとノードが異常とマークされるため、問題が解決しました。主に疑似分散モードに適したソリューション。

1
Manu

とにかくそれは私のための仕事です。ありがとうございました! @KaP

それは私の糸-site.xmlです

<property>
            <name>yarn.resourcemanager.hostname</name>
            <value>MacdeMacBook-Pro.local</value>
    </property>
    <property>
            <name>yarn.nodemanager.aux-services</name>
            <value>mapreduce_shuffle</value>
    </property>
    <property>
            <name>yarn.resourcemanager.webapp.address</name>
            <value>${yarn.resourcemanager.hostname}:8088</value>
    </property>
    <property>
       <name>yarn.nodemanager.resource.memory-mb</name>
<value>4096</value>
</property>
<property>
   <name>yarn.scheduler.minimum-allocation-mb</name>
   <value>2048</value>
</property>
<property>
<name>yarn.nodemanager.vmem-pmem-ratio</name>
<value>2.1</value>

それは私のmapred-site.xmlです

<configuration>
<property>
            <name>mapreduce.framework.name</name>
            <value>yarn</value>
    </property>
0
william

各インスタンスに512 MB RAMがあり、yarn-site.xmlとmapred-site.xmlのすべてのメモリ構成は500 MBから3 GBです。実行できなくなりますクラスター上のあらゆるものすべてを256 MBに変更します。

また、あなたのmapred-site.xmlはyarnによるフレームワークを使用しており、正しくないジョブトラッカーアドレスがあります。マルチノードクラスターのresource-site.xmlにリソースマネージャー関連のパラメーター(リソースマネージャーのWebアドレスを含む)が必要です。それがなければ、クラスターはクラスターがどこにあるかを知りません。

両方のxmlファイルに再度アクセスする必要があります。

古い質問ですが、最近同じ問題に遭遇しましたが、私の場合、コードでマスターをローカルに手動で設定したことが原因でした。

conf.setMaster("local[*]")を検索して削除してください。

それが役に立てば幸い。

0
riccamini

最初のことは、yarnリソースマネージャーのログを確認することです。この問題について非常に長い間インターネットを検索していましたが、実際に何が起こっているのかを知る方法を誰も教えてくれませんでした。ヤーンリソースマネージャーのログを確認するのはとても簡単で簡単です。なぜ人々がログを無視するのか混乱しています。

私にとって、ログにエラーがありました

Caused by: org.Apache.hadoop.net.ConnectTimeoutException: 20000 millis timeout while waiting for channel to be ready for connect. ch : Java.nio.channels.SocketChannel[connection-pending remote=172.16.0.167/172.16.0.167:55622]

これは、職場でWi-Fiネットワークを切り替えたため、コンピューターのIPが変更されたためです。

0
gzc