eclipse连hadoop2.x运行wordcount 转载

转载地址:http://my.oschina.net/cjun/blog/475576

一、新建java工程,并且导入hadoop相关jar包 

此处可以直接创建mapreduce项目就可以,不用下面折磨麻烦:

4.1.2 新建java工程(需要手动导入hadoop相应jar包),具体如下图所示:

            4.1.2.1 新建java工程完成后,下面添加hadoop相应jar包,hadoop2.3.0相应jar包在/hadoop-2.3.0/share/hadoop目录中。

            4.1.2.2 进入Libraries,点击Add Library添加hadoop相应jar包。

            4.1.2.3 新建hadoop相应library成功后添加hadoop相应jar包到该library下面即可。

            4.1.2.4 需要添加的hadoop相应jar包有:

                /hadoop-2.3.0/share/hadoop/common下所有jar包,及里面的lib目录下所有jar包

                /hadoop-2.3.0/share/hadoop/hdfs下所有jar包,不包括里面lib下的jar包

                /hadoop-2.3.0/share/hadoop/mapreduce下所有jar包,不包括里面lib下的jar包

                /hadoop-2.3.0/share/hadoop/yarn下所有jar包,不包括里面lib下的jar包

参考:eclipse中hadoop2.3.0环境部署及在eclipse中直接提交mapreduce任务

二、新建WordCount类,找到官方WordCount类的源码,在

hadoop-2.6.0sharehadoopmapreducesourceshadoop-mapreduce-examples-2.6.0-sources.jar中,找到wordcount类,把代码复制出来即可。目录hadoop-2.6.0sharehadoopmapreducesources下面都是源码。

三、添加hadoop.dll和winutils.exe等并且添加到环境变量。

1.下载hadoop.dll和winutils.exe等,添加到hadoop的bin目录下,版本最好要对应(hadoop2.6.0不能使用hadoop2.2.0版本的dll文件。hadoop2.3.0可以使用hadoop2.6.0的dll文件,但是使用hadoop2.2.0的dll文件会出问题),dll文件在hadoop相关软件里面可以找到。否则会报winutls无法找到等等错误。

注意:在eclipse运行storm-hdfs时也会报

ERROR [main] util.Shell (Shell.java:getWinUtilsPath(303)) - Failed to locate the winutils binary in the hadoop binary path

但这个错误不用管,因为storm-hdfs只是使用一下hdfs的api,并不需要运行mapreduce程序。

2.将HADOOP_HOME=D:programshadoop-2.3.0-cdh5.1.0添加到环境变量,并且修改path,添加如下内容:%HADOOP_HOME%in。改完后让环境变量生效同时重启eclipse

四、右键运行,第一次需要配置运行参数,如下:

hdfs://192.168.0.91:8020/input hdfs://192.168.0.91:8020/output

运行成功后在hdfs中就有运行成功后的数据。

五、打包放到yarn集群上运行,项目上右键,export->java->JAR file,只选择代码文件即可,上传到master上,然后运行提交jar包命令,:

command:yarn jar newwordcount.jar /input /output

六、错误汇总

1.需要访问hdfs等,拒绝当前window用户访问,denial,refuse等等拒绝问题,这个时候去调整下权限,因为hdfs下的文件目录都是属于某个用户的,而别的用户(window的用户)没有写的权限,需要将程序访问的目录改成可写的权限,$HADOOP_HOME/bin/hadoop fs -chmod -R 777 /storm

参考:Eclipse调用Hadoop2.2运行MR程序

2. Exception in thread "main" java.lang.NullPointerException atjava.lang.ProcessBuilder.start(Unknown Source)

参考:解决Exception: org.apache.hadoop.io.nativeio.NativeIO$Windows.access0(Ljava/lang/String;I)Z 等一系列问题的问题2

但是不完全能解决问题,1.需要使用hadoop2.6的hadoop.dll和winutils,所以需要到网上下hadoop2.6的hadoop.dll,而不是直接下hadoop2.2的hadoop.dll,否则会报下面这个错误。

UnsatisfiedLinkError: org.apache.hadoop.util.NativeCrc32.nativeComputeChunkedSumsByteArray

2.修改path的环境变量之后,需要使环境变量立即生效:Windows不重启就使环境变量修改生效 

原文地址:https://www.cnblogs.com/LT-blogs/p/4963346.html