在HDFS的完全分布式模式部署完毕后,现在开始执行MapReduce的一个jar包来测试集群是否工作正常:
大致流程:
1) 启动集群
2) 在本地创建输入文件
3) 进入hdfs,在hdfs中创建输入文件夹,并把本地的输入文件上传进去
4) 执行MapReduce程序
5) 进入hdfs,查看程序执行结果(输出文件)
具体操作(不做特别说明,每一步操作都在master上进行):
新建/root/hadoop/data/目录,作为测试文件存放的目录:
在这个目录下新建2个txt文件,里面随便编辑一些内容,作为wordcount程序的输入:
查看hdfs中的根目录:
在hdfs的根目录中创建input目录:
通过-put指令,将本地刚创建的2个txt文件上传到hdfs的input目录中(这里记得关闭所有结点的防火墙):
master切换到${HADOOP_HOME}/share/hadoop/mapreduce目录下,让hadoop执行对应的jar包:
从这里可以体现出,用MapReduce实现运算时,分为2步,map+reduce:
提交的job执行完成:
查看hdfs中根目录的文件,出现了output1目录,output1目录中又有了MapReduce执行运算的结果(其中第一个文件_SUCCESS是为了说明程序执行成功,里面没有内容(可以-cat试试),/tmp是系统自动添加的路径):
通过-cat查看输出结果的文件,发现已经将input中的2个txt文件中的单词统计了出来:
附:
集群守护进程无法正常启动的情况及原因:
- 格式化集群时,报错。
可能的原因:
-当前用户使用不当;
-/etc/hosts里面ip和主机名的映射关系有误;
-ssh免密登录配置异常;
-jdk环境变量配置错误;
-防火墙没有关闭。 - NameNode进程启动失败。
可能的原因:
-当前用户使用不当;
-(经常遇到)重新格式化时,忘记删除${hadoop.tmp.dir}目录下的文件(tmp目录);
-网络震荡,造成edit日志文件的事务ID号不连续。 - DataNode进程启动失败(有时还不报错,就是启动不了)。
可能的原因:
-/etc/hosts里面ip和主机名的映射关系有误;
-master结点ssh免密登录此结点异常;
-(经常遇到)重新格式化时,忘记删除${hadoop.tmp.dir}目录下的文件(tmp目录),造成DataNode的唯一标识符不在新集群中;
上述问题的解决方法(暴力):
- 先删除每台机器上${hadoop.tmp.dir}目录下的文件(tmp目录),然后再格式化集群;
- 最好把logs目录下的内容也清空,因为这些log都是老集群的了,没有意义。
但是这个方法一般只适用于没有重要数据的集群,如果集群有重要数据,则不能重新格式化,会丢失数据。