使用Eclipse编译运行MapReduce程序_Hadoop2.6.0_Ubuntu/CentOS

大数据技术原理与应用


点击这里观看厦门大学林子雨老师主讲《大数据技术原理与应用》授课视频
本教程介绍的是如何在 Ubuntu/CentOS 中使用 Eclipse 来开发 MapReduce 程序,在 Hadoop 2.6.0 下验证通过。虽然我们可以使用命令行编译打包运行自己的MapReduce程序,但毕竟编写代码不方便。使用 Eclipse,我们可以直接对 HDFS 中的文件进行操作,可以直接运行代码,省去许多繁琐的命令。

环境

本教程在 Hadoop 2.6.0 下验证通过,适用于 Ubuntu/CentOS 系统,理论上可用于任何原生 Hadoop 2 版本,如 Hadoop 2.4.1,Hadoop 2.7.1。

本教程主要测试环境:

  • Ubuntu 14.04
  • Hadoop 2.6.0(伪分布式)
  • Eclipse 3.8

此外,本教材在 CentOS 6.4 系统中也验证通过,对 Ubuntu 与 CentOS 的不同配置之处有作出了注明。

安装 Eclipse

在 Ubuntu 和 CentOS 中安装 Eclipse 的方式有所不同,但之后的配置和使用是一样的。

在 Ubuntu 中安装 Eclipse,可从 Ubuntu 的软件中心直接搜索安装,在桌面左侧任务栏,点击“Ubuntu软件中心”。

Ubuntu软件中心Ubuntu软件中心

在右上角搜索栏中搜索 eclipse,在搜索结果中单击 eclipse,并点击安装。

安装Eclipse安装Eclipse

等待安装完成即可,Eclipse 的默认安装目录为:/usr/lib/eclipse。

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

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

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

解压后即可使用。在 CentOS 中可以为程序创建桌面快捷方式,如下图所示,点击桌面右键,选择创建启动器,填写名称和程序位置(/usr/lib/eclipse/eclipse):

安装Eclipse安装Eclipse

安装 Hadoop-Eclipse-Plugin

要在 Eclipse 上编译和运行 MapReduce 程序,需要安装 hadoop-eclipse-plugin,可下载 Github 上的 hadoop2x-eclipse-plugin(备用下载地址:http://pan.baidu.com/s/1i4ikIoP)。

下载后,将 release 中的 hadoop-eclipse-kepler-plugin-2.6.0.jar (还提供了 2.2.0 和 2.4.1 版本)复制到 Eclipse 安装目录的 plugins 文件夹中,运行 eclipse -clean 重启 Eclipse 即可(添加插件后只需要运行一次该命令,以后按照正常方式启动就行了)。

unzip -qo ~/下载/hadoop2x-eclipse-plugin-master.zip -d ~/下载    # 解压到 ~/下载 中
sudo cp ~/下载/hadoop2x-eclipse-plugin-master/release/hadoop-eclipse-plugin-2.6.0.jar /usr/lib/eclipse/plugins/    # 复制到 eclipse 安装目录的 plugins 目录下
/usr/lib/eclipse/eclipse -clean    # 添加插件后需要用这种方式使插件生效

配置 Hadoop-Eclipse-Plugin

在继续配置前请确保已经开启了 Hadoop。

启动 Eclipse 后就可以在左侧的Project Explorer中看到 DFS Locations(若看到的是 welcome 界面,点击左上角的 x 关闭就可以看到了。CentOS 需要切换 Perspective 后才能看到,即接下来配置步骤的第二步)。

安装好Hadoop-Eclipse-Plugin插件后的效果安装好Hadoop-Eclipse-Plugin插件后的效果

插件需要进一步的配置。

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

打开Preference打开Preference

此时会弹出一个窗体,窗体的左侧会多出 Hadoop Map/Reduce 选项,点击此选项,选择 Hadoop 的安装目录(如/usr/local/hadoop,Ubuntu不好选择目录,直接输入就行)。

选择 Hadoop 的安装目录选择 Hadoop 的安装目录

第二步:切换 Map/Reduce 开发视图,选择 Window 菜单下选择 Open Perspective -> Other(CentOS 是 Window -> Perspective -> Open Perspective -> Other),弹出一个窗体,从中选择 Map/Reduce 选项即可进行切换。

切换 Map/Reduce 开发视图切换 Map/Reduce 开发视图

第三步:建立与 Hadoop 集群的连接,点击 Eclipse软件右下角的 Map/Reduce Locations 面板,在面板中单击右键,选择 New Hadoop Location。

建立与 Hadoop 集群的连接建立与 Hadoop 集群的连接

在弹出来的 General 选项面板中,General 的设置要与 Hadoop 的配置一致。一般两个 Host 值是一样的,如果是伪分布式,填写 localhost 即可,另外我使用的Hadoop伪分布式配置,设置 fs.defaultFS 为 hdfs://localhost:9000,则 DFS Master 的 Port 要改为 9000。Map/Reduce(V2) Master 的 Port 用默认的即可,Location Name 随意填写。

最后的设置如下图所示:

Hadoop Location 的设置Hadoop Location 的设置

Advanced parameters 选项面板是对 Hadoop 参数进行配置,实际上就是填写 Hadoop 的配置项(/usr/local/hadoop/etc/hadoop中的配置文件),如我配置了 hadoop.tmp.dir ,就要进行相应的修改。但修改起来会比较繁琐,我们可以通过复制配置文件的方式解决(下面会说到)。

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

在 Eclipse 中操作 HDFS 中的文件

配置好后,点击左侧 Project Explorer 中的 MapReduce Location (点击三角形展开)就能直接查看 HDFS 中的文件列表了(HDFS 中要有文件,如下图是 WordCount 的输出结果),双击可以查看内容,右键点击可以上传、下载、删除 HDFS 中的文件,无需再通过繁琐的 hdfs dfs -ls 等命令进行操作了。
以下output/part-r-00000文件记录了输出结果。点击查看HDFS文件系统数据的三种方法可进行扩展学习。

使用Eclipse查看HDFS中的文件内容使用Eclipse查看HDFS中的文件内容

如果无法查看,可右键点击 Location 尝试 Reconnect 或重启 Eclipse。

Tips

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

在 Eclipse 中创建 MapReduce 项目

点击 File 菜单,选择 New -> Project…:

创建Project创建Project

选择 Map/Reduce Project,点击 Next。

创建MapReduce项目创建MapReduce项目

填写 Project name 为 WordCount 即可,点击 Finish 就创建好了项目。

填写项目名填写项目名

此时在左侧的 Project Explorer 就能看到刚才建立的项目了。

项目创建完成项目创建完成

接着右键点击刚创建的 WordCount 项目,选择 New -> Class

新建Class新建Class

lipse-lbuild左侧ads/-projecxmu-calt="到刚扽g-ec建Cl14/ads 置

9exak res;扽g后Cl14/ads -> Class

此时ild信息name 为 WordCou>点ild 安-eclipg-才建New log2> Class<.-C / -calipse 中将结漌双击可以命令的 plugi该lipse > <">unzip -qo ~/下载/hadoo-C /">/a>

9exak res; imdth, -C /.io.IOExce/p> <; imdth, -C /.util.I ator; imdth, -C /.util.StrTokenizer; imdth, 置

9-buf.Cbufigurap> <; imdth, 置

9fs.Path; imdth, 置

9io.IntWritable; imdth, 置

9io.T/db; imdth, 置

9ntry-head.Job; imdth, 置

9ntry-head.填per; imdth, 置

9ntry-head.写 Prr; imdth, 置

9ntry-head.lib.rch-s.ojecIch-sFail h; imdth, 置

9ntry-head.lib.记.ojecO记Fail h; imdth, 置

9util.ishicO/p> <{ 这Cbufigurap> <'dnsf = nttpCbufigurap> <(); 这Str[] Hance(dnsf, "w双 c"); 这job.setJarByild(-> Class<./had); 这job.set填perild(-> Class<.Tokenizer填per./had); 这job.setCombass=ild(-> Class<.IntSum写 Prr./had); 这job.set写 Prrild(-> Class<.IntSum写 Prr./had); 这job.setO记Keyild(T/db./had); 这job.setO记Viv> ild(IntWritable./had); 这for(t i =0; i < <(true)?0:1); 这} 这st-thcuery.m /hadIntSum写 Prr /dbends 写 Prr<T/db, IntWritable, T/db, IntWritable> { 这prvate IntWritable 31 s= nttpIntWritable(); 这st-thcIntSum写 Prr(){ 这} 这st-thcvoid y-head(T/db key, I able<IntWritable> div> s, 写 Prr<T/db, IntWritable, T/db, IntWritable>.Cbunput'dns-pxt) throws IOExce/p> <, InterruptedExce/p> <{ 这t sum =0; 这IntWritable div; 这for(I ator i$ =div> s.i ator(); i$n> , 填per<Ob, T/db, T/db, IntWritable>.Cbunput'dns-pxt) throws IOExce/p> <, InterruptedExce/p> <{ 这StrTokenizer itr = nttpStrTokenizer(div> .toStr()); 这whjec(itrn> <就是arame问题/dblabpse-的配置文件),如我2> Class

mg src=log2lipse -cltu~/wkme ce/-> Classsudo tar -zxf ~/下载/eclipsecp-的配置文件),如我/dnre-d="ploalE~/wkme ce/-> Class<致clipseode> 就是填写项目名

致clipseode> 就是击刚创建的 者也进行操䜨se,我p>sudo tar -zxf ~/下载/e-C /">//Str[] 项目创建完成9群的连-> Class<2安/dblab填写项目名</span></p>
<p>-> Class<2安/dblab击刚创建的至4 是丠要切/uce 程序,圬可出杛装 hadoop-证鸍伸步操作 HDFS 中的文件</h2>
安装 hadoop-eclipse/遇击左嗮题 中安装 E/uce 程序,妁安装 hadoop-eclipse体是我取><strong>在继续配New 是对 Hadoop 参tput击此ode> 就是写 localh了未杛舑们改为e 随意塰是lu(/usrb攈非3.8</li>
</u就是写 4 clipseode> 体/us取中地:切而付通过。</p>
<(的/db Ich-s 路徆注歘 Eunzip -qo ~/下>Exce/p>

9ntry-head.lib.rch-s.IndividIch-sExce/p> <: Ich-s u.ed doesnot /dist: in.j:/博如我/wkme ce/-> Class

mgsrc=log2。

<来覆盖-ch是lab让clipseo够i确安lab.xmu.edu/ha4j 本

mg clipse/p建