顿搜
使用MyEclipse 2015 Stable 2.0 编译运行MapReduce程序
在Ubuntu中使用命令行,运行Hadoop的MapReduce程序非常方便,下面我们介绍如何使用MyEclipse/Eclipse编译运行MapReduce程序。
一、下载插件
首先去GitHub上下载MyEclipse插件包 hadoop2x-eclipse-plugin。
也可下载我自己编译的2.7.1版本。编译方法参见手动编译Hadoop-2.X.X-Eclipse-Plugin源代码,生成Jar文件
百度网盘地址:
- hadoop-eclipse-plugin-2.7.1.jar 提取码:v2ud 备注:这个用于Linux版MyEclipse/Eclipse
- hadoop-eclipse-plugin-2.6.0.jar 提取码:796t 备注:这个用于Windows版MyEclipse/Eclipse
二、安装MyEclipse
请参见 MyEclipse 2015下载安装与配置——Windows J2EE开发序列之二
Linux下的安装方式类似。
三、Ubuntu下安装Hadoop-Plugin
将hadoop-eclipse-plugin-2.7.1.jar复制到 MyEclipse 安装目录的 plugins 文件夹中,重启MyEclipse。
然后依次点击Windows-->Preference
然后点击左侧的Hadoop Map/Reduce,出现如下错误:
Unable to create the selected preference page. org/apache/hadoop/eclipse/preferences/MapReducePreferencePage : Unsupported major.minor version 52.0
表示JDK版本不正确,我编译该插件用的JDK8u_66,所以需要将MyEclipse的JDK版本修改为JDK8
需要修改以下三个地方:
1、Windows-->Preferences-->Java-->Installed JREs,如果没有对应版本,请选择右侧Add进行添加。
2、Windows-->Ant-->Editor-->Runtime-->Global Entries,将下面的jar包移除,然后添加对应版本的tool.jar
3、打开MyEclipse/Eclipse安装目录,编辑myeclipse.ini/eclipse.ini,将-vm下的路径换成对应的java路径
至此,问题解决了,现在重新打开Hadoop Map/Reduce,可以选择Hadoop的安装路径了
四、配置 Hadoop-Plugin
将视图切换到Map/Reduce下(记得不是Java下哟)。在 Window 菜单下选择 Open Perspective -> Other,弹出一个窗体,从中选择 Map/Reduce 选项即可进行切换。
在控制台New一个新的Location
在弹出来的 General 选项面板中进行 Master 的设置,设置要和 Hadoop 的配置一致。(如我使用的Hadoop伪分布式配置,设置了 fs.defaultFS 为 hdfs://192.168.1.101:9090,则 DFS Master 那的 Post 也应改为 9090),其中Location name随便填,如果是远程的Hadoop,请将Use M/R Master host前面的勾去掉,在下面的Host处填写远程的IP
然后切换到高级选项。这里切记需要与 Hadoop 的配置一致(即自己手动修改过的xml配置文件中的内容,都要相应的在这里设置一下),最后点击finish完成即可。
五、Windows下安装Hadoop-Plugin
基本和Ubuntu的安装方法一样。
首先将hadoop-eclipse-plugin-2.6.0.jar复制到 MyEclipse 安装目录的 plugins 文件夹中,重启MyEclipse。
然后依次点击Windows-->Preference
将Ubuntu中Hadoop-2.7.1的安装目录拷一份到Windows下,下面的地址就填写这个地址。
之后和Ubuntu中的操作一样。操作完成,如果配置都正确的话,可以看到DFS location下已经有相应文件了,代表已经和远程连接成功。
六、创建一个Map/Reduce工程
依次点击File-->New-->Project
选择Map/Reduce Project
输入工程名即可
可以看到项目一件导入了很多包
下面在src下建立JAVA文件,然后编写MapReduce程序即可。
七、问题解决
在Windows版本的MyEclipse/Eclipse开发中,\hadoop-2.7.1\bin目录下需要几个Windows平台对应的文件,这些文件在GitHub上有提供,不过可能没有对应最新2.7.1的版本。如果缺少这些文件,可能出现native等问题:
1、HADOOP_HOME不存在
java.io.IOException: HADOOP_HOME or hadoop.home.dir are not set.
at org.apache.hadoop.util.Shell.checkHadoopHome(Shell.java:303)
at org.apache.hadoop.util.Shell.<clinit>(Shell.java:328)
at org.apache.hadoop.util.GenericOptionsParser.preProcessForWindows(GenericOptionsParser.java:440)
at org.apache.hadoop.util.GenericOptionsParser.parseGeneralOptions(GenericOptionsParser.java:486)
at org.apache.hadoop.util.GenericOptionsParser.<init>(GenericOptionsParser.java:170)
at org.apache.hadoop.util.GenericOptionsParser.<init>(GenericOptionsParser.java:153)
at so.dun.mutitable.MutiTable.main(MutiTable.java:129)解决办法:配置环境变量
HADOOP_HOME="C:\Users\bean\Workspaces\MyEclipse\hadoop-2.7.1"并将%HADOOP_HOME%/bin;加入到Path中,具体可参见Java Platform JDK 的安装与配置中的环境配置方法。
需要重启MyEclipse/Eclipse才能生效。
2、winutils.exe不存在
java.io.IOException: Could not locate executable null\bin\winutils.exe in the Hadoop binaries.
at org.apache.hadoop.util.Shell.getQualifiedBinPath(Shell.java:356)
at org.apache.hadoop.util.Shell.getWinUtilsPath(Shell.java:371)
at org.apache.hadoop.util.Shell.<clinit>(Shell.java:364)
at org.apache.hadoop.util.GenericOptionsParser.preProcessForWindows(GenericOptionsParser.java:440)
at org.apache.hadoop.util.GenericOptionsParser.parseGeneralOptions(GenericOptionsParser.java:486)
at org.apache.hadoop.util.GenericOptionsParser.<init>(GenericOptionsParser.java:170)
at org.apache.hadoop.util.GenericOptionsParser.<init>(GenericOptionsParser.java:153)
at so.dun.mutitable.MutiTable.main(MutiTable.java:129)这时需要将原来在Ubuntu编译过的源码包中hadoop-2.7.1-src\hadoop-common-project\hadoop- common\src\main\native\native.sln文件在Windows下用Visual Studio 2015(2010以上版本)编译,得到相应的本地文件。如果不想自己编译,或者没有相应平台,可以下载我编译好的文件。
Hadoop-common-2.7.1-bin 64位下载:
hadoop-common-2.7.1-bin.zip 提取码:pafa
解压后,将hadoop.dll文件放到Windows/System32目录下,其他文件复制到\hadoop-2.7.1\bin下(是Windows中的目录),然后重启MyEclipse/Eclipse。
3、NativeIO$Windows.createDirectoryWithMode0
org.apache.hadoop.io.nativeio.NativeIO$Windows.createDirectoryWithMode0(Ljava/lang/String;I)V这个问题是由于hadoop-common-2.7-bin下的文件和hadoop版本不兼容导致的,请下载相应的版本,或者自己动手编译。如果用的是hadoop-2.7.1 x64位,可以下载我上面提供的自己编译的软件包。















