在eclipse下编译hadoop2.0源码

转载 2013年12月04日 21:34:05

Hadoop是一个分布式系统基础架构,由apache基金会维护并更新。官网地址: http://hadoop.apache.org/

Hadoop项目主要包括以下4个模块:

  • Hadoop Common: 为其他Hadoop模块提供基础设施。
  • Hadoop HDFS: 一个高高靠、高吞吐量的分布式文件系统。
  • Hadoop MapReduce: 一个分布式的计算框架,包括任务调度和集群资源管理。
  • Hadoop YARN: 一个新的MapReduce框架。有兴趣的同学请参考: http://www.ibm.com/developerworks/cn/opensource/os-cn-hadoop-yarn/

由于项目的需要,我只需要用到Hadoop中的前两个子模块,即Hadoop Common和Hadoop HDFS。

在编译源码之前,我先介绍一下我的开发环境:

  • Ubuntu 12.04 LTS
  • Eclipse 4.3
  • JDK1.6.0_45
  • Maven 3.0.4
  • SVN1.6.17
  • ProtocolBuffer(貌似Ubuntu自带了,如果没有,请自行下载安装)

最新的Hadoop采用maven作为项目构建工具,所以系统需要安装maven。下面正式开始Hadoop源码的编译之旅。

首先用svn签出Hadoop的最新版本(hadoop 2.*):

svn checkout http://svn.apache.org/repos/asf/hadoop/common/trunk/ hadoop-dev

打开hadoop-dev文件夹,目录结构如下图

这就是Hadoop的源代码目录,顺便统计了一下源代码行数,1231074(包含注释、空行)。本文主要关心两个子项目,分别是hadoop-common-project、hadoop-hdfs-project。

接下来就需要为导入Eclipse构建Hadoop项目,虽然我们只关心上面提到的两个子项目,但是为了防止后续出现依赖问题,在构建时请在项目根目录下执行命令:

cd ~/hadoop-dev
mvn install -DskipTests
mvn eclipse:eclipse -DdownloadSources=true -DdownloadJavadocs=true

在执行mvn(即maven)命令时,请保证网络连接正常,因为mvn可能会下载一些Jar包来解决依赖问题。这可能需要花一段时间,完成上面的命令后,导入eclipse的准备工作已经做好了。

在导入之前,我们还有一个工作,就是安装eclipse的maven插件。安装的方法这里不做介绍。

接下来的工作是导入Eclipse中进行编译,打开eclipse,步骤如下:

  • 菜单File->Import...
  • 选择"Existing Projects into workspace"
  • 选择hadoop-dev目录下的 hadoop-common-project 目录作为根目录
  • 选择hadoop-annotations, hadoop-auth, hadoop-auth-examples, hadoop-nfs 和 hadoop-common projects
  • 单击 "Finish"
  • 菜单File->Import...
  • 选择"Existing Projects into workspace"
  • 选择hadoop-dev目录下的hadoop-assemblies目录作为根目录
  • 选择hadoop-assemblies project
  • 单击"Finish"
  • 菜单File->Import...
  • 选择"Existing Projects into workspace"
  • 选择hadoop-dev目录下的hadoop-hdfs-project目录作为根目录
  • 选择hadoop-hdfs project
  • 单击"Finish"

由于我的项目只要用到hadoop的这几个模块,因此只导入了hadoop的部分模块,如果你们想导入其他的模块进行二次开发,可按上面相同的方式导入相应的子项目。

接下来就是利用eclipse编译hadoop,单击Run->Run Configuration...,会打开运行配置对话框,我们可以看到左侧有个Maven Build,双击Maven Build会新建一个配置页,按照下图的方式填写

注意,Base directory 填写的是hadoop项目的根目录,即 ~/hadoop-dev。单击Run,hadoop项目就开始编译了,这需要花一些时间,注意在这期间请保持网络连接正常。原因同上。

其实上面的过程也可以由命令行来完成,eclipse插件那一步都可以省了,命令行编译方法如下:

cd ~/hadoop-dev
mvn package -Pdist -DskipTests -Dtar

回到eclipse,编译成功后,eclipse的console窗口会输出BUILD SUCESS信息,这表示hadoop项目已经编译成功。

为了调试hadoop, 接下来的工作就是利用上面编译成功的hadoop构建hadoop环境。

前面编译的结果都保存在各个项目的target目录下,以hadoop-common为例,编译的结果在 ~/hadoop-dev/hadoop-common-project/hadoop-common/target/hadoop-common-3.0.0-SNAPSHOT/ 下。这个目录下面的结构如下图:

其他的比如hadoop-hdfs、hadoop-mapreduce等也在对应的target目录下,路径与上面的类似,里面的目录结构和上图是一样的。

我们首先在用户目录下建立一个hadoop目录(mkdir ~/hadoop),把上图的所在目录下的所有项拷贝到这个新建的目录下,由于我只用common和hdfs,因此我的拷贝过程只针对这两个子项目。(目前我们有找到很好的方法编译,只能编译好后再从各个子项目中去拷贝,有解决方案的童鞋请一定留言~)

由于上面的过程比较繁琐,我写成了一个脚本,稍后会发布到github上(附上github上脚本的地址:https://github.com/meibenjin/hadoop2.0-configuration),如果你等不及了,就先将就着拷贝一下吧。完成上面的操作以后,~/hadoop下的目录结构和上图一样。

现在,我简单介绍一下新版的hadoop的目录结构, 看着很像linux的目录结构吧。 bin和sbin目录下是一些hadoop命令,ect目录下就是配置文件了。share目录下是hadoop需要用的一些jar包。

hadoop的配置我就不在这里写了(如有必要,我另写一篇博客),具体的配置可上hadoop网站查看官方文档。也可以看这个博客:http://www.cnblogs.com/scotoma/archive/2012/09/18/2689902.html 其中提到的slaves和yarn-site.xml文件在hadoop-yarn-project下。 为了调试hadoop方便,请配置成伪分布模式。

配置成功以后,启动hadoop相关的进程,命令如下:

hadoop namenode -format
start-dfs.sh

查看进程是否启动成功,输入命令,jps得到下图输出:

这表示,hadoop相关的进程已经成功启动。

未完待续。。。

本文来自博客园,如果查看原文请点击  http://www.cnblogs.com/meibenjin/p/3172889.html

 

Windows Eclipse编译调试Linux下的C++代码

Windows机器挂载Linux机器Samba网盘后,可以在Windows机器上通过Eclipse C++编辑Linux机器上的C++代码(Eclipse C++默认是不带编译器和调试器的)。在此基础...
  • yasi_xi
  • yasi_xi
  • 2013年12月14日 12:39
  • 2870

在eclipse下远程调试hadoop2.0

在《在eclipse下编译hadoop2.0源码》一文中,我详细介绍了如何在eclipse环境和命令行环境下编译hadoop2.0源代码,并简单介绍了如何构建hadoop环境,这篇文章将着重介绍如何在...
  • fupacker
  • fupacker
  • 2013年08月05日 21:12
  • 1206

solr源码导入eclipse

(1)相应的开发环境准备          (1)jdk1.6+的安装和环境变量配置(命令行敲java和javac,检验)            (2)ant1.8+的安装和环境变量配置(命令行敲an...
  • VLTIC
  • VLTIC
  • 2014年02月25日 16:04
  • 10658

Hadoop之——hadoop2.5.2eclipse插件编译

最近在搞hadoop,所以编译hadoop-eclipse插件是少不了的 ! 先说下我的编译环境: hadoop: hadoop-2.5.2 OS:CentOS6.5 64位(VMWare虚拟机) e...
  • l1028386804
  • l1028386804
  • 2016年05月31日 01:10
  • 1065

Ubuntu 14.04下eclipse中编译NS3

在eclipse中编译ns3,虽说简单,但中间还是遇到了很多问题,最终得到了解决,故写下此文,希望对他人有帮助。...
  • u013595419
  • u013595419
  • 2015年01月12日 20:07
  • 1272

使用Eclipse编译Android源码

前提不需要SDK,不需要ADT,通过整个工程的编译都可以生成。为了在Eclipse中调试源码如Phone、MMS、Contact…… 由于以前都没接触过Java、Eclipse、ADT... 这些,在...
  • Smart_yujin
  • Smart_yujin
  • 2013年08月29日 14:32
  • 850

<深入剖析Nginx> 编译安装nginx 以及使用eclipse编译开发nginx

明年就要找工作了,看看经典的开源项目-nginx,图书馆借了本,开始研读,边读边做笔记. 第一篇是nginx的环境配置相关,参考帖子:Nginx模块开发---Linux使用eclipse编译,调试Ng...
  • zy416548283
  • zy416548283
  • 2014年12月30日 00:18
  • 2564

kettle4.2.0源码在eclipse中运行报错解决方法

最近在研究kettle工具,由于它是开源的,所以一直想把其源码放入eclipse中运行,我下载的是pdi-ce-src-4.2.0-stable-r15748版本的源码,放入到eclipse中,运行p...
  • htpiaoye
  • htpiaoye
  • 2016年10月10日 13:48
  • 414

android如何把apk的工程代码放到源码目录下编译

有时候不得已需要在Android源码里编译应用。譬如说用到了Andorid的隐藏类,譬如说要与系统一起起来的system权限apk,譬如说用eclipse编译时,明明是正确的代码却报错时。就不得不用到...
  • lyglostangel
  • lyglostangel
  • 2015年02月14日 12:21
  • 2692

eclipse编译jmeter源码debug启动jmeter完整版

大家都知道jmeter是一款很好的测试工具,但难免有时候因为业务的需要不能满足,这时候就需要我在此基础上改动点什么来帮助更好,更快的测试。网上也找了很多资料,单总不全,最近刚好整理完,特此做一个记录方...
  • xiaoll880214
  • xiaoll880214
  • 2014年12月28日 15:06
  • 2744
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:在eclipse下编译hadoop2.0源码
举报原因:
原因补充:

(最多只允许输入30个字)