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

文章目录

  • 为什么要编译 Hadoop
  • 编译前的准备
  • 开始编译
  • 解决编译中出现的错误
  • 使用编译成功后提取的maven仓库编译

为什么要编译 Hadoop

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

编译前的准备

  • 在 hadoop-2.6.0-cdh5.15.1-src.tar.gz 中有一个 BUILDING.txt 文件,里面说明了我们编译需要准备哪些东西,以及编译命令
    CentOS 7.2 环境编译 hadoop-2.6.0-cdh5.15.1_第1张图片
  • 一台能够联网的安装了 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>

# 镜像地址,在  之间
<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

CentOS 7.2 环境编译 hadoop-2.6.0-cdh5.15.1_第2张图片

  • 进入到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
    CentOS 7.2 环境编译 hadoop-2.6.0-cdh5.15.1_第3张图片
  • 编译成功生成的 tar 包在 hadoop 源码目录的 hadoop-dist/target 目录下
    CentOS 7.2 环境编译 hadoop-2.6.0-cdh5.15.1_第4张图片

你可能感兴趣的:(Hadoop,Hadoop)