MapReduce作业挂起,等待分配AM容器

时间:2015-12-25 23:31:46

标签: hadoop mapreduce yarn

我尝试将简单的字数作为MapReduce作业运行。在本地运行时一切正常(所有工作都在名称节点上完成)。但是,当我尝试使用YARN在集群上运行它时(将mapreduce.framework.name = yarn添加到mapred-site.conf)作业挂起。

我在这里遇到了类似的问题: MapReduce jobs get stuck in Accepted state

作业输出:

*** 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>

纱-site.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):

纱-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>

仍然无法正常工作。 附加信息:我在群集预览中看不到任何节点(此处类似问题:Slave nodes not in Yarn ResourceManagerenter image description here

9 个答案:

答案 0 :(得分:7)

您应该检查群集中节点管理器的状态。如果NM节点的磁盘空间不足,那么RM会将它们标记为“不健康的”#34;那些NM不能分配新的容器。

1)检查不健康节点:http://<active_RM>:8088/cluster/nodes/unhealthy

如果&#34;健康报告&#34;标签说&#34; local-dirs很糟糕&#34;那么这意味着你需要从这些节点中清理一些磁盘空间。

2)检查dfs.data.dir中的DFS hdfs-site.xml属性。它指向存储hdfs数据的本地文件系统上的位置。

3)登录这些计算机并使用df -h&amp; hadoop fs - du -h命令用来衡量占用的空间。

4)验证hadoop垃圾并删除它,如果它阻止你。 hadoop fs -du -h /user/user_name/.Trashhadoop fs -rm -r /user/user_name/.Trash/*

答案 1 :(得分:3)

我觉得,你的内存设置错误了。

为了理解YARN配置的调整,我发现这是一个非常好的来源:http://www.cloudera.com/content/www/en-us/documentation/enterprise/latest/topics/cdh_ig_yarn_tuning.html

我按照本博客中的说明操作,并且能够让我的工作正常运行。您应该根据节点上的物理内存来改变设置。

要记住的关键事项是:

  • mapreduce.map.memory.mbmapreduce.reduce.memory.mb的值应至少为yarn.scheduler.minimum-allocation-mb
  • mapreduce.map.java.optsmapreduce.reduce.java.opts的值应该是&#34;&#34;值的&#34;相应的mapreduce.map.memory.mbmapreduce.reduce.memory.mb配置。 (在我的情况下,它是983 MB~(0.8 * 1228 MB))
  • 同样,yarn.app.mapreduce.am.command-opts的值应该是&#34;&#34;的价值的0.8倍。 yarn.app.mapreduce.am.resource.mb

以下是我使用的设置,它们对我来说非常适合:

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>

您也可以参考这里的答案:Yarn container understanding and tuning

如果您希望容器分配也考虑CPU,则可以添加vCore设置。但是,要实现此目的,您需要将CapacitySchedulerDominantResourceCalculator一起使用。请在此处查看有关此问题的讨论:How are containers created based on vcores and memory in MapReduce2?

答案 2 :(得分:2)

这解决了我的错误:

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

答案 3 :(得分:1)

检查主节点和从节点上的主机文件。我有这个问题。我的主机文件在主节点上看起来像这样,例如

127.0.0.0 localhost
 127.0.1.1 master-virtualbox
 192.168.15.101 master 

我改变了如下

192.168.15.101 master master-virtualbox localhost

所以它奏效了。

答案 4 :(得分:1)

这些行

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

解决了我的问题,因为当磁盘使用率> = 95%时,节点将被标记为不健康。解决方案主要适用于伪分布模式。

答案 5 :(得分:0)

每个实例上都有512 MB RAM,而yarn-site.xml和mapred-site.xml中的所有内存配置都是500 MB到3 GB。您将无法在群集上运行任何内容。将每件事改为~256 MB。

此外,您的mapred-site.xml正在使用框架到纱线,并且您的作业跟踪器地址不正确。您需要在多节点集群(包括resourcemanager Web地址)上的yarn-site.xml中具有与资源管理器相关的参数。除此之外,群集不知道您的群集在哪里。

您需要重新访问两个xml文件。

答案 6 :(得分:0)

无论如何这对我有用。谢谢你们! @KaP

这是我的yarn-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>

答案 7 :(得分:0)

首先要检查纱线资源管理器日志。我已经在互联网上搜索了这个问题很长一段时间了,但是没有人告诉我如何找出真正发生的事情。检查纱线资源管理器日志非常简单明了。我很困惑为什么人们会忽略日志。

对我来说,日志中有错误

var player = null;
planck.testbed('Collition', function(testbed) {
    var pl = planck, Vec2 = pl.Vec2, Math = pl.Math;
    var width = 16.00, height = 8.00;
    var BALL_R = 0.25;
    testbed.x = 0, testbed.y = 0;
    testbed.width = width * 1.2, testbed.height = height * 1.2;
    testbed.ratio = 100;
    var world = pl.World({});
    for(var i=0; i<6; i++){
        var bot=world.createDynamicBody({linearDamping:0.1,angularDamping:0.2});
        bot.setBullet(true);
        var pos_y = (i%2)? BALL_R : 2*BALL_R;
        bot.setPosition({x: (i*2), y: pos_y});
        bot.createFixture(pl.Circle(BALL_R), {friction: 0.1,restitution: 0.99,mass:1,userData:'bot'});
    }
   player = world.createDynamicBody({mass:0});
   player.setPosition({x: -width / 4, y: 0});
   player.createFixture(pl.Circle(BALL_R), {});

   world.on('post-solve', function(contact) {
        console.log('post-solve');
        var fA = contact.getFixtureA(), bA = fA.getBody();
        var fB = contact.getFixtureB(), bB = fB.getBody();
        var bot = fA.getUserData() == botFixDef.userData && bA || fB.getUserData() == botFixDef.userData && bB;
   });
   return world;
});
var stepsData=[{x:0,y:0},{x:0,y:0}];
client.on('objects-update', function(objects){
    stepsData.push({x: objects[0].x*2, y: objects[0].y})
    var transformX=objects[0].x*2 - stepsData[stepsData.length-2].x;
    var transformY=objects[0].y - stepsData[stepsData.length-2].y;

    console.log({x: objects[0].x*2, y: objects[0].y});
    player.setTransform(Vec2(transformX,transformY),1);
    player.setPosition({x: objects[0].x*2, y: objects[0].y});
});

那是因为我在工作场所切换了wifi网络,所以我的电脑IP改变了。

答案 8 :(得分:0)

老问题,但我最近遇到了同样的问题,在我的情况下,这是由于在代码中手动将主设备设置为本地。

请搜索conf.setMaster("local[*]")并将其删除。

希望它有所帮助。