在Ubuntu11.10下构建Hadoop实验环境笔记(3)

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 

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/929c1c07a2f5c55a9d16f4689caa4d9f.html