五、Eclipse运行WordCount项目:
1.新建WordCount项目
File-->New-->Other-->Map/Reduce Project 项目名可以随便取,如WordCount。
复制 hadoop安装目录/src/example/org/apache/hadoop/example/WordCount.java到刚才新建的项目下面。
2.上传模拟数据文件夹
为了运行程序,我们需要一个输入的文件夹,和输出的文件夹。
A)在本地新建word.txt 内容如下:
mapreduce java hadoop hbase
close java python c
java open javascript
helloworld hadoop
B)通过hadoop的命令在HDFS上创建/tmp/workcount目录,命令如下:bin/hadoop fs -mkdir /tmp/wordcount
C)通过copyFromLocal命令把本地的word.txt复制到HDFS上,命令如下:
bin/hadoop fs -copyFromLocal /home/grid/word.txt /tmp/wordcount/word.txt
3.运行Wordcount项目
A)在新建的项目Hadoop,点击WordCount.java,右键-->Run As-->Run Configurations
B)在弹出的Run Configurations对话框中,点Java Application,右键-->New,这时会新建一个application名为WordCount
C)配置运行参数,点Arguments,在Program arguments中输入“你要传给程序的输入文件夹和你要求程序将计算结果保存的文件夹”,如:
hdfs://192.168.11.129:8020/tmp/wordcount/word.txt hdfs://192.168.11.129:8020/tmp/wordcount/out
如果运行时报java.lang.OutOfMemoryError: Java heap space配置VM arguments(在Program arguments下)
-Xms512m -Xmx1024m -XX:MaxPermSize=256m |
4.点击Run,运行程序
点击Run,运行程序,过段时间将运行完成,等运行结束后,查看运行结果,使用命令: bin/hadoop fs -ls /tmp/wordcount/out查看例子的输出结果。
发现有两个文件夹和一个文件,使用命令查看part-r-00000文件:
bin/hadoop fs -cat /tmp/wordcount/out/part-r-00000可以查看运行结果。
如果这一步有问题,请看最后的“注意事项(2)”。
注意事项:
(1)eclipse可能会报无法连接的错:"Map/Reduce location status updater". org/codehaus/jackson/map/JsonMappingException
经过查询,是由于hadoop的eclipse插件里面缺少了一些包,按照这篇文章的说明修改包后,重新运行成功。
(2)可能会报错:
12/04/24 15:32:44 ERROR security.UserGroupInformation: PriviledgedActionException as:Administrator cause:java.io.IOException: Failed to set permissions of path: \tmp\hadoop-Administrator\mapred\staging\Administrator-519341271\.staging to 0700
Exception in thread "main" java.io.IOException: Failed to set permissions of path: \tmp\hadoop-Administrator\mapred\staging\Administrator-519341271\.staging to 0700
at org.apache.hadoop.fs.FileUtil.checkReturnValue(FileUtil.java:682)
这是由于Windows下文件权限问题,在Linux下可以正常运行,不存在这样的问题。
解决方法是修改src\core\org\apache\hadoop\fs\RawLocalFileSystem.java,注释掉 checkReturnValue(有些粗暴,在Window下,可以不用检查)
1 2 3 4 5 6 7 | private void checkReturnValue(boolean rv, Path p, FsPermission permission) throws IOException { /*if (!rv) { throw new IOException("Failed to set permissions of path: " + p + " to " + String.format("%04o", permission.toShort())); }*/ } |
然后重新编译、打包 hadoop-core-1.21.21.0.jar,再次运行即可成功。关于这个重新编译hadoop的方法我上面的压缩包里也有教程文档。
目前为止,还没有使用到hbase分布式数据库,后续我们继续研究相关方面内容。