ITPub博客

首页 > 大数据 > 可视化 > Windows下配置Hadoop Eclipse开发环境详解

Windows下配置Hadoop Eclipse开发环境详解

可视化 作者:ghdlzjok 时间:2013-03-14 22:24:35 0 删除 编辑

    本文将对Windows Server 2003操作系统下,使用Eclipse开发Hadoop项目的环境配置做一个详细的说明。这些内容也是参考网上诸多资料后,亲测总结出来的,如有错误欢迎斧正。

一、准备

首先需要下载安装JDK,并且配置好环境变量;然后安装EclipseCygwin;下载Hadoop包,将其释放到指定的位置;此外,为了更方便的访问节点,还需要安装SecureCRTFlashFXP。具体软件版本如下所示:

JDK 1.7.0_15

Eclipse 4.2.1

Cygwin

Hadoop 1.0.4

SecureCRT 6.2.0

FlashFXP 4.2.6

现在,都下载好后,就可以开始搭建开发环境了,注意:安装过程也需要网络。(说到这里我不得不吐槽一下,以前的Sun现在的Oracle也太不够意思了,为了写个Java程序我容易吗?这么大的公司,敢问能做个一步到位的IDE吗!学学人家MS,看人家VS做的!都已经做到近乎智能到不能再智能的水平了,可人家还一个劲地推陈出新呢!Java倒好,上个世纪啥样,现在基本还是啥样,记事本,javac。呵呵~~

1、安装JDK

双击运行JDK的安装包,记住安装的路径,一路Next好了。

安装完成后,右键单击“我的电脑”,选择“属性”→“高级”→“环境变量”。

Windows下配置Hadoop <wbr>Eclipse开发环境详解

在“系统变量”新建一些环境变量。首先JAVA_HOME,变量值就是JDK的安装文件夹。

Windows下配置Hadoop <wbr>Eclipse开发环境详解

然后在Path变量中添加%JAVA_HOME%in;

Windows下配置Hadoop <wbr>Eclipse开发环境详解

新建CLASSPATH变量,变量值是

%CLASSPATH%;.;%JAVA_HOME%libdt.jar; %JAVA_HOME%lib ools.jar

这样就可以了,也许需要重启电脑,也许不需要,自便吧。在cmd中输入java –version,如果出现正确的JDK版本,则说明上述配置成功了。

Windows下配置Hadoop <wbr>Eclipse开发环境详解

2、安装Eclipse

解压到指定位置就行了,就是个普通的软件。

在他的插件包中可以找到Ant组件,如果没有那么还需要另外下载。

再次进入到环境变量对话框,新建ANT_HOME变量,变量值就是包含ant的那个文件夹,一般就是Eclipse插件包中的第一个文件夹。

例如:D:Program Fileseclipsepluginsorg.apache.ant_1.8.3.v20120321-1730

Windows下配置Hadoop <wbr>Eclipse开发环境详解

再在Path中加上%ANT_HOME%/bin;

3、安装Cygwin

这是一个能在Windows环境下模拟Unix的软件,据说没有它就不能在Windows下开发Hadoop程序。不过,我貌似就没有正常安装它,后来也确实没能像网上说的那样运行Hadoop程序,但它似乎并不影响程序的编译。再此就不详细描述了,网上有很多教程,百度一下比着装就行。核心就是装好opensshopenssl还有sed

4、安装Hadoop

它实际上是一个库,并不是什么软件,所以把它解压到指定的文件夹里就可以了,例如D:hadoop-1.0.4

5、SecureCRTFlashFXP

它们只是辅助的工具,只要能用即可,并不需要特别的配置,也与开发Hadoop程序无关,如果你有其他的远程访问工具,可以不需使用它们。下面介绍一下它们连接集群中节点的方法。

FlashFXP是图形化的访问工具,比较直观。打开它后选择“快速链接(F8)”,在弹出的对话框中填入节点的地址即可。

Windows下配置Hadoop <wbr>Eclipse开发环境详解

如果连接成功,主窗口的界面右侧就会显示出节点上的目录,Hadoop的根目录一般会是/usr/hadoop/

SecureCRT则是命令行的模式,打开程序后同样是选择快速连接,输入端口地址连接即可。

Windows下配置Hadoop <wbr>Eclipse开发环境详解

连接成功后,进入/usr/hadoop/bin文件夹,运行hadoop的守护进程start-all.sh

Windows下配置Hadoop <wbr>Eclipse开发环境详解

打开浏览器就可以访问节点了(和书上画的一样,很激动吧!)。

至此,需要安装和配置的软件都准备好了,现在你就可以在Eclipse上编写普通的Java程序,生成jar包;用SecureCRTFlashFXP访问远程节点。如果你已经感到些许不适了,那么我劝你马上关上此文档吧,下面的内容将更加令人反感。(也许Java就是为UNIX所生的,在Windows上开发Java程序从一开始就是个错误!)

二、编译HadoopEclipse插件

貌似在以前的Hadoop版本里是包含编译好的Eclipse插件的,《Hadoop权威指南》里也有介绍,但是1.0.4里面没有,但是提供了源文件,可以自己编译。好吧,这就是开源的好处,像我等用惯了盗版的草民真的不适应。原来,开源的世界就是一个“自己动手丰衣足食”的地方。那么,我们开始吧!

1、找到Eclipse插件包源代码的位置,例如D:hadoop-1.0.4srccontribeclipse-plugin

2、安全起见,把它复制到另外一个地方,例如D:hadoopplugin。(这里把这个路径记作PLUGIN

3、D:hadoop-1.0.4srccontribuild-contrib.xml复制到PLUGIN中,然后打开它,做以下修改。

name="hadoop.root" location="D:/hadoop-1.0.4"/>   hadoop的实际位置

并在其下面添加:

name="eclipse.home" location="D:/Program Files/eclipse"/> Eclipse的实际位置

name="version" value="1.0.4"/> hadoop的实际版本

在下面找到build.dir,修改到当前路径。

name="build.dir" location="build/${name}"/>

4、修改PLUGIN中的build.xml

找到

改为

下面,

添加 location="${hadoop.root}/hadoop-core-1.0.4.jar"/>

查找并替换以下内容:

name="jar" depends="compile" unless="skip.contrib">

    dir="${build.dir}/lib"/>

    file="${hadoop.root}/hadoop-core-${version}.jar" tofile="${build.dir}/lib/hadoop-core.jar" verbose="true"/>

    file="${hadoop.root}/lib/commons-cli-${commons-cli.version}.jar" todir="${build.dir}/lib" verbose="true"/>

    file="${hadoop.root}/lib/commons-configuration-1.6.jar" todir="${build.dir}/lib" verbose="true"/>

    file="${hadoop.root}/lib/commons-httpclient-3.0.1.jar" todir="${build.dir}/lib" verbose="true"/>

    file="${hadoop.root}/lib/commons-lang-2.4.jar" todir="${build.dir}/lib" verbose="true"/>

    file="${hadoop.root}/lib/jackson-core-asl-1.8.8.jar" todir="${build.dir}/lib" verbose="true"/>

    file="${hadoop.root}/lib/jackson-mapper-asl-1.8.8.jar" todir="${build.dir}/lib" verbose="true"/>

   

    jarfile="${build.dir}/hadoop-${name}-${version}.jar"

    manifest="${root}/META-INF/MANIFEST.MF">

    dir="${build.dir}" includes="classes/ lib/"/>

    dir="${root}" includes="resources/ plugin.xml"/>

   

   

5、    修改%PLUGIN%META-INFMANIFEST.MF文件。在Bundle-ClassPath下做如下修改:

Bundle-ClassPath: classes/,

 lib/hadoop-core.jar,

 lib/commons-cli-1.2.jar,

 lib/commons-configuration-1.6.jar,

 lib/commons-httpclient-3.0.1.jar,

 lib/commons-lang-2.4.jar,

 lib/commons-jackson-core-asl-1.8.8.jar,

 lib/commons-jackson-mapper-asl-1.8.8.jar

注意:每个路径之前必须要添加一个空格,否则编译会出错。

6、    cmd中进入PLUGIN文件夹,输入ant回车。编译,打包。出现BUILD SUCCESSFUL时,表明编译成功,jar包在%PLUGIN%uildeclipse-plugin文件夹中。

注意:编译过程需要网络。

Windows下配置Hadoop <wbr>Eclipse开发环境详解

7、    把生成的插件复制到Eclipseplugins文件夹中,打开Eclipse,在WindowPreferences,你会发现Hadoop Map/Reduce选项,在这个选项里你需要配置Hadoop的安装路径(按照Java的套路,终于用到它了),配置完成后OK

Windows下配置Hadoop <wbr>Eclipse开发环境详解

    8、    WindowShow ViewOther中打开Map/Reduce Locations,此时,可以看到右上角出现一个蓝色小象的Map/Reduce标志。

Windows下配置Hadoop <wbr>Eclipse开发环境详解

在这个View中,右键→New Hadoop Location。在弹出的对话框中你需要配置节点。这里面的HostPort分别为你在节点上的/usr/hadoop/conf/mapred-site.xml/usr/hadoop/conf/core-site.xml中配置的地址及端口。(此处就用到了FlashFXPLocation name是随便取的。Map/Reduce Master里的Host就是需要访问的节点IPPort就是mapred-site.xmltracker的值(只是冒号后面的数字啊)。DFS Master里的Portcore-site.xmlfs.default.name的值(也只是冒号后面的数字啊)。下面的User name则是mapred-site.xml文件里面冒号前面的字母。(很直白了吧~

Windows下配置Hadoop <wbr>Eclipse开发环境详解

现在,Eclipse左边的Project Explorer里就有DFS Location了。注意,记得要用SecureCRT启动守护进程才行,否则访问不了。

9、    现在双击就可以打开节点的文件结构了。(这里发现一个很奇怪的现象:如果之前已经在Eclipse插件文件夹里放了一个Hadoop的插件,那么要想使用新的插件,一定要先将原插件删除,然后重启Eclipse,再关上它,放进新的插件包,再重启。否则可能无效。估计是Eclipse会将插件在别的地方进行缓存,每次启动的时候只是在plugins文件夹里检索各个插件包与其缓存的插件包版本ID是否一致,若一致则直接使用它之前缓存的那个版本。)

Windows下配置Hadoop <wbr>Eclipse开发环境详解

三、测试第一个Map/Reduce程序

Eclipse里新建一个Map/Reduce工程,FileNewOtherMap/Reduce Project

然后,右键单击工程名,导入hadoop文件夹下的WordCount范例。D:hadoop-1.0.4srcexamplesorgapachehadoopexamplesWordCount.java,导入时选择复制到本地即可。

接下来,直接运行即可。此时,控制台会输出“Usage: wordcount ”,这就说明程序已经编译成功了。下面右键单击工程名,选择Export,将其导出成jar包。一路Next之后,在最后一个对话框里,选择Main classFinish

Windows下配置Hadoop <wbr>Eclipse开发环境详解

现在,在你刚才选择的jar包生成路径处就可以看到已经生成的jar包。打开FlashFXP,将jar包复制到Hadoop的根目录下;再在SecureCRT中进入到根目录中,执行下述命令:

hadoop jar wordcount.jar user ootinput est.txt user ootoutput

回车后,WordCount程序就开始运行了。注意,只有当Hadoop集群工作正常的时候,程序才能得到正确的结果,否则可能出现始终停在某处没有任何反应的现象。

如果一切正常,在user ootoutput文件夹中会有part-r-00000文件,这里面就是对test.txt文件内的单词进行的统计结果。

Windows下配置Hadoop <wbr>Eclipse开发环境详解

四、直接使用Eclipse运行WordCount

按照上述步骤,已经可以正常编译Map/Reduce程序了,但是,它的运行较为繁琐,无法实现在Eclipse里直接运行。因为每次直接运行的时候,总是弹出如下异常:

13/03/11 13:38:10 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable

13/03/11 13:38:10 ERROR security.UserGroupInformation: PriviledgedActionException as:Administrator cause:java.io.IOException: Failed to set permissions of path: mphadoop-AdministratormapredstagingAdministrator948434723.staging to 0700

Exception in thread "main" java.io.IOException: Failed to set permissions of path: mphadoop-AdministratormapredstagingAdministrator948434723.staging to 0700

从网上得知,这一异常的产生是由于Hadoop库与Windows的兼容问题(或者说文件权限问题)。如果想修改,则需要对

%HADOOP_HOME%srccoreorgapachehadoopfsFileUtil.java

文件做下述修改:

Windows下配置Hadoop <wbr>Eclipse开发环境详解

之后,cmd进入到HADOOP_HOME目录中,运行ant命令重新编译Hadoop库。(这里网上有详细的教程,只需要搜索异常的名字即可。)但是,按照网上的编译步骤,我始终没有编译成功。经过漫长的下载等待之后,出现了Cannot run program “autoreconf”(in directory “D:hadoop-1.0.4src ative”): CreateProcess error=2, ???。大意应该就是没有找到autoreconf这个程序,究其原因可能还是和Cygwin没有安装好有关。如果是在Unix系统下,应该是可以正常编译的(即使也出现类似问题,网上也提供了解决方案)。看来编译整个Hadoop库是不可能了,那么就只编译这个文件好了。

现在,在Eclipse里新建一个Map/Reduce的工程,目的是能包含编译所需的包。如刚才导入WordCount.java那样,把FileUtil.java导入后编译出两个class文件,然后直接把它们拖进hadoop-core-1.0.4.jar的相应位置,替换原先的那两个类。记得,还要把修改好hadoop-core-1.0.4.jar复制一个,重命名为hadoop-core.jar,把它添加到EclipsepluginsHadoop插件包的lib里。

接下来,就是见证奇迹的时刻!

重启Eclipse,用SecureCRT启动守护进程,设置好wordcount的运行参数,Run on Hadoop

Windows下配置Hadoop <wbr>Eclipse开发环境详解

如果一切正常,控制台会输出一长串信息:

13/03/11 15:20:20 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable

13/03/11 15:20:20 WARN mapred.JobClient: No job jar file set.  User classes may not be found. See JobConf(Class) or JobConf#setJar(String).

13/03/11 15:20:20 INFO input.FileInputFormat: Total input paths to process : 1

13/03/11 15:20:20 WARN snappy.LoadSnappy: Snappy native library not loaded

13/03/11 15:20:20 INFO mapred.JobClient: Running job: job_local_0001

13/03/11 15:20:20 INFO mapred.Task:  Using ResourceCalculatorPlugin : null

13/03/11 15:20:20 INFO mapred.MapTask: io.sort.mb = 100

13/03/11 15:20:20 INFO mapred.MapTask: data buffer = 79691776/99614720

13/03/11 15:20:20 INFO mapred.MapTask: record buffer = 262144/327680

13/03/11 15:20:20 INFO mapred.MapTask: Starting flush of map output

13/03/11 15:20:20 INFO mapred.MapTask: Finished spill 0

13/03/11 15:20:20 INFO mapred.Task: Task:attempt_local_0001_m_000000_0 is done. And is in the process of commiting

13/03/11 15:20:21 INFO mapred.JobClient:  map 0% reduce 0%

13/03/11 15:20:23 INFO mapred.LocalJobRunner:

13/03/11 15:20:23 INFO mapred.Task: Task 'attempt_local_0001_m_000000_0' done.

13/03/11 15:20:23 INFO mapred.Task:  Using ResourceCalculatorPlugin : null

13/03/11 15:20:23 INFO mapred.LocalJobRunner:

13/03/11 15:20:23 INFO mapred.Merger: Merging 1 sorted segments

13/03/11 15:20:23 INFO mapred.Merger: Down to the last merge-pass, with 1 segments left of total size: 38 bytes

13/03/11 15:20:23 INFO mapred.LocalJobRunner:

13/03/11 15:20:23 INFO mapred.Task: Task:attempt_local_0001_r_000000_0 is done. And is in the process of commiting

13/03/11 15:20:23 INFO mapred.LocalJobRunner:

13/03/11 15:20:23 INFO mapred.Task: Task attempt_local_0001_r_000000_0 is allowed to commit now

13/03/11 15:20:23 INFO output.FileOutputCommitter: Saved output of task 'attempt_local_0001_r_000000_0' to hdfs://10.110.1.31:9000/user/root/output/log1

13/03/11 15:20:24 INFO mapred.JobClient:  map 100% reduce 0%

13/03/11 15:20:26 INFO mapred.LocalJobRunner: reduce > reduce

13/03/11 15:20:26 INFO mapred.Task: Task 'attempt_local_0001_r_000000_0' done.

13/03/11 15:20:27 INFO mapred.JobClient:  map 100% reduce 100%

13/03/11 15:20:27 INFO mapred.JobClient: Job complete: job_local_0001

13/03/11 15:20:27 INFO mapred.JobClient: Counters: 19

13/03/11 15:20:27 INFO mapred.JobClient:   File Output Format Counters

13/03/11 15:20:27 INFO mapred.JobClient:     Bytes Written=27

13/03/11 15:20:27 INFO mapred.JobClient:   FileSystemCounters

13/03/11 15:20:27 INFO mapred.JobClient:     FILE_BYTES_READ=374

13/03/11 15:20:27 INFO mapred.JobClient:     HDFS_BYTES_READ=736

13/03/11 15:20:27 INFO mapred.JobClient:     FILE_BYTES_WRITTEN=82230

13/03/11 15:20:27 INFO mapred.JobClient:     HDFS_BYTES_WRITTEN=27

13/03/11 15:20:27 INFO mapred.JobClient:   File Input Format Counters

13/03/11 15:20:27 INFO mapred.JobClient:     Bytes Read=368

13/03/11 15:20:27 INFO mapred.JobClient:   Map-Reduce Framework

13/03/11 15:20:27 INFO mapred.JobClient:     Reduce input groups=3

13/03/11 15:20:27 INFO mapred.JobClient:     Map output materialized bytes=42

13/03/11 15:20:27 INFO mapred.JobClient:     Combine output records=3

13/03/11 15:20:27 INFO mapred.JobClient:     Map input records=28

13/03/11 15:20:27 INFO mapred.JobClient:     Reduce shuffle bytes=0

13/03/11 15:20:27 INFO mapred.JobClient:     Reduce output records=3

13/03/11 15:20:27 INFO mapred.JobClient:     Spilled Records=6

13/03/11 15:20:27 INFO mapred.JobClient:     Map output bytes=564

13/03/11 15:20:27 INFO mapred.JobClient:     Total committed heap usage (bytes)=321527808

13/03/11 15:20:27 INFO mapred.JobClient:     Combine input records=56

13/03/11 15:20:27 INFO mapred.JobClient:     Map output records=56

13/03/11 15:20:27 INFO mapred.JobClient:     SPLIT_RAW_BYTES=114

13/03/11 15:20:27 INFO mapred.JobClient:     Reduce input records=3

这就说明运行成功了,右键刷新Project Explorer里的Hadoop文件夹就可以看到输出的文件了。

Windows下配置Hadoop <wbr>Eclipse开发环境详解

当然,有些事情并不是一帆风顺的。我就遇到了“当前namenode正处于safe mode”异常。这时,可以用SecureCRT关闭安全模式:hadoop dfsadmin –safemode leave

好吧,整个过程就是这个样子,前前后后反复研究了两个星期的时间,总算弄好了,截个屏留个纪念吧。^_^

Windows下配置Hadoop <wbr>Eclipse开发环境详解

最后,总结一下可以得出一个结论:Windows下开发与Java有关的程序,纯属没事儿找事儿。

<!-- 正文结束 -->

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/7213912/viewspace-1119527/,如需转载,请注明出处,否则将追究法律责任。

上一篇: 没有了~
下一篇: 没有了~
请登录后发表评论 登录
全部评论