CentOS 7.2 环境编译 hadoop-2.6.0-cdh5.15.1

为什么要编译 Hadoop

官方提供的Hadoop bin包是不支持一些类似snappy,zlib等本地库功能,所以我们需要重新编译使Hadoop支持这些功能

编译前的准备

  • 在 hadoop-2.6.0-cdh5.15.1-src.tar.gz 中有一个 BUILDING.txt 文件,里面说明了我们编译需要准备哪些东西,以及编译命令
    在这里插入图片描述
  • 一台能够联网的安装了 CentOS 7.2 环境的机器
  • 压缩包准备,其中 JDK 必须为 1.7 版本,protobuf 必须为 2.5.0 版本,否则会报错。如果想使用后面下载完的 maven 仓库则 maven 的版本必须是 3.3.9
    • apache-maven-3.3.9-bin.tar.gz
    • hadoop-2.6.0-cdh5.15.1-src.tar.gz
    • jdk-7u80-linux-x64.tar.gz
    • protobuf-2.5.0.tar.gz

开始编译

  • 切换到 root 用户,下面都使用 root 进行操作
  • 使用 yum 安装一些必须的包
yum install -y gcc gcc-c++ make cmake svn automake autoconf libtool git
yum install -y ncurses-devel openssl-devel bzip2-devel lzo-devel snappy-devel zlib-devel
  • 配置 JAVA_HOME
  • 编辑 maven 的 conf 目录下的 settings.xml 文件,配置 maven 的仓库位置和镜像地址,配置环境变量
# 指定仓库地址,这里可以直接指定编译完成后的仓库,可以省去下载仓库文件的时间
<localRepository>/root/mvnrepo</localRepository>

# 镜像地址,在 <mirrors></mirrors> 之间
<mirror>
	<id>nexus-aliyun</id>
	<mirrorOf>central</mirrorOf>
	<name>Nexus aliyun</name>
	<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
</mirror>

# 环境变量,注意指定编译内存大小,防止内存不足导致编译失败
MAVEN_HOME=/root/app/apache-maven-3.5.4
MAVEN_OPTS="-Xms2048m -Xmx2048m"
PATH=${MAVEN_HOME}/bin:$PATH

# 查看是否生效
source /etc/profile
which mvn
  • 编译安装 protobuf
# 进入protobuf目录
# 设置编译后生成文件放置的路径
./configure  --prefix=/root/app/protobuf-2.5.0
# 编译安装
make
make install

# 配置环境变量
PROTOBUF_HOME=/root/app/protobuf-2.5.0
PATH=${PROTOBUF_HOME}/bin:$PATH

# 测试是否生效
source /etc/profile
protoc --version
  • 开始编译Hadoop
# 进入hadoop源码目录,执行命令,开始编译
mvn clean package -Pdist,native -DskipTests -Dtar

解决编译中出现的错误

  • 最常见的错误就是无法下载某个pom文件,或者jar包,这需要我们手动到对应的maven仓库中的对应目录,使用wget下载到当前目录

  • 举一个例子,这是开始编译时出现的一个错误,后续的错误基本上都是此类错误

    • com.cloudera.cdh:cdh-root:pom:5.15.1 这个可以知道他在 maven仓库以及 cloudera 仓库的位置是 com/cloudera/cdh/cdh-root/5.15.1/,并且缺少的是 cdh-root.pom 这个 pom 文件
[ERROR] [ERROR] Some problems were encountered while processing the POMs:
[FATAL] Non-resolvable parent POM for org.apache.hadoop:hadoop-main:2.6.0-cdh5.15.1:

-------------------  最重要的一段  ----------------------------------------

Could not transfer artifact com.cloudera.cdh:cdh-root:pom:5.15.1 
from/to cdh.repo 
(https://repository.cloudera.com/artifactory/cloudera-repos)

-------------------------------------------------------------------------

: Remote host closed connection during handshake and 'parent.relativePath' points at wrong local POM @ line 19, column 11

在这里插入图片描述

  • 进入到maven仓库的对应位置,使用wget下载下来,或者从本地网页下载好直接rz上传,继续后续编译即可
# 原来目录文件,把 .lastUpdated 后缀的文件都删除
[root@hadoop001 5.15.1]# ll
total 4
-rw-r--r-- 1 root root 1169 Aug  4 23:28 cdh-root-5.15.1.pom.lastUpdated

rm -f cdh-root-5.15.1.pom.lastUpdated

wget https://repository.cloudera.com/artifactory/cloudera-repos/com/cloudera/cdh/cdh-root/5.15.1/cdh-root-5.15.1.pom

  • 编译最麻烦的环节就在这里,要注意无法正常下载哪个jar包或者pom文件,然后手动传到本地maven仓库的对应目录,然后继续编译,继续编译的命令不需要加 clean,整个过程大概需要 1-2 小时

使用编译成功后提取的maven仓库编译

  • 这里推荐使用编译成功后提取的maven仓库,里面包含了所有编译时需要的 jar 包和 pom 文件,省去了手动一个个添加的麻烦,只需要在maven的settings文件指定位置即可,这样编译的会很快,大概需要20多分钟,编译成功会显示 BUILD SUCCESS
    在这里插入图片描述
  • 编译成功生成的 tar 包在 hadoop 源码目录的 hadoop-dist/target 目录下
    在这里插入图片描述
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值