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

在eclipse下编译hadoop2.0源码的更多相关文章

  1. 【转】如何在Ubuntu11.10(32位)下编译Android4.0源码(图文)

    原文网址:http://blog.csdn.net/flydream0/article/details/7046612 关于如何下载Android4.0的源码请参考我的另一篇文章: http://bl ...

  2. Ubuntu16.04下编译android6.0源码

    http://blog.csdn.net/cnliwy/article/details/52189349 作为一名合格的android开发人员,怎么能不会编译android源码呢!一定要来一次说编译就 ...

  3. 编译jmeter5.0源码

    jmeter5.0使用过程中,遇到request或者response乱码的情况,想要一次性解决这个问题,需要编译ApacheJMeter_http.jar这个包(lib\ext文件下)里的Reques ...

  4. 使用idea编译spring-framework5.0源码

    自从迈入java开发这个行当,从来没有好好的研究过源码,深感惭愧,话不多说,今天上一篇使用idea编译spring5.0源码. 以下在win中构建和编译过程分为 jdk环境的配置 gradle的下载和 ...

  5. 在Ubuntu Server14.04上编译Android6.0源码

    此前编译过Android4.4的源码,但是现在Android都到了7.0的版本,不禁让我感叹Google的步伐真心难跟上,趁这周周末时间比较充裕,于是在过去的24小时里,毅然花了9个小时编译了一把An ...

  6. Hadoop2.0源码包简介

    Hadoop2.0源码包简介 1.解压源码包: 2.目录结构: hadoop-common-project:Hadoop基础库所在目录,如RPC.Metrics.Counter等.包含了其它所有模块可 ...

  7. MAC 下编译 ANDROID P 源码 提示 internal error: Could not find a supported mac sdk: ["10.10" "10.11" "10.12" "10.13"]

    MAC 下编译 ANDROID P 源码出现下面的问题: ninja: no work to do. [21/21] out/soong/.bootstrap/bin/soong_build out/ ...

  8. 编译android5.0源码的

    java环境 Android 5.1 用到的jdk不再是Oracle 的 jdk ,而是开源的 openjdk,在ubuntu安装好后,使用如下命令安装jdk: $sudo apt-get insta ...

  9. elementary os 0.4.1下编译GCC-7.1源码并安装成功

    参考文章:http://www.2cto.com/os/201402/281131.html 前几天为了图个新鲜,安装了elementary os 0.4.1,的确是一股清流,可惜的是gcc版本觉得有 ...

随机推荐

  1. 关于C#与.NET Framework

    前几天,有一个做测试的问我.NET Framework是什么,和C#是什么关系呢. 下面我就来解释一下.NET Framework是什么:.NET Framework是一个框架,是应用程序运行时所需要 ...

  2. C#模拟POST提交表单(二)--HttpWebRequest以及HttpWebResponse

    上次介绍了用WebClient的方式提交POST请求,这次,我继续来介绍用其它一种方式 HttpWebRequest以及HttpWebResponse 自认为与上次介绍的WebClient最大的不同之 ...

  3. 十二、C# 委托与Lambda表达式(匿名方法的另一种写法)

    委托与Lambda表达式   1.委托概述 2.匿名方法 3.语句Lambda 4.表达式Lambda 5.表达式树   一.委托概述 相当于C++当中的方法指针,在C#中使用delegate 委托来 ...

  4. Java GC 日志输出分析

    搜到的几篇讲GC日志的文章,学到了很多东西.但是有些错误或者不够精确的地方. 因此自己尝试着总结一下. 先写个程序,然后结合程序解释每句话的意思. 运行参数 -Xms200M -Xmx200M -Xm ...

  5. Perl 中级教程 第5章课后习题

    5. 9. 1. 练习1 [5 分钟] 先不要运行程序, 看看你能否判断出这程序的哪部份出了问题?如果你看不出 来, 就可以运行一相程序, 得到些暗示, 来看是否能修改好: my %passenger ...

  6. Spring MVC 获取前端参数的注解

    在与前端交互的开发过程中,出现过几次无法取到参数的情况,费了些时间去排查问题,下面就简单总结一下. 注解详解 我们所要获取的前端传递参数大概可以分为以下四类: requet uri 部分的注解:@Pa ...

  7. CSS3 :nth-child() 选择器

    CSS3 :nth-child() 选择器 代码: <!DOCTYPE html> <html> <head> <style> p:nth-child( ...

  8. dedecms 常用标签调用

    /*------------------单个ip调用-------------------*/ {dede:type typeid="12"} <a title=" ...

  9. PuTTY + Xming 远程使用 Linux GUI

    from http://www.zw1840.com/blog/zw1840/2008/10/putty-xming-linux-gui.html 在家里的PC上用VMWare做了一个Oracle E ...

  10. linux c数据库备份第一版

    使用linuxC实现的mysql数据库备份目标:通过alarm信号定时备份数据库备注:目前是第一个版,本身不能定时备份可以结合linux自动化实现定时备份.运行平台:Linux或类unix测试平台:u ...