Windows环境下Hadoop开发环境配置
一、事先准备
1)Hadoop集环境搭建
已经用三台虚拟机(操作系统为ubuntu 10.0.4)搭建完成一个hadoop分布式集,分别是hadoop1: 192.168.201.104,hadoop2: 192.168.201.54和hadoop3: 192.168.201.100 ,其中hadoop1为namenode,其余为datanode。
2)windows安装JDK和eclipse
过程从略,需要注意应安装与hadoop集所用JDK兼容的版本。本例中,hadoop集安装的是64位的JDK-8.0.20,因此Windows下选择64位的JDK-8.0.65,eclipse版本为支持64位的Kepler Service Release 2。
3)hadoop安装包解压
将搭建hadoop集的安装包拷贝并解压到windows开发机器的某个目录下,本例中的安装包为
hadoop-2.6.,解压到D:\hadoop-2.6.1目录。
4)hadoop for eclipse插件包下载
下载hadoop for eclipse插件。由于本例中hadoop集为hadoop2,插件也必须是2.x版本。本例中插件包为:hadoop-eclipse-plugin-2.2.0。
二、配置eclipse
1)拷贝插件包
将插件包拷贝至eclipse安装目录的plugin目录下,然后重启eclipse。
2)配置hadoop安装路径
打开"Window"--"Prefrences",此时左侧会出现"Hadoop Map/Reduce"选项,将其配置为hadoop安装包解压后的目录。
3)配置Map/Reduce Locations
打开"Window"--"Perspectives"--"Open Perspective"--"Other ...",在弹出窗口中选择"Map/Reduce",点击"OK"。
此时在下部中间的框内会有个"Map/Reduce Locations"的图标,点击上部右侧的小象图标,进入Map/Reduce Locations配置窗口:
其中的Location name可以填写任意名称,而Map/Reduce(V2) Master的Host、Port与hadoop集的l配置文件中的acker一致,而DFS Master的Host、Port与hadoop集的l配置文件中的fs.defaultFS(或fs.default.name)一致。
点击"Finish"按钮,关闭窗口。此时如果左侧"Project Explorer"框中的"DFS Locations"下出现刚才填写的Location name且其下没有出现"Error ...",表示配置成功。
三、工程配置
1)设置环境变量
在windows桌面,右键击"我的电脑",再依次"属性"--"高级系统设置"--"环境变量",增加新的环境变量HADOOP-HOME,其值与步骤2.2一致。设置完成后,重启eclipse。
如果忽略此步骤,将来会报“Failed to detect a valid hadoop home directory”错误。
2)拷贝和hadoop.dll
在网上下载和hadoop.dll,将前者拷贝到hadoop安装目录的bin子目录,将后者拷贝至C:\Windows\System32目录下。注意32位和64位的区别。
如果忽略,将来会报“Could not locate executable null\ in the Hadoop binaries”的错误;忽略hadoop.dll,将来会报“java.lang.UnsatisfiedLinkError: org. apache.hadoop.io.nativeio.NativeIO$Windows.access0……”的错误。
3)新建Hadoop工程
打开"File"--"New"--"Project",选择"Map/Reduce Project",输入工程名。如果是第一次新建"Map/Reduce Project",需要点击"Use Default Hadoop"--"Configure Hadoop Install directory"(与步骤2.2一致)或 干脆"Specify Hadoop library location"。
然后一步步"Next",直至 "Finish"。
4)导入 lib包
一般情况下不需要手工执行,创建工程后各jar包已自动加至build path。如果需要手工添加,相应jar包有:
D:/hadoop-2.6.1/share/hadoop/common下所有jar包,及里面的lib目录下所有jar包,
D:/hadoop-2.6.1/share/hadoop/hdfs下所有jar包,及里面lib下的jar包,
D:/hadoop-2.6.1/share/hadoop/mapreduce下所有jar包,及里面lib下的jar包,
D:/hadoop-2.6.1/share/hadoop/yarn下所有jar包,及里面lib下的jar包。
5)生成log4j.properties文件
在工程的src目录下创建一个log4j.properties文件,可以直接从其它工程里或系统包(如Hibernate)里拷贝,否则可能将来无法显示日志信息。
如果电脑上安装了多个JDK(包括Websphere、Oracle等软件自带的JDK),需指定项目的编译环境,否则将来可能会报“java.lang.UnsupportedClassVersionError: JVMCFRE003 bad major version; class=map/CareMonths, offset=6”的类似错误。方法是:在设置项目的Build Path时,指定步骤1.2中的JDK。
6)修改集配置文件的dfs.permission配置项
此步骤需要在hadoop集上操作。修改l配置文件,在其中增加或修改配置项dfs.permission:
<property>
<name>dfs.permission</name>hadoop分布式集搭建
<value>false</value>
</property>
必须注意:此步骤尽量限制在开发测试环境中进行,在正式的生产环境中如此设置会带来严重安全问题。
7)在eclipse中运行
右键点击项目,选择"Run AS ..."--"Run on Hadoop",从搜索到的列表中到自己编写的应用程序,再点击Ok。
正常情况下,自此工程应该可以提交到hadoop集去执行,但实际上也可能不成功。此时的一个变通方法是修改hadoop的源代码。下载Hadoop 2.6.1的源码包并解压到本地,将其中的hadoop-common-project\hadoop-common\src\main\java\org\apache\hadoop\io\ nativeio\nativeIO.java复制到工程中(包名为org.apache.hadoop.io.nativeio),修改其中的Windows.access方法,将原来557行的代码注释掉,改为return true。
如忽略此步骤,会报告“ava.lang.UnsatisfiedLinkError: org.apache.hadoop.io.nativeio. NativeIO$Windows.access0……”的错误(同步骤3.2中缺少hadoop.dll的情形一样)。
四、在集中执行
上述步骤可以实现将一个作业提交到hadoop集执行,但一般只能用小规模数据进行测试,用于查作业执行过程中暴露出的问题。但最终作业还是应以jar包形式在hadoop集执行,有两种方式:
1)方式一
用eclipse导出jar包,上传到hadoop集平台后执行:
hadoop jar XXX.jar YYY
其中的第三个参数为上传的jar包名称,而第四个参数为带有main方法的class名,通常XXX与YYY相同。
调试时,java文件可能经常修改,此方式会显得很费时。但在生产环境中,此方式是最适用的。
2)方式二
将java文件上传到hadoop集,先进行编译(事先创建classes子目录):
javac -classpath $HADOOP_HOME/share/hadoop/common/hadoop-common-2.6.1.jar: $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-client-core-2.6.1.jar: $HADOOP_HOME /share/hadoop/common/lib/commons-cli-1.2.jar -d ./classes XXX.java
然后将所有class文件组装成jar包:
$JAVA_HOME/bin/jar -cvf XXX.jar -C ./classes/ .
最后是执行,与方式一相同:
hadoop jar XXX.jar YYY
此方式在调试时相对更适用。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论