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源文件

流程:

  1. 编译准备
  2. hadoop-eclipse-plugin源文件分析
  3. 编译文件修改
  4. 根据java错误日志进行修改
  5. 最后的失败

编译准备

  1. 先准备Hadoop环境,安装VMware、CentOS虚拟机、jdk、Hadoop、ant组件、eclipse,可以百度或看我之前的笔记。

  2. 在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版本。


比较有价值的参考:

hadoop插件的正常使用

2x版本的插件

不知道是谁做的3x版本插件,比起2x依赖项优点少

解决问题的案例,同时给了知乎大佬的链接

知乎大佬通过java日志排查问题

怎么看Java错误日志

解决hadoop 集群启动常见错误办法

https://blog.csdn.net/forking2009/article/details/77250533

基于idea的hadoop插件-HadoopIntellijPlugin

hadoop异常

Hadoop集群参数和常用端口

ERROR org.apache.hadoop.security.UserGroupInformation

hadoop 常见错误及解决办法.doc

Could not initialize class org.apache.hadoop.conf.Configuration

posted @ 2020-12-14 21:28  醉笑天苍  阅读(138)  评论(0)    收藏  举报