1      Hadoop二次开发环境构建

1.1        Hadoop编译环境构建

1.1.1 系统信息

Linux版本:Hadoop二次开发环境构建_Hadoop

 

 

1.1.2 编译环境准备

1.1.2.1  安装jdk7.0

rpm -ivh jdk-7u2-linux-x64.rpm 

 

vim /etc/profile 

export JAVA_HOME=/usr/java/jdk1.7.0 

export JRE_HOME=/usr/java/jdk1.7.0/jre 

exportPATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH 

exportCLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar 

注:修改完/etc/profile文件之后,需执行source /etc/profile

 

1.1.2.2  安装maven

tar -zxvfapache-maven-3.1.1-bin.tar.gz 

 

vim /etc/peofile 

exportM2_HOME=/usr/local/apache-maven-3.1.1 

exportPATH=$PATH:$JAVA_HOME/bin:$M2_HOME/bin

做完以上设置以后执行source/etc/profile,然后使用mvn –v查看maven是否安装成功,如果出现以下信息:Hadoop二次开发环境构建_Hadoop_02

 

则说明maven安装成功了。

 

1.1.2.3  安装findbugs

tar zxvf findbugs-3.0.0.tar.gz 

 

vim /etc/profile 

export FINDBUGS_HOME=/usr/local/findbugs-3.0.0 

export PATH=$PATH:$FINDBUGS_HOME/bin

 

1.1.2.4  安装protobuf

tar zxvf protobuf-2.5.0.tar.gz

cd protobuf-2.5.0

./configure

make

make install

检测  protoc --version

 

1.1.2.5  安装cmake

tar zxvf cmake-2.8.7.tar.gz

cd cmake-2.8.7

./bootstrap

gmake

gmake install

检查安装 whichcmake看结果可知安装是否正确

 

1.1.2.6  安装与使用git

本来是否安装git与编译Hadoop源码没有直接的关系,如果已经获取到源码,则可以跳过该环节;但在大多数项目开发中,我们都是采用git来进行版本控制,并且Hadoop社区都是采用git来进行版本管理的,所以在此处有必要介绍一下git的安装与使用。

Git的安装:在git官网(http://git-scm.com/download)下载git的最新版本,或者在https://www.kernel.org/pub/software/scm/git/中选择下载git的各历史版本,例如我下载的是git-2.6.4.tar.gz版本;将其拷贝到Linux环境中,并使用tar –xvf git-2.6.4.tar.gz命令将其解压缩,如下所示:Hadoop二次开发环境构建_Hadoop_03

 

然后执行以下命令安装git:

cd git-2.6.4

./configure

make

make install

安装成功之后执行git--version查看安装的git版本。

到此为止则可以使用git命令下载git服务器上的代码了,如下所示:

$ git clone git@code.baidu.com:z00123456/baidu-hadoop.git

remote:Counting objects: 21205, done.

remote:Compressing objects: 100% (9921/9921), done.

Receivingobjects:  13% (2820/21205), 150.57 MiB |667.00 KiB/s

 

1.1.3    编译Hadoop源码

tar zxvf hadoop-2.7.1-src.tar.gz

cd hadoop-2.7.1-src

mvn clean [非必要操作] 

mvn package -Pdist,native,docs,src-DskipTests –Dtar

(或者mvn clean package -Pdist,native -DskipTests=true-Dmaven.javadoc.skip=true)

Hadoop二次开发环境构建_Hadoop_04

最后的文件就在hadoop-2.7.1-src/hadoop-dist/target目录中:Hadoop二次开发环境构建_Hadoop_05

 

至此,已经完成hadoop-2.7.1的编译。

 

1.1.4    编译Hadoop常见问题

1.1.4.1  未装findbugs

当未安装findbugs时会报以下错误:Hadoop二次开发环境构建_Hadoop_06

 

解决方式:安装findbugs

 

1.1.4.2  提示缺少apache-tomcat-6.0.41.tar.gz包

问题现象如下:

Hadoop二次开发环境构建_Hadoop_07

解决方式:下载apache-tomcat-6.0.41.tar.gz包,并将其拷贝到hadoop源码的以下路径下:

hadoop-2.7.1-src/hadoop-common-project/hadoop-kms/downloads

hadoop-2.7.1-src/hadoop-hdfs-project/hadoop-hdfs-httpfs/downloads

 

1.1.4.3  未安装openssl-devel

在安装完cmake之后编译还报以下错误:Hadoop二次开发环境构建_Hadoop_08

 

在网上查资料,很多人说是缺少zlib1g-dev与libssl-dev两个库;但有一个兄弟说安装openssl-devel之后就编译成功了,所以我试了试安装openssl-devel,果然就没有再报上面的错了。

openssl-devel安装:我采用的是挂载RedHa6t安装盘,使用yum命令的安装方式,具体做法如下:

  • 利用BMC挂载镜像文件rhel-server-6.2-x86_64-dvd.iso

注:我装的是redhat6.2所以挂载该镜像文件,大家可根据自己安装的Linux版本挂载相应的镜像文件

  • 在linux中创建一个目录,然后把镜像文件挂载到该目录上,例如:

mkdir /aa     mount/dev/cdrom /aa

  • 修改/etc/yum.repos.d目录下的配置文件rhel-source.repo,例如:Hadoop二次开发环境构建_Hadoop_09

 

  • 利用yum命令安装openssl-devel,如下所示:

yum install openssl-devel

  • 查看是否安装成功

yum list openssl-devel

注:还有一个比较实用的命令,可以查找镜像文件中是否有某个安装包,例如:

yum search gcc  //查找镜像文件中是否有gcc

 

1.1.4.4  配置外网访问

机房里的服务器大多数是访问不了外网的,只有少数服务器配置了大网IP;而编译hadoop源代码又需要连接互联网(Maven要从代码库中下载依赖包),所以当在一台没有大网IP的服务器中编译hadoop源码时,则可以通过设置网络跳转来达到访问外网的目的。

要想达到访问外网的目的,需在Linux环境上做如下设置:

(1)   修改/etc/profile配置文件,新增以下配置项:Hadoop二次开发环境构建_Hadoop_10

 

其中169.10.35.238为PC机上配置的机房小网IP地址,3128为网络跳转软件squid的默认使用端口(需在PC安装配置该软件)

(2)   将在Linux环境的maven的配置文件settings.xml中增加以下配置:

<proxy>

 <id>optional</id>

 <active>true</active>

 <protocol>http</protocol>

 <username></username>

 <password></password>

 <host>169.10.35.238</host>

 <port>3128</port>

 <nonProxyHosts>local.net|some.host.com</nonProxyHosts>

</proxy>

(3)   拷贝wagon-http-lightweight-2.2.jar软件包到maven的安装路径下的ext目录下,例如:

Hadoop二次开发环境构建_Hadoop_11

注:该步骤是否为必须项还需确认

除此以外,还需在PC机上安装以及配置squid软件

(1)   直接解压缩squid.zip到C:\squid

(2)   到C:\squid\etc目录下,复制squid.conf.default为squid.conf,mime.conf.default为mime.conf,cachemgr.conf.default为cachemgr.conf。如果有特殊的配置要求,可以修改squid.conf,squid的默认端口是3128

(3)   修改squid.conf文件的如下配置项,使其可用父级代理(华为代理):

cache_peer proxy.huawei.com parent 8080 0 no-queryno-digest login=域用户:密码

(4)   服务安装与初始化,到c:\squid\sbin目录下,执行以下命令:

安装服务:squid –i

初始化缓存目录结构:squid–z

重启机器或者命令行执行“net start squid”启动服务,然后即可通过代理访问外网

 

1.2        构建HDFS源代码阅读环境

在Hadoop官网上下载的源码包hadoop-2.7.1-src.tar.gz,解压之后是一个maven工程,如下所示:

Hadoop二次开发环境构建_Hadoop_12

 

其中的Yarn、HDFS以及common等子模块也都是maven工程。

我们可以使用IntelliJIDEA或eclipse来导入hadoop源码,以供阅读与二次开发

(1)   使用eclipse导入Hadoop源码:

因为我阅读与二次开发的是HDFS模块,所以我只导入了HDFS子模块的源代码,如下所示:

Hadoop二次开发环境构建_Hadoop_13
Hadoop二次开发环境构建_Hadoop_14

 

即直接把Hadoop源码的子模块hadoop-hdfs-project当做一个maven工程导入即可,导入之后代码会报一些错,主要原因是缺少一些*Protos.java与*Proto.java文件,这些文件是在编译Hadoop源码时才生成的,所以需要到自行编译好的源码中(3.1有介绍)找到这些Proto文件,并拷贝到导入模块的相应目录下。

可以通过以下方式,在编译好的源码中找到Proto文件:Hadoop二次开发环境构建_Hadoop_15

 

(2)   IntelliJ IDEA导入Hadoop源码:

使用idea导入Hadoop源码就更方便了,直接把整个Hadoop工程当做maven工程导入即可,因为idea对maven工程有更好的支持,所以熟练使用idea IDE的人基本会选择使用idea进行Hadoop的二次开发,导入情况如下所示:Hadoop二次开发环境构建_Hadoop_16

 

如上图所示,Hadoop源码在idea中展示非常清晰,均是Hadoop的子模块来划分目录的,这样导入之后还是会缺少上面提到的Proto文件,其实缺少这些文件根本不影响阅读Hadoop源码,对基于Hadoop的二次开发也没什么影响,因为二次开发很少会涉及改动Proto文件。