mapreduce作业挂起,等待分配am容器

hm2xizp9  于 2021-05-29  发布在  Hadoop
关注(0)|答案(9)|浏览(338)

我尝试将简单的单词计数作为mapreduce作业运行。在本地运行时一切正常(在名称节点上完成的所有工作)。但是,当我尝试在一个集群上运行它时,使用yarn(添加 mapreduce.framework.name = yarn 到mapred site.conf)作业挂起。
我在这里遇到了一个类似的问题:mapreduce作业陷入了可接受状态
作业输出:


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

yarn-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:已接受:等待分配、启动am容器并向rm注册。

有什么问题吗?
编辑:
我在机器上尝试了这种配置(注解):namenode(8gbram)+2xdatanode(4gbram)。我得到了同样的效果:工作取决于被接受的状态。
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>

还是不行。附加信息:我在集群预览中看不到任何节点(类似的问题:从属节点不在资源管理器中)

u91tlkcl

u91tlkcl1#

我觉得你的记忆设置不对。
为了理解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 应为“0.8倍”对应值 mapreduce.map.memory.mb 以及 mapreduce.reduce.memory.mb 配置(在我的例子中是983 mb~(0.8*1228 mb))
同样,价值 yarn.app.mapreduce.am.command-opts 应为“值的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容器理解和调整
如果您希望容器分配也考虑cpu,那么可以添加vcore设置。但是,要让它起作用,你需要使用 CapacitySchedulerDominantResourceCalculator . 请参见此处的讨论:如何基于mapreduce2中的vCore和内存创建容器?

bweufnob

bweufnob2#

每个示例上都有512 mb ram,yarn-site.xml和mapred-site.xml中的所有内存配置都是500 mb到3 gb。您将无法在群集中运行任何东西。将所有内容更改为~256 mb。
另外,您的mapred-site.xml正在使用framework按yarn排序,您的job tracker地址不正确。您需要在多节点集群(包括resourcemanager网址)上的yarn-site.xml中具有与资源管理器相关的参数。否则,集群就不知道您的集群在哪里。
您需要重新访问这两个xml文件。

inkz8wg9

inkz8wg93#

这些线

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

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

bakd9h0s

bakd9h0s4#

不管怎样,那对我来说是工作。非常感谢@卡普
这是我的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>
mpgws1up

mpgws1up5#

第一件事是检查yarn资源管理器日志。关于这个问题,我在网上搜索了很长时间,但没有人告诉我如何找出真正发生的事情。检查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]

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

1mrurvl1

1mrurvl16#

老问题,但我最近也遇到了同样的问题,在我的例子中,这是由于在代码中手动将master设置为local。
请,搜索 conf.setMaster("local[*]") 把它取下来。
希望有帮助。

lztngnrs

lztngnrs7#

这解决了我的这个错误:

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

nnt7mjpx8#

您应该检查集群中节点管理器的状态。如果nm节点磁盘空间不足,rm会将其标记为“不健康”,并且这些nms无法分配新容器。
1) 检查不正常节点: http://<active_RM>:8088/cluster/nodes/unhealthy 如果“运行状况报告”选项卡显示“本地目录不正确”,则意味着您需要从这些节点清理一些磁盘空间。
2) 检查dfs dfs.data.dir 中的属性 hdfs-site.xml . 它指向本地文件系统上存储hdfs数据的位置。
3) 登录到这些机器并使用 df -h & hadoop fs - du -h 用于测量占用空间的命令。
4) 验证hadoop垃圾,并删除它,如果它阻止你。 hadoop fs -du -h /user/user_name/.Trash 以及 hadoop fs -rm -r /user/user_name/.Trash/*

vlf7wbxs

vlf7wbxs9#

检查主节点和从节点上的主机文件。我确实有这个问题。例如,在主节点上,我的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

所以成功了。

相关问题