Hadoop二次开发环境构建

1 Hadoop二次开发环境构建

1.1 Hadoop编译环境构建

1.1.1 系统信息

Linux版本:

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是否安装成功,如果出现以下信息:

则说明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命令将其解压缩,如下所示:

然后执行以下命令安装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-2.7.1-src/hadoop-dist/target目录中:

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

1.1.4 编译Hadoop常见问题

1.1.4.1 未装findbugs

当未安装findbugs时会报以下错误:

解决方式:安装findbugs

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

问题现象如下:

解决方式:下载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之后编译还报以下错误:

在网上查资料,很多人说是缺少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,例如:
  • 利用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配置文件,新增以下配置项:

其中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目录下,例如:

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

除此以外,还需在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工程,如下所示:

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

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

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

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

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

可以通过以下方式,在编译好的源码中找到Proto文件:

(2) IntelliJ IDEA导入Hadoop源码:

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

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

原文发布于微信公众号 - 大数据和云计算技术(jiezhu2007)

原文发表时间:2016-08-13

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏专注数据中心高性能网络技术研发

[Repost]A Survival Guide to a PhD

This guide is patterned after my “Doing well in your courses”, a post I wrote a ...

2585
来自专栏智能计算时代

IBM Research: WatsonPaths

A new cognitive computing project that enables more natural interaction between ...

2967
来自专栏遊俠扎彪

删除Windows右键新建文件类型

Win+R 运行regedit,效果如下:

2129
来自专栏闵开慧

运行wordcount时显示Could not obtain block

该文章接上面hadoop运行wordcount时卡住不动,接着下面 hadoop@ubuntu118:~/hadoop-1.0.2$ bi...

33714
来自专栏智能计算时代

What's The Future Of Cognitive Computing? IBM Watson

By Jay Bellisimo, IBM Watson Group We are entering a new period of computing his...

2839
来自专栏闻道于事

js登录滑动验证,不滑动无法登陆

js的判断这里是根据滑块的位置进行判断,应该是用一个flag判断 <%@ page language="java" contentType="text/html...

3838
来自专栏智能计算时代

Microservices Ecosystem Transit Map

…we assembled a map of the ecosystem to help guide practitioners, vendors, inves...

3174
来自专栏算法+

推荐一个c++小巧开源且跨平台的图像解码库

该图像解码库仅仅三个文件。 图像处理封装: spot.cpp spot.h 解码库实现: spot.c  支持图片文件格式如下: File formatRe...

2695
来自专栏智能计算时代

IBM Expands Data Discovery and Q&A Power of Watson Analytics

IBM Expands Data Discovery and Q&A Power of Watson Analytics Half a Million Prof...

2696
来自专栏Golang语言社区

Knapsack problem algorithms for my real-life carry-on knapsack

I'm a nomad and live out of one carry-on bag. This means that the total weight o...

982

扫码关注云+社区