昨天在本机上搭建了伪分布式的hadoop,今天决定在eclipse中搭建hadoop的环境,毕竟磨刀不误砍柴工
安装的hadoop是2.7.5版本,要想使用eclipse写MapReduce需要一个 hadoop-eclipse-plugin-2.7.5.jar
在网上找了一波发现并没有可以下载下来直接使用的包,于是就到 https://github.com/winghc/hadoop2x-eclipse-plugin 下载源码,自己来编译
在编译此包前还需要 ant 可以在 http://ant.apache.org/ 下载
下载好两个文件后解压
ant:配置环境变量
Path中添加路径
然后就是浩大的改文件工程
hadoop2x-eclipse-plugin-mastersrccontribeclipse-pluginuild.xml
hadoop2x-eclipse-plugin-mastersrcivylibraries.properties
hadoop2x-eclipse-plugin-masterivylibraries.properties
修改上述内容并修改
上面需要修改的内容可以到 hadoop-2.7.5sharehadoopcommonlib 中查看
接下来进行编译,将在DOS中将文件夹切换到 hadoop2x-eclipse-plugin-mastersrccontribeclipse-plugin
执行
ant jar -Dversion=2.7.5 -Declipse.home=C:Userslichaoxingeclipsejava-oxygeneclipse -Dhadoop.home=D:hadoop-2.7.5
注: C:Userslichaoxingeclipsejava-oxygeneclipse 是eclipse的路径,D:hadoop-2.7.5 是hadoop的路径
然后回车后发现报了N多错误
其中一部分截图
问题在于指定的eclipse路径下的找不到这些包,原因是我在安装eclipse的时候下载的是.exe文件,在 eclipsejava-oxygeneclipseplugins 下没有这些包
于是我果断去下载了源码文件,果然在 eclipseplugins 含有好多包
我将里面的包全部复制到 eclipsejava-oxygeneclipseplugins 中,再此编译,成功了
后来我发现原来安装的eclipse文件夹下其实是有那些依赖包的,只不过不在上述文件夹下,而是在 eclipsejava-oxygeneclipsedropinsplugins 中
如果更改下build.xml文件的内容,使路径为这个应该也可以解决问题,这里由于急于搭建好开发环境没有进行实验
由于强迫症,我把之前的eclipse删掉了,使用了新下载的源码包(eclipse4.8)
将 hadoop-eclipse-plugin-2.7.5.jar 拷贝到 eclipse 的 plugins 文件夹下
启动eclipse,终于见到了久违的 Hadoop 了,配置一下Hadoop的安装路径
在面板的下面 Map/Reduce Locations 中右键新建一个连接
点击右下角finish后成功创建连接,但是点击连接名前面的尖号就会报 空指针异常
找了大量资料,没能解决此问题,在一个博客里看到如果配置正确,可以忽略此问题 (https://blog.csdn.net/psp0001060/article/details/54728436)
于是尝试测试一下,准备好用于wordcount的file1,里面写了一点内容,上传到hdfs的input文件夹内,并指定输出在output/wordcount/
在代码区右键run as 选择hadoop
运行后报log4j的相关错误
解决办法:
- 在mian中添加一行代码
BasicConfigurator.configure();
再次运行,成功执行
- 工程文件夹下新建一个Source Folder,命名为source
右键source新建,Other,选择General下的File并命名为 log4j.properties
在文件中添加
log4j.rootLogger=INFO, stdout log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.layout=org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - %m%n log4j.appender.logfile=org.apache.log4j.FileAppender log4j.appender.logfile.File=target/spring.log log4j.appender.logfile.layout=org.apache.log4j.PatternLayout log4j.appender.logfile.layout.ConversionPattern=%d %p [%c] - %m%n
运行代码,成功解决问题