小坨的使用Eclipse连接Hadoop集群的实践笔记

本笔记记录如何使Linux上的Eclipse能连接到Hadoop集群,这个配置是让我们开发hdfs和MapReduce程序更方便一点。当然你省略这一步不厌其烦地每次选择用 命令行编译打包运行自己的MapReduce程序也没关系,但是这样每一次开发MapReduce程序都很麻烦。麻烦一次方便多次还是十分划算的。

下面我们就搞起

请确保Linux上已搭建好Hadoop集群(这是废话)

搭建Hadoop集群请参考:小坨的CentOS6.4搭建hadoop集群的实践笔记

请确保Linux上已经装好Eclipse(这也是废话)

在 CentOS 中安装 Eclipse,需要下载安装程序,我们选择 Eclipse IDE for Java Developers 版:

下载后执行解压命令,将 Eclipse 安装至 /usr/lib 目录中:

sudo tar -zxf ~/Downloads/eclipse-java-mars-1-linux-gtk*.tar.gz -C /usr/lib

解压后即可使用。

也可以进一步地在 CentOS 中为程序创建桌面快捷方式,如下图所示,点击桌面右键,选择Create Launcher,填写名称和程序位置(/usr/lib/eclipse/eclipse)

在这里插入图片描述

下载 Hadoop-Eclipse-Plugin

要在 Eclipse 上编译和运行 MapReduce 程序,需要安装 hadoop-eclipse-plugin,官方下载地址是:https://github.com/winghc/hadoop2x-eclipse-plugin

然后现在有个问题

  • 下载该插件是从github上下载的,github的网速慢到一匹是众所周知的,下起来十几KB/s差不多,建议立马转用码云下载,一两分钟就好了。具体操作请见:解决从GitHub下载文件慢的问题
  • 或者更省事的是到我的码云仓库上下载,我已经把它拉过来了:[阿坨][hadoop2x-eclipse-plugin]。但是上面介绍的方法能解决大多数从GitHub下载文件过慢的问题。

下载下来了就解压,注意下载下来的压缩包是zip格式的,使用压缩命令解压

unzip atuo-200-hadoop2x-eclipse-plugin-master.zip 

下载下来的文件提供了hadoop-eclipse-kepler-plugin-2.6.0.jar (还提供了 2.2.0 和 2.4.1 版本的),release目录下找。插件的版本要和hadoop的版本对应起来,如果自己想要的版本在其中找不到,那么就需要自己编译了。我自己的hadoop版本是2.7.7的,感jio到有点悲伤,但学习阶段,一步一个jio印。如果自己的Hadoop版本是2.6.0、2.2.0、2.4.1,那么可以跳过下面的安装ant和编译Hadoop-Eclipse-Plugin这两步。

安装ant

在编译之前我们还缺个ant。

安装地址:http://ant.apache.org/bindownload.cgi

可以选择安装apache-ant-1.9.14-bin.tar.gz

安装下来解压

tar -zxvf apache-ant-1.9.14-bin.tar.gz -C 指定的解压目录

配置环境变量

vim ~/.bashrc

export ANT_HOME=/home/hadoop/Downloads/apache-ant-1.9.14
export PATH=$JAVA_HOME/bin:$ANT_HOME/bin:$PATH

source ~/.bashrc 一下使环境变量生效

输入ant -version看看环境变量有没有配置成功。

在这里插入图片描述

编译Hadoop-Eclipse-Plugin

接下来编译

官方文档已经很简洁告诉我们怎么编译了:https://github.com/winghc/hadoop2x-eclipse-plugin(敲黑板!看文档)

在这里插入图片描述

跟着官方文档开始撸命令(请进入hadoop2x-eclipse-plugin\src\contrib\eclipse-plugin目录下撸命令)

ant jar -Dversion=2.7.7 -Dhadoop.version=2.7.7 -Declipse.home=/home/hadoop/program/eclipse -Dhadoop.home=/usr/local/hadoop

2.7.7是我要编译的Hadoop-Eclipse-Plugin版本号和hadoop版本号,/home/hadoop/program/eclipse是我的Eclipse安装目录,/usr/local/hadoop是我的hadoop安装目录。

跑这行命令时发现命令行在ivy-resolve-common处卡了。

原因是找不到几个依赖包,那几个依赖包可能是换路径了,但是不需要这几个依赖包也不影响编译,那我们到相关的配置项中去掉这几个依赖。

解决方案

修改Hadoop-Eclipse-Plugin/src/contrib/eclipse-plugin/build.xml

找到:

<target name="compile" depends="init, ivy-retrieve-common" unless="skip.contrib">

去掉depends修改为

<target name="compile" unless="skip.contrib">

再次执行上面的编译命令,会提示copy不到相关jar包的错误,

解决方案

修改Hadoop-Eclipse-Plugin(自个的Hadoop-Eclipse-Plugin解压目录)/ivy/libraries.properties文件,将报错的jar包版本号跟换成与hadoop-2.7.7(自个的Hadoop安装目录)/share/hadoop/common/lib下面jar对应的版本号。

此步可能会有多个jar包版本不匹配,需要多次修改。

编译成功生成的hadoop-eclipse-plugin-2.7.7.jar在Hadoop-Eclipse-Plugin/build/contrib/eclipse-plugin路径下

在这里插入图片描述

安装Hadoop-Eclipse-Plugin

把编译好的hadoop-eclipse-plugin-2.7.7.jar复制到 Eclipse 安装目录的dropins文件夹中(具体放在还是 plugins要依赖于Eclipse的版本,要是不放心可以两个目录都放一遍)。

进入到Eclipse的安装目录,启动Eclipse

./eclipse -clean		#没配置Eclipse环境变量的,请不要省略./

调出Project Explorer视图:window->show view->Project Explorer。

可以看到Project Explorer的试图中有DFS Locations的图标,证明Hadoop-Eclipse-Plugin插件已经安装上了。

在这里插入图片描述

配置Hadoop-Eclipse-Plugin

在配置之前请先开启Hadoop集群。

start-all.sh

Hadoop-Eclipse-Plugin插件需要进一步的配置。

第一步:选择 Window 菜单下的 Preference

此时会弹出一个窗体,窗体的左侧会多出 Hadoop Map/Reduce 选项,点击此选项,选择 Hadoop 的安装目录,然后点击OK关闭窗体。

在这里插入图片描述

第二步:切换 Map/Reduce 开发视图, Window -> Open Perspective -> Other),弹出一个窗体,从中选择 Map/Reduce 选项并点击OK。
在这里插入图片描述

第三步:建立与 Hadoop 集群的连接,点击 Eclipse软件右下角的 Map/Reduce Locations 面板,在面板中单击右键,选择 New Hadoop Location。
在这里插入图片描述
在弹出来的选项面板中,General 的设置要与 Hadoop 的配置一致。
在这里插入图片描述
Location name随便填写,因为做了主机名和IP的映射,所以Host地址我填的Master,50020是我集群上JobTracker端口,9000即我集群上的HDFS端口(fs.defaultFS 为 hdfs://localhost:9000)。

总之,我们只要配置 General 就行了,点击 finish,conn7就创建好了。

说点题外话

General 选项面板隔壁的Advanced parameters 选项面板是对 Hadoop 参数进行配置,实际上就是填写 Hadoop 的配置项(hadoop安装目录/etc/hadoop中的配置文件)

在Eclipse中连接Hadoop集群(前方有bug)

上一步配置好后,正常的话点击左侧 Project Explorer 中的 MapReduce Location (点击三角形展开)就能连上Hadoop集群,在左侧project Export直接查看 HDFS 中的文件列表了(HDFS 中要有文件),双击可以查看内容,右键点击可以上传、下载、删除 HDFS 中的文件,无需再通过繁琐的 hdfs dfs -ls 等命令进行操作了。

但在这里报出了一个bug

An internal error occurred during: “Connecting to DFS connect”.
org/apache/commons/io/Charsets

无法初始化类org/apache/commons/io/Charsets

我寻思着这是个找不到某文件的报错,我怀疑是编译的Hadoop-Eclipse-Plugin的jar包缺少文件。

我去搜了一圈博客,果8其然,我找到了报错原因:项目启动报错:java.lang.NoClassDefFoundError: org/apache/commons/io/Charsets

是个编译的Hadoop-Eclipse-Plugin插件缺少jar包以及两个jar包之间有类名冲突的问题。

于是我去Hadoop的安装目录下把缺少的commons-io-2.4.jar包加进插件的lib目录下,然后,需要去修改插件下META-INF目录下的MANIFEST.MF,将classpath添加以下内容:

lib/commons-io-2.4.jar

并且删除

lib/guava-11.0.2.jar

否则该插件不知道要初始化哪个org/apache/commons/io/Charsets。

debug思路参考:配置Eclipse的Hadoop插件时无法连接HDFS的解决办法

然后重新打开Eclipse,重新建立与Hadoop集群的连接,连接建立成功。

在这里插入图片描述

我们能直接在Eclipse中查看 HDFS 中的文件列表(HDFS 中要有文件),双击可以查看内容,右键点击可以上传、下载、删除 HDFS 中的文件,而无需再通过繁琐的 hdfs dfs -ls 等命令进行操作了。

注意:HDFS 中的内容变动后,Eclipse 不会同步刷新,需要右键点击 Project Explorer中的 MapReduce Location,选择 Refresh,才能看到变动后的文件。

只是一篇简单的实践小笔记,暂且先写到这里。

发布了22 篇原创文章 · 获赞 16 · 访问量 9474

猜你喜欢

转载自blog.csdn.net/atuo200/article/details/105449782