上一篇文章介绍了启动HDFS,并且在浏览器访问,接下来启动yarn并尝试提交任务使其执行。在hadoop2节点上启动yarn,因为yarn-site.xml中写的yarn.resourcemanager.hostname属性值是hadoop2。
sbin/start-yarn.sh
然后jps查看hadoop2上的进程:
发现ResourceManager启动成功。然后运行单词统计任务:
hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.2.jar wordcount /wcinput /wcoutput
这里的wcoutput同样不能事先存在。因为这里使用的是集群模式,所以输出路径wcoutput前带上/,表示在HDFS的根路径。运行成功后可以在根路径下的output目录中看到结果。相应的文件真实存储路径依然在usr/lib/hadoop/data/dfs/data/current/BP-2060838795-172.17.0.4-1651994494825/current/finalized/subdir0/subdir0:
如果执行任务报错:The auxService:mapreduce_shuffle does not exist,应确保yarn-site.xml的如下配置正确:
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
笔者因为services写成了service,找错误原因找了很久。如果还不行,再在yarn-site.xml中加上如下内容:
<property>
<name>yarn.nodemanager.aux-services.mapreduce_shuffle.class</name>
<value>org.apache.hadoop.mapred.ShuffleHandler</value>
</property>
如果报错:Please check whether your etc/hadoop/mapred-site.xml contains the below configuration,则在mapred-site.xml加上如下内容:
<property>
<name>yarn.app.mapreduce.am.env</name>
<value>HADOOP_MAPRED_HOME=/usr/lib/hadoop</value>
</property>
<property>
<name>mapreduce.map.env</name>
<value>HADOOP_MAPRED_HOME=/usr/lib/hadoop</value>
</property>
<property>
<name>mapreduce.reduce.env</name>
<value>HADOOP_MAPRED_HOME=/usr/lib/hadoop</value>
</property>
其中的HADOOP_MAPRED_HOME就是环境变量$HADOOP_HOME。如果报错:Retrying connect to server xxxx,这是一直连不上某个节点的现象,建议检查各节点的ssh是否开启且能否免密登录。实在不行然后再在yarn-site.xml中添加如下配置:
<property>
<name>yarn.resourcemanager.address</name>
<value>resourcemanager节点ip或主机名:8032</value>
</property>
<property>
<name>yarn.resourcemanager.scheduler.address</name>
<value>resourcemanager节点ip或主机名:8030</value>
</property>
<property>
<name>yarn.resourcemanager.resource-tracker.address</name>
<value>resourcemanager节点ip或主机名:8031</value>
</property>
如果还报resourcemanager连不上,建议参考以下第二点重启yarn集群。
其它问题,总结如下:
1. 如果浏览器访问不到相应端口,解决方法一是运行容器时没有进行端口映射(Mac主机无法ping同docker容器,这是由Mac版的docker决定的,因此一定运行容器时要加上端口映射),二是相应的xml配置文件中的主机名换成实际的容器ip地址
2. 如果发现namenode少了一个或者nodemanager等节点有问题,需要重启集群,需要注意删掉各节点hadoop安装路径下的data和logs目录(顺便把有关错误日志也可一起删除),保险起见在/tmp下的文件也一并删掉,防止一些进程杀不死。清理干净后,执行hdfs namenode -format格式化namenode,然后依次启动hdfs和yarn。
3. 如果想重启单个节点,可以使用如下命令:
hdfs --daemon start/stop namenode/datanode/secondarynamenode
yarn --daemon start/stop resourcemanager/nodemanager
4. 前台浏览器无法删除文件/创建目录,报权限不足,可在core-site.xml添加如下配置:
<property>
<name>hadoop.http.staticuser.user</name>
<value>root</value>
</property>
上述配置表示浏览器登录的用户为root。
5. 上述集群搭建方案使用了docker容器,不存在网上说了很多的防火墙的问题。