- 一、配置编译环境
- 二、执行移植分析
- 三、编译依赖库
- 四、编译spark
- 五、制作rpm包
- 六、故障排除
- 问题1:编译spark时报错:Cannot find ‘R_HOME’. Please specify ‘R_HOME’ or make sure R is properly installed
- 问题2:编译R语言时报错:error: cannot compile a simple Fortran program
- 问题3:编译R语言时报错:configure: error: —with-x=yes (default) and X11 headers/libs are not available
- 问题4:编译R语言时报错:/usr/bin/install: cannot stat ‘NEWS.pdf’: No such file or directory
一、配置编译环境
安装基本库
使用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”
本地仓库配置:
<localRepository>/path/to/local/repo</localRepository>
说明:
本地仓库地址默认在“~/.m2/”目录下,如果想修改成指定目录,则修改localRepository标签,没有特殊需求,可不必修改该参数。
<mirror>
<id>huaweimaven</id>
<name>huawei maven</name>
<url>https://mirrors.huaweicloud.com/repository/maven/</url>
<mirrorOf>central</mirrorOf>
</mirror>
远程仓库配置(修改成自己搭建的Maven仓库,如果没有,可以下面配置):
<mirror>
<id>huaweimaven</id>
<name>huawei maven</name>
<url>https://mirrors.huaweicloud.com/repository/maven/</url>
<mirrorOf>central</mirrorOf>
</mirror>
当编译环境不能访问外网,需要在settings.xml配置文件中添加代理配置,具体内容如下:
<proxies>
<proxy>
<id>optional</id>
<active>true</active>
<protocol>http</protocol>
<username>用户名</username>
<password>密码</password>
<host>代理服务器网址</host>
<port>代理服务器端口</port>
<nonProxyHosts>local.net|some.host.com</nonProxyHosts>
</proxy>
</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本地源。
[Local]
name=CentOS-7.6 Local
baseurl=file:///media/
enabled=1
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
安装R语言
下载R语言源码并解压。
wget http://cran.rstudio.com/src/base/R-3/R-3.1.1.tar.gz
tar -zxf R-3.1.1.tar.gz
cd R-3.1.1
编译并安装到指定目录。
yum install readline-devel -y
yum install libXt-devel -y
./configure —enable-R-shlib —enable-R-static-lib —with-libpng —with-jpeglib —prefix=/opt/tools/installed/R-3.1.1
make all -j8 && make install
配置R语言环境变量,在“/etc/profile”文件末尾处增加下面的代码:
export R_HOME=/opt/tools/installed/R-3.1.1
export PATH=$R_HOME/bin:$PATH
运行下面的命令,是修改的环境变量生效。
source /etc/profile
安装Scala
下载sbt-0.13.15到指定目录,并解压(如“/opt/tools/installed”)。
wget https://sbt-downloads.cdnedge.bluemix.net/releases/v0.13.15/sbt-0.13.15.tgz
tar -zxf sbt-0.13.15.tgz
mv sbt /opt/tools/installed
在当前用户根目录创建.sbt目录,并将repositories文件拷贝到.sbt目录。
说明:
repositories标签定义了sbt编译时使用的maven仓库顺序。
mkdir ~/.sbt
cp repositories ~/.sbt
repositories文件内容如下:
[repositories]
local
huawei-maven: http://mirrors.huaweicloud.com/repository/maven/
sbt-releases-repo: http://repo.typesafe.com/typesafe/ivy-releases/, [organization]/[module]/(scala_[scalaVersion]/)(sbt_[sbtVersion]/)[revision]/[type]s/[artifact](-[classifier]).[ext]
sbt-plugins-repo: http://repo.scala-sbt.org/scalasbt/sbt-plugin-releases/, [organization]/[module]/(scala_[scalaVersion]/)(sbt_[sbtVersion]/)[revision]/[type]s/[artifact](-[classifier]).[ext]
配置SBT_HOME环境变量。
vim /etc/profile
export SBT_HOME=/opt/tools/installed/sbt
export PATH=${SBT_HOME}/bin:${PATH}
source /etc/profile
下载Scala-2.11.12源码到指定目录(如“/opt/tools/installed”)。
cd /opt/tools/installed
git clone https://github.com/scala/scala.git
cd scala
git checkout v2.11.12
sed -i “50,50s%)%),\n\ \ \ \ Keys.package
\ := bundle.value%g” project/Osgi.scala
编译Scala。
sbt package
配置Scala环境变量,在“/etc/profile”文件末尾增加以下内容。
export SCALA_HOME=/opt/tools/installed/scala
export PATH=$SCALA_HOME/build/pack/bin:$PATH
按ESC键,输入:wq保存并退出。
运行下面的命令,是修改的环境变量生效。
source /etc/profile
二、执行移植分析
请依据《CheckSo 用户指南》扫描Spark安装包,分析得出需要移植的第三方依赖包如下表格。
原始jar | so文件 |
---|---|
commons-crypto-1.0.0.jar | libcommons-crypto.so |
jline-2.12.1.jar | libjansi.so |
leveldbjni-all-1.8.jar | libleveldbjni.so |
netty-all-4.1.17.Final.jar | libnetty_transport_native_epoll_x86_64.so |
scala-compiler-2.11.8.jar | libjansi.so |
widfly-openssl-1.0.4.Final.jar | libwfssl.so |
三、编译依赖库
请参考表 依赖包编译参考编译第三方依赖包,
表1 依赖包编译参考
依赖包名称 | 编译方法 |
---|---|
commons-crypto-1.0.0.jar | 编译步骤请参考《commons-crypto-1.0.0.jar 移植指南(CentOS 7.6)》。 |
netty-all-4.1.17.Final.jar | 编译步骤请参考《netty-all-4.1.17.Final.jar 移植指南(CentOS 7.6)》。 |
jline-2.12.1.jar | 编译步骤请参考《jline-2.11,2.12,2.12.1,2.14.3.jar 移植指南(CentOS 7.6)》。 |
leveldbjni-all-1.8.jar | 编译步骤请参考《leveldbjni-all-1.8.jar 移植指南(CentOS 7.6)》。 |
scala-compiler-2.11.8.jar | 编译步骤请参考《scala-compiler-2.11.8,2.11.12,2.12.7.jar 移植指南(CentOS 7.6)》。 |
wildfly-openssl-1.0.4.Final.jar | 编译步骤请参考《wildfly-openssl-1.0.4.Final.jar 移植指南(CentOS 7.6)》。 |
四、编译spark
- 从Github上下载HDP3.1 Spark2源码并解压。
wget https://github.com/hortonworks/spark2-release/archive/HDP-3.1.0.0-78-tag.tar.gz
tar -zxf HDP-3.1.0.0-78-tag.tar.gz - 进入Spark2源码解压目录。
cd spark2-release-HDP-3.1.0.0-78-tag 修改pom.xml,在文件第236行,添加Maven仓库源。
<repository>
<id>kunpengmaven</id>
<name>kunpeng maven</name>
<url>https://mirrors.huaweicloud.com/kunpeng/maven</url>
</repository>
执行编译。
dev/make-distribution.sh —tgz -Pyarn,hive,hive-thriftserver,sparkr- 编译完成后在根目录目录下生成tgz包。
五、制作rpm包
安装rpmbuild工具
在鲲鹏平台安装rpmbuild工具。
- 下载rpmbuild工具的rpm包。
wget http://rpmfind.net/linux/fedora/linux/releases/31/Everything/aarch64/os/Packages/r/rpmrebuild-2.11-12.fc31.noarch.rpm - 安装rpmbuild工具。rpm -ivh rpmrebuild-2.11-12.fc31.noarch.rpm
分析x86 rpm包
检查rpm包的so文件、jar包
制作rpm包
rpm包制作过程请参考《HDP 3.1 Hadoop 移植指南(CentOS 7.6)》的方法二:通过替换x86 rpm包的jar、so、bin文件制作rpm包章节。
六、故障排除
问题1:编译spark时报错:Cannot find ‘R_HOME’. Please specify ‘R_HOME’ or make sure R is properly installed
问题现象
编译spark时报错:Cannot find ‘R_HOME’. Please specify ‘R_HOME’ or make sure R is properly installed。
问题分析
编译spark时启动了R语言支持,需要在环境上编译安装R语言。
解决方法
成功编译安装R语言后(安装在/opt/tools/installed目录),设置好R_HOME后再次运行编译命令。
export R_HOME=/opt/tools/installed/R-3.1.1
**
问题2:编译R语言时报错:error: cannot compile a simple Fortran program
问题现象
编译R语言时报错:error: cannot compile a simple Fortran program。
问题分析
这是因为系统缺少gfortran包。
解决方法
利用yum工具直接安装OS镜像中的对应gfortran包。
yum install gcc-gfortran.aarch64
**
问题3:编译R语言时报错:configure: error: —with-x=yes (default) and X11 headers/libs are not available
问题现象
编译R语言时报错:configure: error: —with-x=yes (default) and X11 headers/libs are not available。
问题分析
R语言默认—with-x=yes(use the X Window System)是打开的,因此需要安装对应的模块,可在OS镜像中找到。
解决方法
安装OS镜像中的该模块。
yum install libXt-devel.aarch64
**
问题4:编译R语言时报错:/usr/bin/install: cannot stat ‘NEWS.pdf’: No such file or directory
问题现象
编译R语言时报错:/usr/bin/install: cannot stat ‘NEWS.pdf’: No such file or directory。
问题分析
在源码目录R-3.1.1没有找到NEWS.pdf文件,所以make install时无法拷贝。
解决方法
查看doc目录有NEWS相关的文本文件,因此将doc目录的NEWS内容直接放到NEWS.pdf里面。
cat doc/NEWS > doc/NEWS.pdf