一、常见的坑
namenode和datenode的clusterID不一样,导致datanode启动不成功。在web页面观察时只有namenode启动成功,namenode下的live node为0。 解决办法:在修改datanode的clusterID和namenode的clusterID一致时,需要注意,在namenode格式化(hdfs namenode -format)时,会生成一个clusterID默认保存在 /tmp/hadoop-username/dfs/name/current/VERSION文件中,datanode节点的clusterID保存在/tmp/hadoop−{username}/dfs/data/current/VERSION文件中,是要将这两个目录文件中的clusterID修改一致。clusterID的保存位置可以在core-site文件中配置:
<property>
<name>hadoop.tmp.dir</name>
<value>/usr/local/hadoop-2.7.3/hadoop-2.7.3/tmp</value>
</property>
在master节点上配置了/usr/local/hadoop-2.7.3/hadoop-2.7.3/etc/hadoop/slaves文件中的从服务器之后,需要立即配置好ssh密登陆之后再测试,这样可以避免因为拒绝连接导致的一系列问题
集群上的机器如果防火墙没有关,启动之后,在宿主机上通过域名或者ip访问web页面观察,是找不到服务器的,需要关掉集群的防火墙。有关防火墙的命令如下:
systemctl status firewalld.service
systemctl stop firewalld.service
systemctl start firewalld.service
systemctl enable firewalld.service
systemctl disable firewalld.service
确定namenode和datanode启动成功后,web页面可以看到如下界面,端口号50070:
这个时候可以接着配置yarn了
和yarn相关的两个配置文件是mapred-site.xml和yarn-site.xml。需要添加的配置如下:
mapred-site.xml的配置:
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
yarn-site.xml的配置:
<property>
<name>yarn.resourcemanager.hostname</name>
<value>master</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.nodemanager.auxservices.mapreduce.shuffle.class</name>
<value>org.apache.hadoop.mapred.ShuffleHandler</value>
</property>
修改完成之后,命令start-yarn.sh启动,jps观察进程,会在master节点上多了一个resourcemanager,slave机上多了一个nodemanager。可以通过web页面观察,端口号:8088,如下图:
使用Hadoop给定的mapreduce程序测试yarn的wordcount功能
命令:find /usr/local/hadoop-2.7.3/hadoop-2.7.3/ -name example.jar查找示例文件
命令:hadoop jar xxx.jar wordcount /input /output运行示例程序
通过yarn管理页面来观察该job的运行情况
命令:hadoop job -kill job_id –> mapred job -kill job_id mapred job -list杀死某个job
经验:yarn-site如果是集中启动,其实只需要在管理机上配置一份即可,但是如果单独启动,需要每台机器一份,在网页上可以看到当前机器的配置,以及这个配置的来源(这句话用人话讲就是:如果是伪分布式,resourcemanager和nodemanager在一台机器上,则只需要配置一份,如果是完全分布式,resourcemanager和nodemanager在不同的机器上分别启动,则需要在每台机器去上复制一份),否则会出现:在提交mapreduce任务时,任务会卡在running_job:jobID:xxxxxxxx这一步,不会继续map任务,因为master通过shuffle找不到所属的nodemanager执行task任务导致。
最后查看启动日志可以使用命令:tail -f /usr/local/hadoop-2.7.3/hadoop-2.7.3/logs/日志文件(tail -f命令,实时查看日志文件,需要新开一个远程连接窗口实时观察)