一、配置编译环境

安装基本库

使用yum安装。
yum install wget patch openssl-devel zlib-devel automake libtool make cmake libstdc++-static glibc-static git gcc gcc-c++

安装OpenJDK

下载OpenJDK源码并安装到指定目录(如“/opt/tools/installed”)。
wget https://github.com/AdoptOpenJDK/openjdk8-binaries/releases/download/jdk8u191-b12/OpenJDK8U-jdk_aarch64_linux_hotspot_8u191b12.tar.gz

tar -zxf OpenJDK8U-jdk_aarch64_linux_hotspot_8u191b12.tar.gz
mv jdk8u191-b12 /opt/tools/installed/

配置java环境变量,在“/etc/profile”文件末尾处增加下面的代码。
export JAVA_HOME=/opt/tools/installed/jdk8u191-b12
export PATH=$JAVA_HOME/bin:$PATH
按ESC键,输入:wq保存并退出。
运行下面命令,使修改的环境变量生效。
source /etc/profile

安装Maven

下载并安装到指定目录(如“/opt/tools/installed”)。
wget https://archive.apache.org/dist/maven/maven-3/3.5.4/binaries/apache-maven-3.5.4-bin.tar.gz

tar -zxf apache-maven-3.5.4-bin.tar.gz
mv apache-maven-3.5.4 /opt/tools/installed/

修改Maven环境变量,在/etc/profile文件末尾增加下面代码。
export MAVEN_HOME=/opt/tools/installed/apache-maven-3.5.4
export PATH=$MAVEN_HOME/bin:$PATH

运行下面的命令,是修改的环境变量生效。
source /etc/profile

修改Maven配置文件中的:本地仓路径、远程仓等。
配置文件路径:“/opt/tools/installed/apache-maven-3.5.4/conf/settings.xml”
本地仓库配置:

  1. <localRepository>/path/to/local/repo</localRepository>

说明:
本地仓库地址默认在“~/.m2/”目录下,如果想修改成指定目录,则修改localRepository标签,没有特殊需求,可不必修改该参数。

  1. <mirror>
  2. <id>huaweimaven</id>
  3. <name>huawei maven</name>
  4. <url>https://mirrors.huaweicloud.com/repository/maven/</url>
  5. <mirrorOf>central</mirrorOf>
  6. </mirror>

远程仓库配置(修改成自己搭建的Maven仓库,如果没有,可以下面配置):

  1. <mirror>
  2. <id>huaweimaven</id>
  3. <name>huawei maven</name>
  4. <url>https://mirrors.huaweicloud.com/repository/maven/</url>
  5. <mirrorOf>central</mirrorOf>
  6. </mirror>

当编译环境不能访问外网,需要在settings.xml配置文件中添加代理配置,具体内容如下:

  1. <proxies>
  2. <proxy>
  3. <id>optional</id>
  4. <active>true</active>
  5. <protocol>http</protocol>
  6. <username>用户名</username>
  7. <password>密码</password>
  8. <host>代理服务器网址</host>
  9. <port>代理服务器端口</port>
  10. <nonProxyHosts>local.net|some.host.com</nonProxyHosts>
  11. </proxy>
  12. </proxies>

安装GCC

挂载OS镜像。
mount YOUR_OS.iso /media -o loop

说明:
YOUR_OS.iso用实际的iso包名代替。

备份yum repo文件,清空/etc/yum.repos.d/目录文件。
cp -r /etc/yum.repos.d /etc/yum.repos.d-bak
rm /etc/yum.repos.d/*

须知:
请确认已经备份所有repo文件后,在rm删除界面输入y表示同意删除。

修改/etc/yum.repos.d/local.repo文件,配置yum本地源。

  1. [Local]
  2. name=CentOS-7.6 Local
  3. baseurl=file:///media/
  4. enabled=1
  5. gpgcheck=0

运行下面的命令,使yum源配置生效。
yum clean all
yum makecache

yum安装GCC相关软件。
yum -y install gcc.aarch64 gcc-c++.aarch64 gcc-gfortran.aarch64 libgcc.aarch64

安装cmake

Hadoop编译要求3.12及以上版本,本文以安装cmake 3.12.4版本为例。

下载cmake安装包。
wget https://cmake.org/files/v3.12/cmake-3.12.4.tar.gz

解压安装包。
tar -zxf cmake-3.12.4.tar.gz

编译安装cmake。
cd cmake-3.12.4
./bootstrap
make -j8
make install

安装Protoc

下载并解压源码。
wget https://github.com/protocolbuffers/protobuf/releases/download/v2.5.0/protobuf-2.5.0.tar.gz
tar -zxf protobuf-2.5.0.tar.gz
mv protobuf-2.5.0 /opt/tools/installed/
cd /opt/tools/installed/protobuf-2.5.0

安装依赖库。
yum -y install patch automake libtool

上传protoc.patch到服务器,打补丁,其中protoc.patch的路径视实际情况而定。
cp protoc.patch ./src/google/protobuf/stubs/
cd ./src/google/protobuf/stubs/
patch -p1 < protoc.patch
cd -

patch补丁下载路径:
https://mirrors.huaweicloud.com/kunpeng/archive/kunpeng_solution/bigdata/Patch/protoc.zip

编译并安装到系统默认目录。
./autogen.sh && ./configure CFLAGS=’-fsigned-char’ && make -j8 && make install

安装Phantomjs

挂载镜像源。
在有OS镜像文件文件的目录下执行:
mount YOUR_OS.iso /media/ -o loop
说明:
YOUR_OS.iso用实际的iso包名代替。

配置本地更新源
备份repo。
cd /etc/yum.repos.d
mkdir -p /etc/yum.repos.d/bak
mv *.repo bak

创建并编辑local.repo文件。
vi local.repo

在local.repo文件中添加如下内容:

  1. [local]
  2. name=local repo
  3. baseurl=file:///media
  4. enabled=1
  5. gpgcheck=0

生效本地源。
yum clean all
yum makecache

说明:
如果已挂载并配置好本地yum源,可跳过步骤1、2、3。

yum安装Phantomjs编译依赖的相关软件。
yum install gcc gcc-c++ make flex bison gperf ruby openssl-devel freetype-devel fontconfig-devel libicu-devel sqlite-devel libpng-devel libjpeg-devel git

若配置代理,需要执行此步骤(可选)。
git config —global https.proxy http://{代理ip}:{代理端口}
git config —global http.proxy http://{代理ip}:{代理端口}

取消git的ssl验证。
git config —global http.sslVerify false

fontconfig-devel下载代码、切换到对应分支,并更新子模块代码。
git clone https://github.com/ariya/phantomjs.git
cd phantomjs
git checkout 2.1.1
git submodule init
git submodule update

执行编译。
python build.py

须知:
第一次编译可能报错:
Error:Invalid operands (UND and UND sections) for ‘*’

打开src/qt/qtbase/src/gui目录中的Makefile,将-O3修改为-O2,重新启动编译即可。

  1. CFLAGS = -pipe -O2 -fPIC -fvisibility=hidden -fno-exceptions -Wall -W -Wno-unused-parameter -Wno-main -D_REENTRANT $(DEFINES)
  2. CXXFLAGS = -pipe -O2 -fPIC -fvisibility=hidden -fvisibility-inlines-hidden -std=c++0x -fno-exceptions -Wall -W -D_REENTRANT $(DEFINES)

将编译出来的phantomjs二进制文件拷贝到对应目录。
cp phantomjs /opt/tools/installed/phantomjs/bin/

修改“/etc/profile”文件,配置环境变量。

  1. JAVA_HOME=/opt/tools/installed/jdk8u222-b10
  2. MAVEN_HOME=/opt/tools/installed/apache-maven-3.5.4
  3. PHANTOMJS_HOME=/opt/tools/installed/phantomjs
  4. PATH=$PHANTOMJS_HOME/bin:$MAVEN_HOME/bin:$JAVA_HOME/bin:$PATH
  5. export PHANTOMJS_HOME MAVEN_HOME JAVA_HOME PATH

使修改的环境变量生效。
source /etc/profile

Phantomjs编译参考网址:https://phantomjs.org/build.html

二、执行移植分析

请依据《CheckSo 用户指南》扫描Tez安装包,分析得出需要移植的第三方依赖包如下表格。

原始jar so文件
leveldbjni-all-1.8.jar libleveldbjni.so
snappy-java-1.0.5.jar libsnappyjava.so
wildfly-openssl-1.0.4.Final.jar libwfssl.so

三、编译依赖库

请参考表 依赖包编译参考编译第三方依赖包,
表1 依赖包编译参考

依赖包名称 编译方法
leveldbjni-all-1.8.jar 编译步骤请参考《leveldbjni-all-1.8.jar 移植指南(CentOS 7.6)》
snappy-java-1.0.5.jar 编译步骤请参考《snappy-java-1.0.4.1,1.0.5 移植指南(CentOS 7.6)》
wildfly-openssl-1.0.4.Final.jar 编译步骤请参考《wildfly-openssl-1.0.4.Final.jar 移植指南(CentOS 7.6)》

四、编译tez

  1. 从Github上下载HDP3.1 Tez源码并解压。
    wget https://github.com/hortonworks/tez-release/archive/HDP-3.1.0.0-78-tag.tar.gz
    tar -xzf HDP-3.1.0.0-78-tag.tar.gz
  2. 进入Tez源码解压目录。
    cd tez-release-HDP-3.1.0.0-78-tag
  3. 修改pom.xml,在文件第48行,修改Maven仓库源。

https://repo.hortonworks.com/content/repositories/releases/
tez移植 - 图1

  1. 修改pom.xml,在文件第82行,添加Maven仓库源。

    1. <repository>
    2. <id>kunpengmaven</id>
    3. <name>kunpeng maven</name>
    4. <url>https://mirrors.huaweicloud.com/kunpeng/maven</url>
    5. </repository>

    tez移植 - 图2

  2. 修改tez-ui/pom.xml,在文件第147行“install”后面,添加以下内容。

—allow-root
tez移植 - 图3

  1. 执行编译。
    mvn package -DskipTests
    编译成功,如下图所示:
    tez移植 - 图4
  2. 编译完成后在“tez-dist/target/”目录下生成tar.gz包。tez移植 - 图5


五、制作rpm包

六、故障排除

问题1:编译报错:bower install failed

问题现象
编译报错:bower install failed。
tez移植 - 图6
解决方法
修改tez-ui/pom.xml 147行 install后面加—allow-root。
tez移植 - 图7

问题2:编译报错:Failure to find org.apache.hadoop:hadoop-hdfs:jar:tests:3.1.1.3.1.0.0-78

问题现象
编译报错:Failure to find org.apache.hadoop:hadoop-hdfs:jar:tests:3.1.1.3.1.0.0-78。
tez移植 - 图8
问题分析
一般是由于网络问题问题导致无法下载对应的jar包。
解决方法

  1. 修改pom文件,更改jar包下载的maven仓库地址。
    vim tez-release-HDP-3.1.0.0-78-tag/pom.xml
  2. 修改49行为http://repo.hortonworks.com/content/repositories/releases/仓库地址。tez移植 - 图9
  3. 然后重新执行编译命令。
    mvn install -DskipTests