如果一切顺利,现在可以向 Hadoop 提交任务了。这里我们使用 Hadoop 自带的实例程序运行 wordcount 任务,以此验证 Hadoop 是否部署成功。
cd ~/bigdata/hadoop-2.7.7 #把当前路径下的 LICENSE.txt 文件复制到 HDFS 中 hadoop fs -put ./LICENSE.txt /wordcount/input #提交任务,最后两个参数分别指定任务的输入和输出 hadoop jar $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.7.jar wordcount /wordcount/input /wordcount/output #查看输出路径 hadoop fs -ls /wordcount/output #如果一切正常,该路径下包含两个文件 #第一个文件是空文件,表示任务运行成功 /wordcount/output/_SUCCESS #第二个文件是输出文件,统计了 LICENSE.txt 中每个单词出现的次数 /wordcount/output/part-r-00000 7 坑 7.1 hostname 配置之前部署 Hadoop 的时候都是在 192.168.7.x 的机器上,那些机器的 hostname 和 hosts 都已经配置好了,直接用就行。但是 192.168.105.x 的这几台机器并没有配好,每台机器的 hostname 都是 ivic。
一开始嫌麻烦就没配,在配置文件里直接填了 IP 地址,结果最后启动集群以后就出现了一个很奇怪的现象————用 jps 命令查看每个节点的服务,一切正常,但在 web ui 里看不到可用的 DataNode,总可用空间是 0。后来看 DataNode 上的日志文件才发现是 hostname 无法解析,不知道为什么 Hadoop 把 IP 地址当作 hostname 了。于是重新配置 hostname,配好以后再重启 Hadoop,问题解决。
hostname 的 配置过程如下(这几台机器上装的是 Ubuntu 18.04,不同系统的配置过程略有区别)
#将该文件中的内容修改为想要的hostname,比如ivic10 sudo vim /etc/hostname #让修改立即生效 hostname ivic10 7.2 format 命令在排查上一个问题的过程时,我曾经尝试把 Hadoop 集群停掉然后用 hdfs namenode -format 命令格式化 NameNode,达到“恢复出厂设置”的效果。然而这样做以后再启动 hdfs,原本能启动的 DataNode 现在也启动不了了。浏览 NameNode 的日志发现问题出在 DataNode 的 cluster id 和 NameNode 不一致,所以无法启动。原来 format 命令会为 NameNode 生成一个新的 cluster id,而 DataNode 的 cluster id 信息存储在 dfs.datanode.data.dir 中,并没有发生变化,因此会产生冲突。解决方案是在执行 format 命令之后删除所有 DataNode 的 dfs.datanode.data.dir,也就是 /home/ivic/bigdata/hdfs/data文件夹。
7.3 日志Hadoop 的日志系统很完善,出了问题在日志里都能找到原因。如果 NameNode 启动不了,就去看 NameNode 的日志,DataNode 启动不了,就去看 DataNode 的日志。日志文件路径为 $HADOOP_HOME/logs
7.4 配置文件的同步如果集群用的是 nfs,改一台机器的配置文件其他机器上就全部同步修改好了(不过要注意不要把 dfs.namenode.name.dir 和 dfs.datanode.data.dir 配置到网络文件系统上)。
如果没有 nfs 该怎么办呢,难道每次都要手动修改所有机器上的配置文件吗?不是滴,这时候就需要祭出神器 rsync 了,只要用一条命令就可以把修改推送到其他机器上。
举个例子,比如你刚在 ivic10 上修改了 $HADOOP_HOME/etc/hadoop/ 路径下的 core-site.xml,hdfs-site.xml,yarn.xml 三个文件,如何把修改同步到 ivic11 和 ivic12 呢?
cd $HADOOP_HOME/etc for ip in 11 12; do rsync -r hadoop ivic@ivic${ip}:/home/ivic/bigdata/hadoop-2.7.7/etc; done搞定。
8 参考FS Shell Commands
rsync 的使用方法
Hadoop 分布式集群搭建
Hadoop Cluster Setup