首页 > 代码库 > Hadoop源代码阅读环境搭建

Hadoop源代码阅读环境搭建

Hadoop源代码阅读环境搭建


一、说明

作为一个学习hadoop的同学。必须在本机上搭建hadoop源代码阅读环境,这样,在方便阅读源代码的同一时候也方便进行调试和源代码改动。

好了。以下開始搭建好开发环境。

1.环境说明:hadoop 版本号:1.2.1、 IDE:eclipse、操作系统:centos 

2.网上有人是通过eclipse的新建项目指定文件夹的方式将hadoop文件夹转换成Eclipseproject同一时候导入eclipse,详细做法例如以下:

File——>new——>Java Project——>勾掉Use default location选项——>在location输入框中输入hadoop的文件夹——>Finish的方式导入hadoop文件夹来生成hadoop。

这样的错误的做法不但破坏了hadoopproject的项目结构,同一时候也会报出非常多错误

二、环境搭建

1.hadoop原始文件夹结构參考:

技术分享

2.我们下载的hadoop并非一个eclipseproject,须要将其转换为eclipseproject才干导入eclipse。版本号官方提供的hadoop是用ant工具作为项目管理工具的,因此,我们须要用ant将其转换为eclipseproject。详细步骤例如以下:

(1).安装必须工具:

a.安装ant

yum install ant

b.安装 libtool 

yum install libtool 

c.安装ant-apache-regexp

yum install ant-apache-regexp

注:libtool 和ant-apache-regexp工具必须安装,否则后面在用ant做转换时会报错。

(2).进入到Hadoop文件夹下:

cd hadoop-1.2.1

(3).通过ant将hadoop-1.2.1进行转换为eclipseproject:

ant clean

ant eclipse -verbose(增加verbose选项能够查看具体输出信息,有利于观察进度和查错)

注:该过程常见错误及解决方法參考第三部分“错误说明及解决”。

(4).假设一切顺利的话,第一次操作,大概须要10分钟左右(主要时间浪费在下载jar包上了)就能够完工。

假设成功的话。就能够通过import——>Existing Projects into Workspace 将hadoop-1.2.1导入eclipseproject了。


PS:除上面这种方法外。另一个比較笨的方法。就是新建一个javaproject,然后把各个包手动地拷贝进去,这样不必所有都拷进去,能够拷一些自己关心的包,比方core、hdfs、mapred。这三个包能够基本满足项目的执行和对于hdfs和mpareduce的研究了。

注:使用该方法后,某些类可能会出现例如以下异常:

Access restriction: The type IPAddressUtil is not accessible due to restriction on required library /opt/myeclipse-2013/binary/com.sun.java.jdk.linux.x86_64_1.6.0.u43/jre/lib/rt.jar
原因:Eclipse 默认把这些受訪问限制的API设成了ERROR。

解决方法:
  • Windows -> Preferences -> Java -> Compiler -> Errors/Warnings ->Deprecated and trstricted API -> Forbidden reference (access rules): -> change to warning 
  • 或Windows -> Preferences -> Java -> Installed JREs -> 选择用的JDK -> Edit -> Add External JARs
參考网址:http://blog.csdn.net/woshimaijunjinzhen/article/details/8523755

三、错误说明及解决

1.possibly undefined macro: AC_PROG_LIBTOOL
If this token and others are legitimate, please use m4_pattern_allow.See the Autoconf documentation.autoreconf:/usr/bin/autoconf failed with exit status: 1

例如以下图所看到的:

技术分享

假设出现此错误说明你的机器中没有安装libtool工具。仅仅需安装就可以:yum install libtool

參考文章:http://www.cnblogs.com/niocai/archive/2011/07/14/2106089.html

2.Could not create type regexpmapper due to No supported regular expression matcher found: java.lang.ClassNotFoundException: org.apache.tools.ant.util.regexp.Jdk14RegexpMatcher

例如以下图所看到的:

技术分享

出现如上所看到的错误时你的机器缺少ant-apache-regexp工具,仅仅需安装就可以:

yum install ant-apache-regexp

參考文章:http://yupengyan.com/dspace-quick-start.html

四、Hadoop 源码组织结构

直接解压 Hadoop 压缩包后,可看到下图所看到的的文件夹结构,当中,比較关键的文件夹有 src、conf、lib、bin 等。以下分别介绍这几个文件夹的作用:
src :Hadoop 源码所在的文件夹。最核心的代码所在子文件夹各自是 core、hdfs 和 mapred。它们分别实现了 Hadoop 最重要的三个模块,即基础公共库、HDFS 实现和MapReduce 实现。
conf: 配置文件所在文件夹。 Hadoop 的配置文件比較多,其设计原则可概括为例如以下两点。


○ 尽可能模块化,即每一个重要模块拥有自己的配置文件,这样使得维护以及管理变得简单。


○ 动静分离,即将可动态载入的配置选项剥离出来,组成独立配置文件。

比方,Hadoop 1.0.0 版本号之前。作业队列权限管理相关的配置选项被放在配置文件 mapred-site.xml 中,而该文件是不能够动态载入的,每次改动后必须重新启动 MapReduce。但从 1.0.0 版本号開始。这些配置选项被剥离放到独立配置文件 mapred-queue-acls.xml中,该文件能够通过 Hadoop 命令行动态载入。conf 文件夹下最重要的配置文件有core-site.xml、hdfs-site.xml 和 mapred-site.xml,分别设置了基础公共库 core、分布式文件系统 HDFS 和分布式计算框架 MapReduce 的配置选项。
lib:Hadoop 执行时依赖的三方库,包含编译好的 jar 包以及其它语言生成的动态库。 Hadoop 启动或者用户提交作业时,会自己主动载入这些库。
bin:执行以及管理 Hadoop 集群相关的脚本。这里介绍几个经常使用的脚本。 ?
○ hadoop:最基本且功能最完备的管理脚本,其它大部分脚本都会调用该脚本。
○ start-all.sh/stop-all.sh:启动 / 停止全部节点上的 HDFS 和 MapReduce 相关服务。
○ start-mapred.sh/stop-mapred.sh:单独启动 / 停止 MapReduce 相关服务。


○ start-dfs.sh/stop-dfs.sh:单独启动 / 停止 HDFS 相关服务。

技术分享

以下就 Hadoop MapReduce 源码组织结构进行介绍。

Hadoop MapReduce 源码组织结构 例如以下图所看到的。
技术分享
整体上看,Hadoop MapReduce 分为两部分:一部分是 org.apache.hadoop.mapred.*,这里面主要包括旧的对外编程接口以及 MapReduce 各个服务(JobTracker 以及 TaskTracker)的实现 ;还有一部分是 org.apache.hadoop.mapreduce.*。主要内容涉及新版本号的对外编程接口以及一些新特性(比方 MapReduce 安全) 。


1. MapReduce 编程模型相关
org.apache.hadoop.mapred.lib.*:这一系列 Java 包提供了各种可直接在应用程序中使用的 InputFormat、Mapper、Partitioner、Reducer 和OuputFormat,以降低用户编写MapReduce 程序的工作量。


org.apache.hadoop.mapred.jobcontrol :该 Java 包同意用户管理具有相互依赖关系的作业(DAG 作业) 。
org.apache.hadoop.mapred.join :该 Java 包实现了 map-side join 算法。

该算法要求数据已经依照 key 排好序。且分好片,这样能够仅仅使用 Map Task 实现 join 算法。避免 re-partition、sort、shuffling 等开销。 
org.apache.hadoop.mapred.pipes: 该 Java 包同意用户用 C/C++ 编写 MapReduce 作业。 
org.apache.hadoop.mapreduce:该 Java 包定义了一套新版本号的编程接口,这套接口比旧版接口封装性更好。


org.apache.hadoop.mapreduce.* : 这 一 系 列 Java 包 根 据 新 版 接 口 实 现 了各 种InputFormat、Mapper、Partitioner、Reducer 和 OuputFormat。


2. MapReduce 计算框架相关
org.apache.hadoop.mapred:Hadoop MapReduce 最核心的实现代码,包含各个服务的详细实现。
org.apache.hadoop.mapred.filecache:Hadoop DistributedCache 实现。DistributedCache是 Hadoop 提供的数据分发工具,可将用户应用程序中须要的文件分发到各个节点上。
org.apache.hadoop.mapred.tools :管理控制 Hadoop MapReduce。当前功能仅包含同意用户动态更新服务级别的授权策略和 ACL(訪问权限控制)属性。
org.apache.hadoop.mapreduce.split :该 Java 包的主要功能是依据作业的 InputFormat生成对应的输入 split。
org.apache.hadoop.mapreduce.server.jobtracker :该 Java 包维护了 JobTracker 可看到的 TaskTracker 状态信息和资源使用情况。
org.apache.hadoop.mapreduce.server.tasktracker.*:TaskTracker 的一些辅助类。


3. MapReduce 安全机制相关
这里仅仅涉及 org.apache.hadoop.mapreduce.security.*。

这一系列 Java 包实现了 MapReduce安全机制。


Hadoop源代码阅读环境搭建