运行WordCount
1. 停止hadoop:
stop-all.sh
2. 删除dfs. data/*
在nonode机器和所有datanode机器上,
”conf/hdfs-site.xml:dfs.data.dir”为/usr/hadoop/filesystem/data,删除该目录下所有文件:
rm -fr /usr/hadoop/filesystem/data/*
3. 格式化namenode
在namenode机器上,在没有启动hadoop的情况下,格式化hadoop namenode:
hadoop namenode -format
必须要输入大写Y,小写y不会被当成肯定回答
4. 启动hadoop
在namenode机器上,启动hadoop:
start-all.sh
5. 新建目录
在namenode机器上,建立hadoop目录input:
hadoop fs -mkdir input
6. 上传文件
在namenode机器上,有文件及内容如下:
Hello World Text validxxx
Hello my World
linux demo
~/file/fileB.txt:
Hello Hadoop
zip format
在namenode机器上,上传本地多个文件到hadoop目录input:
hadoop fs -put ~/file/* input
如果没有执行”删除dfs. data/*”,则错误状况如下
I. put后控制台出现错误大体为:
Error Recovery for null bad datanode[0] nodes == null
File /user/root/input/fileB.txt could only be replicated to 0nodes, instead of 1
II. 查看某一个datanode机器上日志xxx- vmDeb02.log
全路径为/usr/hadoop/hadoop-1.2.1/logs/hadoop-root-datanode-vmDeb02.log,错误大体为 :
Incompatible namespaceIDs in/usr/hadoop/filesystem/data
意思是namespaceIDs不一致。
7. 执行程序WordCount
在namenode机器上,
自己修改下hadoop-1.2.1.zip\src\examples\org\apache\hadoop\examples\WordCount.java,编译WordCount.java(代码及编译请看文章”hadoop1.2.1修改WordCount并编译”),
将生成好的wordcount.jar(含有WordCount*.class),在hadoop下运行wordcount:
hadoop jar xxx/wordcount.jar org.apache.hadoop.examples.WordCount input output
8. 查看控制台输出
查看WordCount.java输出到控制台的内容,
用Web浏览器打开http://vmdeb01:50030/jobtracker.jsp,其中vmdeb01是namenode机器的域名(需在win7下修改C:\windows\System32\drivers\etc\hosts),
依次点击:
”Completed Jobs :job_201308221000_0001” ---> map
---> task_201308221000_0001_m_000000--->All
和
”Completed Jobs :job_201308221000_0001”--->reduce
---> task_201308221000_0001_m_000000---> All
这两处的”stdoutlogs”,即是WordCount.java中System.out.print输出的内容
9. 问题
在8中,
”Completed Jobs :job_201308221000_0001”---> map :map阶段
和
”Completed Jobs :job_201308221000_0001”--->reduce : reduce阶段
map阶段的控制台输出出现了reduce函数中的控制台输出,怎么理解?
是由于main中有这样一句: job.setCombinerClass(IntSumReducer.class),即combiner被设定为reducer了。