26,使用Hadoop官方程序组件(wordcount)测试云计算系统
1)创建目录并准备文件
$ makedir -p ~/wordcount
$ cd ~/wordcount
$ echo "Hello World Bye World" >> inputfile1
$ echo "Hello Hadoop Bye Hadoop" >> inputfile1
2)指定HDFS分布式文档格式筛选这两件文件,做为Map/Reduce工作的输入文档 (即把整个目录中的文件上传到HDFS的input中)
$ hadoop dfs -put ~/wordcount input
$ hadoop fs -ls input (查看input中的文件)
结果:
Found 2 items
-rw-r--r-- 1 hadoop supergroup 22 2012-04-05 10:07 /user/hadoop/input/inputfile1
-rw-r--r-- 1 hadoop supergroup 27 2012-04-05 10:07 /user/hadoop/input/inputfile2
3)使用hadoop-examples-1.0.1.jar内附的wordcount程序计算各输入文档中单词出现的总次数
$ hadoop jar /usr/share/hadoop/hadoop-examples-1.0.1.jar wordcount input output
4)通过命令输出或:50030可查看当前进度
5)计算完成后,看结果:
$ hadoop dfs -get output output
或
$ hadoop fs -cat output/part-r-00000
27,排错:注意看/var/log/hadoop/hadoop/目录下的各日志文件
1)org.apache.hadoop.mapred.FileAlreadyExistsException: Output directory output already exists
这是因为mapreduce的输出都应该是单独的输出文件,不能有重名的情况
需要删除已有的同名文件
$ hadoop fs -rmr output
2)map进行到100%后,reduce过程进行到某个数值(如16%)后就不再继续,直到被hadoop强制关闭。
可能原因:
a) 因为 /etc/hosts 中配置的IP 别名和hostname不一致造成的!
经过对job history进行分析,并跟踪到task失败的任务的节点,查看syslog,发现原因如下:
<1>.对于运行在A节点上的map任务,运行完毕后,将运行结果提交给jobtracker,并将运行结果保存在节点A上.
<2>.对于运行在B节点上的reduce任务,从jobtracker取得任务信息(假设任务包括对节点A的map的数据).并直接从节点A提取该map的结果.
原因在第二步.当节点B的reduce从jobtracker获得的任务中,包括map的服务器地址,而这个地址是改服务器的名字,而不是IP地址.因此,当在本地解析该服务器名的时候,无法解析出他的ip地址,导致无法从A节点,提取数据.
slave2 reduce时候需要得到slave1 map的结果, datanode间需要数据copy, slave2找salve1使用的是hostname,而不是/etc/hosts 中配置的slave1,
故:/etc/hostname, /etc/hosts, $HADOOP_HOME/conf/masters, $HADOOP_HOME/conf/slaves, $HADOOP_HOME/conf/core-site.xml, $HADOOP_HOME/conf/mapred-site.xml中的IP别名要和hostname一致。
b) 因为secondary name node所在的机器没有配置dfs.http.address这个参数,该参数在hadoop-default.xml里的缺省值是0.0.0.0:50070,应改为name node所在机器的ip地址。
3)hadoop 文件夹无法删除,Name node is in safe mode.
关闭安全模式:$ hadoop dfsadmin -safemode leave
28, 其他hadoop命令
1) 在hdfs 中建立一个input 目录
$ hadoop fs –mkdir input
2) 查看目录中文件列表
$ hadoop fs -ls input
3)将file01 和file02 拷贝到hdfs 中:
$ hadoop fs –copyFromLocal /home/hexianghui/soft/file0* input
4)查看文件内容:
$ hadoop fs -cat output/part-r-00000
5)删除目录
$ hadoop fs -rmr output
6)关闭安全模式
$ hadoop dfsadmin -safemode leave