Hadoop2.9.2源码编译

官方对每个版本的hadoop提供了源码版本和二进制版本,但是官方提供的二进制版本是32位的,所以在安装hadoop时,为了更好的兼容系统位数和系统版本,或者添加Hadoop一些额外功能时,需要对Hadoop源码进行编译,本文以Hadoop2.9.2为例进行源码编译。

编译准备

查看系统信息

1
2
3
4
# cat /etc/redhat-release 
CentOS Linux release 7.6.1810 (Core)
# uname -a
Linux node-01 3.10.0-862.14.4.el7.x86_64 #1 SMP Wed Sep 26 15:12:11 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux

可以看到当前系统版本为centos7.6,64位,内核版本为3.10。

Hadoop下载

下载地址:Hadoop2.9.2下载

1
2
3
tar -zxvf hadoop-2.9.2-src.tar.gz
cd hadoop-2.9.2-src
less BUILDING.txt

可以看到所需编译环境

Requirements:

* Unix System
* JDK 1.7 or 1.8
* Maven 3.0 or later
* Findbugs 1.3.9 (if running findbugs)
* ProtocolBuffer 2.5.0
* CMake 2.6 or newer (if compiling native code), must be 3.0 or newer on Mac
* Zlib devel (if compiling native code)
* openssl devel (if compiling native hadoop-pipes and to get the best HDFS encryption performance)
* Linux FUSE (Filesystem in Userspace) version 2.6 or above (if compiling fuse_dfs)
* Internet connection for first build (to fetch all Maven and Hadoop dependencies)
* python (for releasedocs)
* Node.js / bower / Ember-cli (for YARN UI v2 building)

这是编译所需要的软件,包括:

  • JDK1.7 or 1.8
  • maven 3.0 or later
  • findbugs 1.3.9
  • protocolBuffer 2.5.0
  • cmake 2.6
  • zlib-devel
  • openssl-devel

解决编译依赖需安装autoconf automake gcc等。

软件安装

安装库文件

yum -y install patch svn ncurses-devel gcc*
yum -y install lzo-devel zlib-devel autoconf automake libtool cmake openssl-devel

安装JDK

参考:CentOS上安装Java环境

安装Maven

参考:CentOS上安装Maven

安装protocolBuffer

概述:
Google Protocol Buffer( 简称 Protobuf) 是 Google 公司内部的混合语言数据标准,Protocol Buffers 是一种轻便高效的结构化数据存储格式,可以用于结构化数据串行化,或者说序列化。它很适合做数据存储或 RPC 数据交换格式。可用于通讯协议、数据存储等领域的语言无关、平台无关、可扩展的序列化结构数据格式。目前提供了 C++、Java、Python 三种语言的 API。
下载地址:protocol-buffers-2.5.0.tar.gz
解压并编译安装

1
2
3
4
5
6
7
cd /data/backup
wget https://github.com/protocolbuffers/protobuf/releases/download/v2.5.0/protobuf-2.5.0.tar.gz
tar -zxvf protobuf-2.5.0.tar.gz
cd protobuf-2.5.0/
./configure
make
make install

验证:输入protoc –version,有下面输出结果则安装并配置正确。

1
2
# protoc --version
libprotoc 2.5.0

安装findbugs

概述:
FindBugs 是由马里兰大学提供的一款开源 Java静态代码分析工具。FindBugs通过检查类文件或 JAR文件,将字节码与一组缺陷模式进行对比从而发现代码缺陷,完成静态代码分析。
下载地址:findbugs-1.3.9

下载解压

1
2
3
cd /data/backup
wget https://jaist.dl.sourceforge.net/project/findbugs/findbugs/1.3.9/findbugs-1.3.9.tar.gz
tar -zxvf findbugs-1.3.9.tar.gz -C /data/findbugs1.3.9

配置环境变量

1
vim /etc/profile

末尾添加以下内容

1
2
3
#set findbugs environment
export FINDBUGS_HOME=/data/findbugs1.3.9
export PATH=$PATH:$FINDBUGS_HOME/bin

使环境变量生效

1
source /etc/profile              (立即生效)

验证

1
2
# findbugs -version
1.3.9

编译

首先保证主机能上网,在编译过程中网络保持畅通;为了保证maven编译更顺畅,也可以更本地maven仓库地址更改为国内地址。
进入到hadoop2.9.1源码的解压目录下,输入下面命令:

# mvn package -Pdist,native -DskipTests -Dtar

或者

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

前面只编译本地代码,后者编译本地代码和文档,因此前者速度较快。
接下来开始等待出现如下界面表示编译成功
Alt text
编译好的文件在../hadoop-dist/target/hadoop-2.7.1.tar.gz下。

编译中的问题

错误1

1
Connection to http://repo.maven.apache.org refused

表示连接maven远程仓库拒绝,此时再运行一下编译命令,就会接着下载jar包。
错误2

1
2
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.1:compile (default-compile) on project hadoop-nfs: Compilation failure: Compilation failure:
[ERROR] /data/backup/hadoop-2.9.2-src/hadoop-common-project/hadoop-nfs/src/main/java/org/apache/hadoop/oncrpc/XDR.java:[23,30] package org.jboss.netty.buffer does not exist

这个错误估计很少遇到,这是因为更换的仓库地址不能用,恢复成默认的仓库地址就好,虽然有点慢。
错误3

1
2
[ERROR] around Ant part ...<exec dir="/data/backup/hadoop-2.9.2-src/hadoop-hdfs-project/hadoop-hdfs-httpfs/target" executable="sh" failonerror="true">... @ 10:123 in /data/backup/hadoop-2.9.2-src/hadoop-hdfs-project/hadoop-hdfs-httpfs/target/antrun/build-main.xml
[ERROR] -> [Help 1]

这是由于tomcat的apache-tomcat-6.0.41.tar.gz包太大,没有下载完整,可以到…/hadoop-2.9.2-src/hadoop-hdfs-project/hadoop-hdfs-httpfs/downloads/apache-tomcat-6.0.41.tar.gz这个目录下,删除重新下载。
提醒:

  • 有时候编译过程中会出现下载某个包的时间太久,这是由于连接网站的过程中会出现假死,此时按ctrl+c,重新运行编译命令。
  • 如果出现缺少了某个文件的情况,则要先清理maven(使用命令 mvn clean) 再重新编译。

本文标题:Hadoop2.9.2源码编译

文章作者:Francis

原始链接:http://www.cnops.com/posts/ae01ba23.html

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。