Hadoop的Eclipse插件如今已经没有二进制版直接提供,只能本身编译。不过要注意,必定要下载Hadoop的src包,否则是不带源代码的。环境以下:html
Linux的发行版是Ubuntu13.04,Hadoop版本是1.1.2。
hadoop安装在/opt/hadoop,因此源代码的目录是hadoop根路径下的src/contrib/eclipse-plugin。
Eclipse安装路径是/opt/eclipse。
编译步骤:java
一共须要修改三个文件: web
(1)hadoop根路径下的src/contrib/eclipse-plugin/build.propertiesapache
(2)hadoop根路径下的src/contrib/build-contrib.xml网络
(3)hadoop根路径下的src/contrib/eclipse-plugin/build.xmlapp
具体作以下修改:less
1. 首先编辑 src/contrib/eclipse-plugin/build.properties 文件eclipse
添加两行,补充Eclipse路径和Hadoop版本:蓝色部分是添加的两行oop
output.. = bin/
bin.includes = META-INF/,\
plugin.xml,\
resources/,\
classes/,\
classes/,\
lib/
eclipse.home=/opt/eclipse
version=1.1.2
注意:网上都说编辑src/contrib/build-contrib.xml,添加两行,补充Eclipse路径和Hadoop版本:post
<property name="eclipse.home" location="/opt/eclipse"/> <property name="version" value="1.1.2"/>
可是我这样作在ant的时候却报错:找不到eclipse.home
2. 咱们须要引用hadoop的一些包,可是默认的classpath没有这些包(咱们没有从头编译)。因此须要修改classpath
打开src/contrib/eclipse-plugin/build.xml文件,定位<path id="classpath">,加入:
<fileset dir="${hadoop.root}"> <include name="**/*.jar" /> </fileset>
3. 代码中使用了一些遗留功能,因此咱们要修改deprecation的设定。这一步非必需
打开hadoop根路径下面的src/contrib/build-contrib.xml,定位
<property name="javac.deprecation" value="off"/>
而后修改为
<property name="javac.deprecation" value="on"/>
4. 修改includeantruntime设置。 这一步非必需
定位build.xml中的<target name="compile" ...>,修改javac的设置,加入一个选项
includeantruntime="on"
也就是将javac修改为
<javac encoding="${build.encoding}" srcdir="${src.dir}" includes="**/*.java" destdir="${build.classes}" debug="${javac.debug}" deprecation="${javac.deprecation}" includeantruntime="on"> <classpath refid="classpath"/> </javac>
5. jar打包的时候须要hadoop的一些jar文件,可是咱们没有编译生成它,因此咱们须要修改一下jar这个target。
另外,有几个jar是咱们须要用到,而build.xml里面没有自动包含的,若是不包含它们,Eclipse链接Hadoop会出现failure to login错误,其实就是找不到类
在build.xml中找到
<copy file="${hadoop.root}/build/hadoop-core-${version}.jar" tofile="${build.dir}/lib/hadoop-core.jar" verbose="true"/> <copy file="${hadoop.root}/build/ivy/lib/Hadoop/common/commons-cli-${commons-cli.version}.jar" todir="${build.dir}/lib" verbose="true"/>
咱们修改为
<copy file="${hadoop.root}/hadoop-core-${version}.jar" tofile="${build.dir}/lib/hadoop-core.jar" verbose="true"/> <copy file="${hadoop.root}/lib/commons-cli-${commons-cli.version}.jar" tofile="${build.dir}/lib/commons-cli.jar" verbose="true"/> <copy file="${hadoop.root}/lib/commons-configuration-1.6.jar" tofile="${build.dir}/lib/commons-configuration.jar" verbose="true"/> <copy file="${hadoop.root}/lib/commons-httpclient-3.0.1.jar" tofile="${build.dir}/lib/commons-httpclient.jar" verbose="true"/> <copy file="${hadoop.root}/lib/commons-lang-2.4.jar" tofile="${build.dir}/lib/commons-lang.jar" verbose="true"/> <copy file="${hadoop.root}/lib/jackson-core-asl-1.8.8.jar" tofile="${build.dir}/lib/jackson-core-asl.jar" verbose="true"/> <copy file="${hadoop.root}/lib/jackson-mapper-asl-1.8.8.jar" tofile="${build.dir}/lib/jackson-mapper-asl.jar" verbose="true"/>
6. 可是这样,咱们的jar文件仍是不会自动部署到eclipse中,你能够手动复制,即将编译好的/opt/hadoop/build/contrib/eclipse-plugin/hadoop-eclipse-plugin-1.1.2.jar插件复制到eclipse安装目录下的plugins下便可
可是咱们但愿ant帮咱们自动部署进去。咱们在build.xml中新建一个target,用来部署:
<target name="deploy" depends="jar" unless="skip.contrib"> <copy file="${build.dir}/hadoop-${name}-${version}.jar" todir="${eclipse.home}/plugins" verbose="true"/> </target>
而后修改project的默认target,也就是将project修改为:
<project default="deploy" name="eclipse-plugin">
7. 接下来一步咱们要修改Hadoop根目录下的src/contrib/META-INFO/MANIFEST.MF,修改这个jar的classpath。
找到这个文件的Bundle-ClassPath这一行,而后,修改为(不能换行,我这里方便显示换行了)
Bundle-ClassPath: classes/,lib/commons-cli.jar,lib/commons-httpclient.jar,lib/hadoop-core.jar,lib/jackson-mapper-asl.jar,
lib/commons-configuration.jar,lib/commons-lang.jar,lib/jackson-core-asl.jar
8. 执行ant,代码就会被编译,插件会被自动安装到eclipse的plugins目录中,打开eclipse就能够使用了(若是没有安装ant,请去apache下载ant的二进制编译版,具体见后面附录)。另外编译时会自动联网下载须要的包,因此请保证网络通畅。
启动Eclipse 后 Window->Open Perspective->Other ,弹出对话框列表中,会出现图标为蓝色大象,文字为Map/Reduce
集成成功!
附:Ubuntu下ant的安装和配置
一. 自动安装
sudo apt-get install ant
可是这种装法很差。首先安装的ant不是最新的版本,其次还要装一堆其余的附带的东西。好比一个ant只有几兆,当用apt-get install方式安装时须要下载60多兆的东西进行安装,十分缓慢且占空间,因此我才用本身手动ant安装。
二. 手动安装
1. 到Apache官网下载最新版本的ant:http://ant.apache.org/bindownload.cgi
2. 解压下载下来的.tar.gz文件到/opt目录下:
tar -xzvf apache-ant-1.9.2-bin.tar.gz -C /opt
3. 配置环境变量:sudo vi /etc/profile,在原来基础上添加如下蓝体字:
export ANT_HOME=/opt/apache-ant-1.9.2 export JAVA_HOME=/opt/java/jdk1.7.0_25/ export JRE_HOME=/opt/java/jdk1.7.0_25/jre export CLASSPATH=.:$CLASSPATH:$JAVA_HOME/lib:$JRE_HOME/lib export PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin:$ANT_HOME/bin
4. 验证是否安装成功:
ant -version
Apache Ant(TM) version 1.9.2 compiled on July 8 2013
如此字样,则表示安装成功!
在编写MapReduce程序以前须要配置Eclipse环境,步骤以下:
若是安装插件成功,打开Window-->Preferences,你会发现Hadoop Map/Reduce选项,在这个选项里你须要配置Hadoop installation directory。配置完成后退出。
2. 打开Map/Reduce视图,配置Map/Reduce Locations。
单击eclipse右上角的Open Perspective图标,选择Map/Reduce视图打开。
在Map/Reduce Locations(Eclipse界面的正下方)中新建一个Hadoop Location。在这个View中,点击鼠标右键-->New Hadoop Location。在弹出的对话框中你须要配置Location name,可任意填,如Hadoop,以及Map/Reduce Master和DFS Master。这里面的Host、Port分别为你在mapred-site.xml、core-site.xml中配置的地址及端口。个人这两个文件中配置中部份内容以下:
mapred-site.xml
<property> <name>mapred.job.tracker</name> <value>http://192.168.1.151:9001</value> </property>
core-site.xml:
<!-- file system properties --> <property> <name>fs.default.name</name> <value>hdfs://192.168.1.151:9000</value> </property>
最后的配置截图以下:
设置完成后,点击Finish就应用了该设置。而后,在最左边的Project Explorer中就能看到DFS的目录,以下图所示:
固然最经典的以WordCount为例,就跟Hello World同样,步骤以下:
1. 新建项目。
File-->New-->Other-->Map/Reduce Project
项目名能够随便取,如HadoopTest。
复制 hadoop安装目录/src/examples/org/apache/hadoop/examples/WordCount.java到刚才新建的项目下面,修改里面的package。
2. 上传模拟数据文件夹
为了运行程序,须要一个输入文件夹和输出的件夹。输出文件夹,在程序运行完成后会自动生成。咱们须要给程序一个输入文件夹。
(1)在当前目录(如hadoop安装目录)下新建文件夹input,并在文件夹下新建两个文件file0一、file02,这两个文件内容分别以下:
// file01
Hello Alexia Welcome Hadoop
// file02
Welcome Alexia Bye Hadoop
(2)将文件夹input上传到HDFS中
在已经启动Hadoop守护进程终端中cd 到hadoop安装目录,运行下面命令:
bin/hadoop fs -put input input
这个命令将input文件夹上传到了hadoop文件系统了,在该系统下就多了一个input文件夹,你能够使用下面命令查看:
bin/hadoop fs -ls
3. 运行项目
(1) 在新建的项目HadoopTest,点击WordCount.java,右键-->Run As-->Run Configurations
(2) 在弹出的Run Configurations对话框中,点Java Application,右键-->New,这时会新建一个application名为WordCount
(3) 配置运行参数,点Arguments,在Program arguments中输入“你要传给程序的输入文件夹和你要求程序将计算结果保存的文件夹”,如:
hdfs://192.168.1.151:9000/user/hadoop/input hdfs://192.168.1.151:9000/user/hadoop/output
这里面的input就是你刚传上去的文件夹。文件夹地址你能够根据本身具体状况填写。以下图:
(4) 点击Run,运行程序。
等运行结束后,能够在终端中用命令以下,
查看是否生成了输出文件夹output bin/hadoop fs -ls 用下面命令查看生成的文件内容 bin/hadoop fs -cat output01/*
若是显示以下,说明已经成功在eclipse下运行第一个MapReduce程序了
Alexia 2
Bye 1
Hadoop 2
Hello 1
Welcome 2