YarnApplicationState:ACCEPTED:等待分配,启动和注册AM容器

Ash*_*ngh 7 linux hadoop mapreduce distributed-computing hadoop-yarn

我是Hadoop生态系统的新手.

我最近在单节点集群上尝试了Hadoop(2.7.1)而没有任何问题,并决定转向具有1个namenode和2个datanode的多节点集群.

但是我面临一个奇怪的问题.无论我尝试运行什么工作,都会遇到以下消息:

在网络界面上:

YarnApplicationState: ACCEPTED: waiting for AM container to be allocated, launched and register
Run Code Online (Sandbox Code Playgroud)

在cli中:

16/01/05 17:52:53 INFO mapreduce.Job: Running job: job_1451083949804_0001
Run Code Online (Sandbox Code Playgroud)

他们甚至没有开始,在这一点上,我不确定我需要做出哪些改变才能使其发挥作用.

这是我试图解决的问题:

  1. 在所有节点上禁用防火墙
  2. 设置较低的资源限制
  3. 在不同的机器,路由器和发行版下进行配置

我真的很感激任何帮助(即使是一分钟的提示)正确的方向.

我已按照这些说明(配置):

Ash*_*ngh 6

我终于解决了这个问题.发布详细步骤以供将来参考.(仅适用于测试环境)

Hadoop(2.7.1)多节点集群配置

  1. 确保您拥有一个没有主机隔离的可靠网络.静态IP分配是优选的,或者至少具有非常长的DHCP租用.此外,所有节点(Namenode/master和Datanodes/slave)都应该有一个具有相同密码的公共用户帐户; 如果不这样做,请在所有节点上创建此类用户帐户.在所有节点上使用相同的用户名和密码会使事情变得不那么复杂.
  2. [在所有机器上]首先为单节点群集配置所有节点.您可以使用我在此处发布的脚本.
  3. 在新终端中执行这些命令

    [在所有机器上]

    stop-dfs.sh;stop-yarn.sh;jps
    rm -rf /tmp/hadoop-$USER
    
    Run Code Online (Sandbox Code Playgroud)

    [仅限Namenode/master]

    rm -rf ~/hadoop_store/hdfs/datanode
    
    Run Code Online (Sandbox Code Playgroud)

    [仅限Datanodes/slaves]

    rm -rf ~/hadoop_store/hdfs/namenode
    
    Run Code Online (Sandbox Code Playgroud)
  4. [在所有计算机上]为群集中的所有节点添加IP地址和相应的主机名.

    sudo nano /etc/hosts
    
    Run Code Online (Sandbox Code Playgroud)

    主机

    xxx.xxx.xxx.xxx master
    xxx.xxx.xxx.xxy slave1
    xxx.xxx.xxx.xxz slave2
    # Additionally you may need to remove lines like "xxx.xxx.xxx.xxx localhost", "xxx.xxx.xxx.xxy localhost", "xxx.xxx.xxx.xxz localhost" etc if they exist.
    # However it's okay keep lines like "127.0.0.1 localhost" and others.
    
    Run Code Online (Sandbox Code Playgroud)
  5. [在所有机器上]配置iptables

    允许您计划通过防火墙用于各种Hadoop守护程序的默认或自定义端口

    要么

    更容易,禁用iptables

  6. [on Namenode/master]获取从Namenode(主站)到所有Datnode(从站)的ssh访问.

    ssh-copy-id -i ~/.ssh/id_rsa.pub $USER@slave1
    ssh-copy-id -i ~/.ssh/id_rsa.pub $USER@slave2
    
    Run Code Online (Sandbox Code Playgroud)

    通过运行确认的事情ping slave1,ssh slave1,ping slave2,ssh slave2等你应该有一个适当的反应.(请记住通过键入exit或关闭终端退出每个ssh会话.为了更安全,我还确保所有节点都能够相互访问,而不仅仅是Namenode/master.)

  7. [在所有机器上]编辑core-site.xml文件

    nano /usr/local/hadoop/etc/hadoop/core-site.xml
    
    Run Code Online (Sandbox Code Playgroud)

    核心的site.xml

    <configuration>
        <property>
            <name>fs.defaultFS</name>
            <value>master:9000</value>
            <description>NameNode URI</description>
        </property>
    </configuration>
    
    Run Code Online (Sandbox Code Playgroud)
  8. [在所有机器上]编辑yarn-site.xml文件

    nano /usr/local/hadoop/etc/hadoop/yarn-site.xml
    
    Run Code Online (Sandbox Code Playgroud)

    纱的site.xml

    <configuration>
        <property>
            <name>yarn.resourcemanager.hostname</name>
            <value>master</value>
            <description>The hostname of the RM.</description>
        </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>
    </configuration>
    
    Run Code Online (Sandbox Code Playgroud)
  9. [在所有机器上]修改从属文件,删除文本"localhost"并添加从属主机名

    nano /usr/local/hadoop/etc/hadoop/slaves
    
    Run Code Online (Sandbox Code Playgroud)

    奴隶

    slave1
    slave2
    
    Run Code Online (Sandbox Code Playgroud)

    (我想只在Namenode/master上使用它也可以工作,但无论如何我在所有机器上都这样做.还要注意,在这个配置中,master只表现为资源管理器,这就是我的意图.)

  10. [在所有机器上]修改hdfs-site.xml文件,将属性值更改为dfs.replication> 1(至少为集群中的从属数量;此处我有两个从属设备,因此我将其设置为2)
  11. [仅限Namenode/master](重新)通过namenode格式化HDFS

    hdfs namenode -format
    
    Run Code Online (Sandbox Code Playgroud)
  12. [可选的]
    • dfs.datanode.data.dir从master的hdfs-site.xml文件中删除属性.
    • dfs.namenode.name.dir从所有slave的hdfs-site.xml文件中删除属性.

测试(仅在Namenode/master上执行)

start-dfs.sh;start-yarn.sh

echo "hello world hello Hello" > ~/Downloads/test.txt

hadoop fs -mkdir /input

hadoop fs -put ~/Downloads/test.txt /input

hadoop jar /usr/local/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-*.jar wordcount /input /output
Run Code Online (Sandbox Code Playgroud)

等待几秒钟,映射器和减速器应该开始.


这些链接帮助我解决了这个问题: