Hadoop3.2.1的eclipse插件编译尝试
Hadoop3.2.1的eclipse插件编译尝试(失败)
内容
环境及软件:
-
VMware workstation pro 15
-
CentOS 8
-
jdk1.8_202
-
Eclipse-Oxygen
-
Hadoop-3.2.1
-
ant组件
-
hadoop-eclipse-plugin源文件
流程:
- 编译准备
- hadoop-eclipse-plugin源文件分析
- 编译文件修改
- 根据java错误日志进行修改
- 最后的失败
编译准备
-
先准备Hadoop环境,安装VMware、CentOS虚拟机、jdk、Hadoop、ant组件、eclipse,可以百度或看我之前的笔记。
-
在Github下载hadoop-eclipse-plugin源文件:
原2x版本:https://github.com/winghc/hadoop2x-eclipse-plugin
有人提交的3x版本:https://github.com/Woooosz/eclipse-hadoop3x
两个版本其实都一样(最后问题都卡在同一个地方),但是,所谓的3x版本需要的编译文件比2x版本还少,估计不靠谱。
hadoop-eclipse-plugin源文件分析
为了尽可能成功地编译插件,最好对源文件结构有所了解,在参考学习许多博文和对源文件测试、分析、大胆猜测后,大致得出以下结构(由于不会ivy和ant,可能有些地方不对):
-
首先,源文件的根目录有以下文件和文件夹:
-
release文件夹
里面存放的是已经编译好的jar包,距今已有至少6年的历史,适用于2.6及以下版本。
-
ivy.xml文件和ivy文件夹
用于项目依赖管理,有关ivy知识可以百度了解(因为我也不会),稍后我们需要修改ivy文件夹中的libraries.properties文件(用于存储要用的软件、依赖包的版本信息)以适应新版本Hadoop,xxx.properties都属于配置文件,用于存储配置信息。
-
src文件夹
插件的主要文件夹,功能实现和接口、构建文件等都在里面
-
-
进入src文件夹
- 首先我们能看到一个ivy.xml和ivy文件夹,我也不知道有啥用,删掉也对插件编译没有影响,和根目录下的ivy结构内容完全一样,可能是特殊设置?
- 另外是一个contrib文件夹
-
再进入src下的contrib文件夹
-
build.xml
根据里面的信息,推测是正常构建失败后,用于测试修复的文件。
-
build-contrib.xml
为build.xml构建流程存储的路径、文件等配置信息。
-
eclipse-plugin文件夹
顾名思义,是真正的插件文件夹
-
-
contrib文件夹
-
ivy.xml和ivy文件夹
使用的是根目录下ivy文件夹,根目录大概是一种全局设置,在这里可以设置版本信息,猜测是可以覆盖原来的版本信息(注释这样写的,没试过)。
-
build.xml和build.properties
主要的构建文件,会引用ivy和其他文件所存储的配置信息包括依赖包版本号、各种文件路径等,之后我们需要在这里编辑文件信息。
-
src文件夹
类似于我们在java项目中的src包,存储插件实现的各种java包、类,实现对eclipse和hadoop的接口、操作等功能,大致功能根据包类的命名可以搞清楚,不多细说。
-
resources文件夹
存储在插件在eclipse中要用到的图片、提示信息等,通过src中相应功能的类调用
-
makePlus.sh
存储了一个示例命令,么啥用。
-
plugin.xml
里面是构建编译src内插件操作、ui、接口构建需要的信息,感觉不需要更改。
-
编译文件修改
对于3x版本的Hadoop,依赖jar包的版本和数量发生了不少变化,而所使用的eclipse的版本也发生了变化,这是我认为插件无法使用的主要原因,为此,需要对插件源文件进行修改,在对很多博文学习参考大概有以下几点需要修改:
简略地讲,我们需要通过修改build.xml文件来达到成功构建的目的,为此我们不妨先通过执行编译命令来看看哪里会出错:
在contrib文件夹下:
ant jar -Dversion=Hadoop版本号 -Dhadoop.version=Hadoop版本号 -Declipse.home=eclipse根目录路径 -Dhadoop.home=Hadoop根目录路径
然后我们会发现:跑到一半停住不动了??会在这里停住:
ivy-resolve-common:
这是因为在build过程中会有对ivy的依赖项查询,由于我也不知道的原因,这里查不到,而且根据我对某个文件的分析,会停留很长时间。
但事实上,在plugin中并没有用到有关内容,所以我们可以直接删除了事:
打开build.xml文件,删除相关内容:
<target name="compile" depends="init, ivy-retrieve-common" unless="skip.contrib">
修改为:
<target name="compile" unless="skip.contrib">
这样,我们就可以继续build。
继续执行命令,将碰到第二个问题:xxx文件无法拷贝,因为找不到。
这是由于版本造成的问题,打开build.xml,在文件末尾我们可以看到copy了大量jar文件,细看path内容,我们会发现文件名称是引用变量,这些变量存储在根目录下ivy文件夹的libraries.properties文件中。
从上面可以知道,这个文件是用来存储版本配置信息的,我们需要更改里面的版本为我们的hadoop的版本,通过对build.xml文件的分析,我们需要根据 hadoop根目录/share/hadoop/common/lib下jar包的不同版本修改改/ivy/libraries.properties中的对应版本号
这里我推荐原2x版本Github下一个大佬提交的版本信息->Update libraries.properties,同时还有他提交的build.xml文件->Update build.xml,这是他为2.8版本做的,十分详尽,我们可以参考他进行修改,当然,新版本也会有其他的改动,适当删减,然后在build.xml内对于没有的jar包删除copy项,对于新增的jar包增加copy项,最终达到build完成的目的。
在修改完版本号后我们便可以再次编译,编译成功后,会在hadoop2x-eclipse-plugin-master/build/contrib路径下生成了jar包:hadoop-eclipse-plugin-x.x.x.jar,其他的文件不用理,只是把jar包里的文件列出来而已。
然后我们可以百度Hadoop-eclipse插件启动过程来启动插件
根据java错误日志进行修改
当然,还有内容,说明仍然无法使用,使用之前生成的jar包,会发现右键Add New Location无反应,到目前为止,我们无从得知到底是哪发生错误。
这里我们可以根据一个知乎大佬的方法进行排查:
链接:https://zhuanlan.zhihu.com/p/38630695
大致来说,就是根据java的错误日志分析引发错误的原因,并成功找到两个缺失的jar包:
woodstox-core-x.x.x.jar
stax2-api-x.x.x.jar
依旧是利用前面的方法进行添加。
最后的失败
然而的然而,最后还是不能用。
前面提到,插件能否使用,取决于以下3点:
- Hadoop版本
- Eclipse版本
- Hadoop配置信息
可能是因为Hadoop配置的原因,导致最后无法远程连接Hadoop,错误提示是无法实例化hadoop的用户组信息类,没找到相关依赖包或更有效信息。
无奈使用了2x版本。
比较有价值的参考:
https://blog.csdn.net/forking2009/article/details/77250533
基于idea的hadoop插件-HadoopIntellijPlugin
ERROR org.apache.hadoop.security.UserGroupInformation
Could not initialize class org.apache.hadoop.conf.Configuration

浙公网安备 33010602011771号