我最近在单节点集群上尝试了Hadoop(2.7.1)而没有任何问题,并决定转向具有1个namenode和2个datanode的多节点集群.
但是我面临一个奇怪的问题.无论我尝试运行什么工作,都会遇到以下消息:
在网络界面上:
YarnApplicationState: ACCEPTED: waiting for AM container to be allocated,launched and register
在cli中:
16/01/05 17:52:53 INFO mapreduce.Job: Running job: job_1451083949804_0001
他们甚至没有开始,在这一点上,我不确定我需要做出哪些改变才能使其发挥作用.
这是我试图解决的问题:
>在所有节点上禁用防火墙
>设置较低的资源限制
>在不同的机器,路由器和发行版下进行配置
我真的很感激任何帮助(即使是一分钟的提示)正确的方向.
我已按照这些说明(配置):
> Running Hadoop on Ubuntu Linux (Multi-Node Cluster)
> How To Setup Multi Node Hadoop 2 (YARN) Cluster
解决方法
Hadoop(2.7.1)多节点集群配置
>确保您拥有一个没有主机隔离的可靠网络.静态IP分配是优选的,或者至少具有非常长的DHCP租用.另外,所有节点(Namenode / master& Datanodes / slaves)都应该有一个具有相同密码的公共用户帐户;如果您不这样做,请在所有节点上创建此类用户帐户.在所有节点上使用相同的用户名和密码会使事情变得不那么复杂.
> [在所有计算机上]首先为单节点群集配置所有节点.您可以使用我在here上发布的脚本.
>在新终端中执行这些命令
[在所有机器上]↴
stop-dfs.sh;stop-yarn.sh;jps rm -rf /tmp/hadoop-$USER
[仅限Namenode / master]↴
rm -rf ~/hadoop_store/hdfs/datanode
[仅限Datanodes / slaves]↴
rm -rf ~/hadoop_store/hdfs/namenode
> [在所有计算机上]为群集中的所有节点添加IP地址和相应的主机名.
sudo nano /etc/hosts
主机
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.
> [在所有机器上]配置iptables
允许您计划通过防火墙用于各种Hadoop守护程序的默认或自定义端口
要么
更容易,禁用iptables
>关于发行版的RedHat(Fedora,CentOS)
sudo systemctl disable firewalld sudo systemctl stop firewalld
>像Debian这样的Debian(Ubuntu)
sudo ufw disable
> [仅限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
通过运行ping slave1,ssh slave1,ping slave2,ssh slave2等来确认.你应该有一个正确的响应. (记住通过键入exit或关闭终端退出每个ssh会话.为了更安全,我还确保所有节点都能够相互访问,而不仅仅是Namenode / master.)
> [在所有机器上]编辑core-site.xml文件
nano /usr/local/hadoop/etc/hadoop/core-site.xml
核心的site.xml
<configuration> <property> <name>fs.defaultFS</name> <value>master:9000</value> <description>NameNode URI</description> </property> </configuration>
> [在所有机器上]编辑yarn-site.xml文件
nano /usr/local/hadoop/etc/hadoop/yarn-site.xml
纱的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>
> [在所有机器上]修改从属文件,删除文本“localhost”并添加从属主机名
nano /usr/local/hadoop/etc/hadoop/slaves
奴隶
slave1 slave2
(我想只在Namenode / master上使用它也可以工作,但我在所有机器上都这样做了.还要注意,在这个配置中,master只表现为资源管理器,这就是我的意图.)
> [在所有机器上]修改hdfs-site.xml文件,将属性dfs.replication的值更改为> 1(至少到集群中的从站数量;这里我有两个从站,所以我将它设置为2)
> [仅限Namenode / master](重新)通过namenode格式化HDFS
hdfs namenode -format
> [可选]
>从master的hdfs-site.xml文件中删除dfs.datanode.data.dir属性.
>从所有slave的hdfs-site.xml文件中删除dfs.namenode.name.dir属性.
测试(仅在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
等待几秒钟,映射器和减速器应该开始.
> https://stackoverflow.com/a/24544207/2534513
> Hadoop YARN Installation: The definitive guide#Cluster Installation