一、介绍

简要介绍

Ambari是 Apache Software Foundation 中的一个顶级项目,它可以创建、管理、监视 Hadoop 整个生态圈(例如 Hive,Hbase,Sqoop,Zookeeper 等)的集群,使得Hadoop 以及相关的大数据软件更容易使用。
Ambari本身是一个分布式架构的软件,由Ambari Server 和 Ambari Agent两部分组成,用户可通过 Ambari Server 通知 Ambari Agent 安装对应的软件;Ambari Agent会定时地发送各个机器每个软件模块的状态给 Ambari Server,最终这些状态信息会呈现在 Ambari 的 GUI,方便用户了解到集群的各种状态,并进行相应的维护。

建议的版本

建议使用版本为“2.7.3”。

二、环境要求

硬件环境

硬件要求如表1所示。
表1 硬件参考

项目 说明
CPU 鲲鹏920 5250处理器
网络 Ethernet-10GE
存储 SATA 1T
内存 512G 2400MHz

操作系统要求

操作系统要求如表2所示。
表2 操作系统要求

项目 版本
CentOS 7.6
Kernel 4.14.0

软件要求

软件要求如表3所示。
表3 软件要求

项目 版本 下载地址
OpenJDK 1.8.0_191 link
Maven 3.5.4 link
Phantomjs 2.1.0 link
Golang 1.9 link
Nodejs 8.6.0 link
Grafana 2.6.0 link

三、配置编译环境

安装OpenJDK

下载OpenJDK安装包。
下载地址:
https://github.com/AdoptOpenJDK/openjdk8-binaries/releases/download/jdk8u222-b10/OpenJDK8U-jdk_aarch64_linux_hotspot_8u222b10.tar.gz

也可以去如下地址自行选择对应版本:
https://adoptopenjdk.net/releases.html

官方下载地址:
https://www.oracle.com/technetwork/java/javase/downloads/index.html

须知:
如果环境无法直接连接网络,需要配置可用代理步骤如下。

在/etc/profile文件末尾处增加下面的代码:

export http_proxy={代理ip}:{代理端口}
export https_proxy={代理ip}:{代理端口}

修改完之后执行
source /etc/profile
使配置的代理生效。

安装到指定目录(如“/opt/tools/installed”)。
tar -zxf OpenJDK8U-jdk_aarch64_linux_hotspot_8u222b10.tar.gz
mv jdk8u222-b10 /opt/tools/installed/

配置java环境变量,在“/etc/profile”文件末尾处增加下面的代码:
export JAVA_HOME=/opt/tools/installed/jdk8u222-b10
export PATH=$JAVA_HOME/bin:$PATH

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

安装Maven

下载Maven安装包。
wget https://archive.apache.org/dist/maven/maven-3/3.5.4/binaries/apache-maven-3.5.4-bin.tar.gz

须知:
如果wget下载时报无法验证github.com颁发的证书错误,可在wget命令后面跟参数—no-check-certificate。

安装到指定目录(如“/opt/tools/installed”)。
tar -zxf apache-maven-3.5.4-bin.tar.gz
mv apache-maven-3.5.4 /opt/tools/installed/

修改Maven环境变量,在/etc/profile文件末尾增加以下代码:

  1. export MAVEN_HOME=/opt/tools/installed/apache-maven-3.5.4
  2. export PATH=$MAVEN_HOME/bin:$PATH

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

添加代理(可选)。
在Maven配置文件./conf/setting.xml中

  1. <proxy>
  2. <id>optional</id>
  3. <active>true</active>
  4. <protocol>http</protocol>
  5. <host>{代理ip}</host>
  6. <port>{代理端口}</port>
  7. <nonProxyHosts>local.net|some.host.com</nonProxyHosts>
  8. </proxy>

修改Maven配置文件中的本地仓路径、远程仓等。

  1. <!--默认在“~/.m2/”目录下,修改成你自己想保存的目录-->
  2. <localRepository>/path/to/local/repo</localRepository>
  3. <!--修改成自己搭建的maven仓库-->
  4. <mirror>
  5. </mirror>

如果没有,可以在mirror标签中,添加以下三个镜像源。

  1. <mirror>
  2. <id>alimaven</id>
  3. <mirrorOf>central</mirrorOf>
  4. <name>repo1 maven</name>
  5. <url>http://repo1.maven.org/maven2/</url>
  6. </mirror>
  7. <mirror>
  8. <id>repo2</id>
  9. <mirrorOf>central</mirrorOf>
  10. <url>http://repo2.maven.org/maven2</url>
  11. <name>Human Readable Name for this Mirror.</name>
  12. </mirror>
  13. <mirror>
  14. <id>uk</id>
  15. <mirrorOf>central</mirrorOf>
  16. <url>http://uk.maven.org/maven2</url>
  17. <name>Human Readable Name for this Mirror.</name>
  18. </mirror>

profiles标签中,推荐添加以下的标签

<profile>
      <id>clojars</id>
      <repositories>
        <repository>
          <id>clojars-release</id>
          <name>clojars release</name>
          <url>http://clojars.org/repo</url>
          <releases><enabled>true</enabled></releases>
          <snapshot><enabled>false</enabled></snapshot>
        </repository>
      </repositories>
    </profile>
    <profile>
      <id>hdp</id>
      <repositories>
        <repository>
          <id>hdp-release</id>
          <name>hdp release</name>
          <url>http://repo.hortonworks.com/content/repositories/releases/</url>
          <releases><enabled>true</enabled></releases>
          <snapshot><enabled>false</enabled></snapshot>
        </repository>
      </repositories>
    </profile>
        <profile>
      <id>cdh</id>
      <repositories>
        <repository>
          <id>cdh-release</id>
          <name>cdh release</name>
          <url>http://repository.cloudera.com/artifactory/cloudera-repos</url>
          <releases><enabled>true</enabled></releases>
          <snapshot><enabled>false</enabled></snapshot>
        </repository>
      </repositories>
    </profile>
    <profile>
      <id>dynamodb-local-oregon</id>
      <repositories>
        <repository>
          <id>dynamodb-local-oregon</id>
          <name>dynamodb-local-oregon release</name>
          <url>http://s3-ap-southeast-1.amazonaws.com/dynamodb-local-singapore/release</url>
          <releases><enabled>true</enabled></releases>
          <snapshot><enabled>false</enabled></snapshot>
        </repository>
      </repositories>
    </profile>
    <profile>
      <id>ibiblio</id>
      <repositories>
        <repository>
          <id>ibiblio</id>
          <name>ibiblio release</name>
          <url>http://mirrors.ibiblio.org/pub/mirrors/maven2</url>
          <releases><enabled>true</enabled></releases>
          <snapshot><enabled>false</enabled></snapshot>
        </repository>
      </repositories>
    </profile>
    <profile>
      <id>jboss</id>
      <repositories>
        <repository>
          <id>jboss</id>
          <name>jboss release</name>
          <url>http://repository.jboss.org/nexus/content/groups/public/</url>
          <releases><enabled>true</enabled></releases>
          <snapshot><enabled>false</enabled></snapshot>
        </repository>
      </repositories>
    </profile>

安装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文件中添加如下内容:

[local]
name=local repo
baseurl=file:///media
enabled=1
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,重新启动编译即可。

CFLAGS        = -pipe -O2 -fPIC -fvisibility=hidden -fno-exceptions -Wall -W -Wno-unused-parameter -Wno-main -D_REENTRANT $(DEFINES)
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”文件,配置环境变量。

JAVA_HOME=/opt/tools/installed/jdk8u222-b10
MAVEN_HOME=/opt/tools/installed/apache-maven-3.5.4
PHANTOMJS_HOME=/opt/tools/installed/phantomjs
PATH=$PHANTOMJS_HOME/bin:$MAVEN_HOME/bin:$JAVA_HOME/bin:$PATH
export PHANTOMJS_HOME MAVEN_HOME JAVA_HOME PATH

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

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

安装nodejs

下载nodejs。
wget http://nodejs.org/dist/v8.6.0/node-v8.6.0-linux-arm64.tar.gz

须知:
如果wget下载时报无法验证github.com颁发的证书错误,可在wget命令后面跟参数—no-check-certificate。

tar -zxf node-v8.6.0-linux-arm64.tar.gz
mv node-v8.6.0-linux-arm64 /opt/tools/installed

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

JAVA_HOME=/opt/tools/installed/jdk8u222-b10
MAVEN_HOME=/opt/tools/installed/apache-maven-3.5.4
PHANTOMJS_HOME=/opt/tools/installed/phantomjs
NODE_HOME=/opt/tools/installed/node-v8.6.0-linux-arm64
PATH=$NODE_HOME/bin:$PHANTOMJS_HOME/bin:$MAVEN_HOME/bin:$JAVA_HOME/bin:$PATH
export NODE_HOME PHANTOMJS_HOME MAVEN_HOME JAVA_HOME PATH

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

搭建golang环境

下载golang。
wget https://dl.google.com/go/go1.9.linux-arm64.tar.gz

须知:
如果wget下载时报无法验证github.com颁发的证书错误,可在wget命令后面跟参数—no-check-certificate。

tar -zxf go1.9.linux-arm64.tar.gz
mv go /opt/tools/installed

搭建开发环境,修改/etc/profile环境变量。

JAVA_HOME=/opt/tools/installed/jdk8u222-b10
MAVEN_HOME=/opt/tools/installed/apache-maven-3.5.4
PHANTOMJS_HOME=/opt/tools/installed/phantomjs
GOROOT=/opt/tools/installed/go/
GOPATH=/opt/tools/installed/go/path
PATH=$GOROOT/bin:$PHANTOMJS_HOME/bin:$MAVEN_HOME/bin:$JAVA_HOME/bin:$PATH
export GOROOT GOPATH PHANTOMJS_HOME MAVEN_HOME JAVA_HOME PATH

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

手动在“${GOPATH}”下创建三个目录。
cd ${GOPATH}
mkdir src bin pkg

说明:
src目录中将存放要编译的源码工程和一些依赖工程。

搭建文件服务器

安装httpd。
yum install httpd

开启httpd服务。
systemctl start httpd.service
systemctl enable httpd.service

验证httpd服务。
systemctl status httpd.service

若状态为running,则安装并启动成功:

httpd.service - The Apache HTTP Server
   Loaded: loaded (/usr/lib/systemd/system/httpd.service; disabled; vendor preset: disabled)
   Active: active (running) since Mon 2019-10-14 16:22:09 CST; 18h ago
     Docs: man:httpd(8)
           man:apachectl(8)
 Main PID: 22995 (httpd)
   Status: "Total requests: 34; Current requests/sec: 0; Current traffic:   0 B/sec"
   CGroup: /system.slice/httpd.service
           ├─22995 /usr/sbin/httpd -DFOREGROUND
           ├─22996 /usr/sbin/httpd -DFOREGROUND
           ├─22997 /usr/sbin/httpd -DFOREGROUND
           ├─22998 /usr/sbin/httpd -DFOREGROUND
           ├─22999 /usr/sbin/httpd -DFOREGROUND
           ├─23000 /usr/sbin/httpd -DFOREGROUND
           ├─23015 /usr/sbin/httpd -DFOREGROUND
           ├─25332 /usr/sbin/httpd -DFOREGROUND
           └─46379 /usr/sbin/httpd -DFOREGROUND

Oct 14 16:22:09 DataNode-1 systemd[1]: Starting The Apache HTTP Server...
Oct 14 16:22:09 DataNode-1 httpd[22995]: AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using 192.168.1.91. Set the 'ServerName' d...this message
Oct 14 16:22:09 DataNode-1 systemd[1]: Started The Apache HTTP Server.
Hint: Some lines were ellipsized, use -l to show in full.

启动httpd服务后,浏览器可访问服务器上的文件,其中文件服务器/var/www/html目录下的文件可通过http://{文件服务器IP}进行访问。
说明:
假设文件服务器IP为192.168.1.91,example.txt文件存放于文件服务器的/var/www/html/one/two/example.txt,则可在浏览器中通过http://192.168.1.91/one/two/example.txt访问example.txt文件。

四、执行移植分析

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

需要重新编译的jar包 jar包包含的so
jline-2.11.jar libjansi.so
leveldbjni-all-1.8.jar libleveldbjni.so
netty-all-4.0.23.Final.jar libnetty-transport-native-epoll.so
netty-all-4.0.37.Final.jar libnetty-transport-native-epoll.so
jruby-complete-1.6.8.jar libjruby-cext.so
lz4-1.2.0.jar liblz4-java.so
lz4-1.3.0.jar liblz4-java.so
snappy-java-1.0.4.1.jar libsnappyjava.so
snappy-java-1.1.1.7.jar libsnappyjava.so
sqlite-jdbc-3.8.11.2.jar libsqlitejdbc.so
需要重新编译的组件
phoenix-5.0.0
hadoop-3.1.1
grafana-2.6.0
hbase2.0.2
phantomjs2.1.1
需要重新编译的so
libsnappy.so.1
_speedups.so
_posixsubprocess32.so

五、编译依赖库

编译依赖库

  1. 请参考表 依赖包编译参考编译部分第三方依赖包,表1 部分依赖包编译参考 | 依赖包名称 | 编译方法 | | —- | —- | | jline-2.11.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)》 | | netty-all-4.0.23.Final.jar | 请参考《netty-all-4.0.23.Final,4.0.29.Final.jar 移植指南(CentOS 7.6)》 | | lz4-1.2.0.jar/lz4-1.3.0.jar | 请参考《lz4-java-x.x.x.jar 移植指南(CentOS 7.6)》 | | snappy-java-1.0.4.1.jar | 请参考《snappy-java-1.0.4.1,1.0.5 移植指南(CentOS 7.6)》 | | snappy-java-1.1.1.7.jar | 请参考《snappy-java-1.1.0.1,1.1.1.3,1.1.1.6,1.1.1.7,1.1.2.6.jar 移植指南(CentOS 7.6)》。 |

2.编译完成的jar包替换到自己搭建的maven仓库和本地仓库中。

编译_posixsubprocess32.so

通过命令安装python2-subprocess32。
yum install -y python2-subprocess32.aarch64

在/usr/lib64/python2.7/site-packages/_posixsubprocess.so处获得_posixsubprocess.so。
重命名_posixsubprocess.so为_posixsubprocess32.so。
mv _posixsubprocess.so _posixsubprocess32.so

在ambari的源码中“ambari-common/src/main/python/ambari_commons/libs”目录下执行命令。
cp -r x86_64 aarch64

使用3中的_posixsubprocess32.so替换掉aarch64目录下_posixsubprocess32.so
_posixsubprocess32.so源码地址:https://github.com/google/python-subprocess32/archive/3.5.3.tar.gz

编译_speedups.so

从ambari源码中“ambari-common/src/main/python/ambari_simplejson/init.py”文件中100行可知simplejson的版本为2.0.9。
version = ‘2.0.9’

下载simplejson源码并解压。
pip download simplejson==2.0.9
tar -zxf simplejson-2.0.9.tar.gz
cd simplejson-2.0.9

说明:
此步骤需保证有外网访问权限。

编译simplejson
python setup.py build

说明:
编译好的so文件在build/lib.linux-aarch64-2.7/simplejson/_speedups.so

使用编译完成的_speedups.so替换掉ambari-common/src/main/python/ambari_simplejson/目录下的_speedups.so
_speedups.so源码地址:https://github.com/pallets/markupsafe/archive/1.1.1.tar.gz

编译Phoenix-5.0.0

请参考《Phoenix 移植指南(CentOS 7.6)》,下载链接:https://github.com/hortonworks/phoenix-release/archive/HDP-3.0.0.0-1634-tag.tar.gz

编译Hadoop-3.1.1

请参考《Hadoop 3.1.1 移植指南(CentOS 7.6)》,下载链接:https://github.com/hortonworks/hadoop-release/archive/HDP-3.0.0.0-1634-tag.tar.gz

编译Hbase

请参考《Hbase 2.1.0 移植指南(CentOS 7.6)》,下载链接:https://github.com/hortonworks/hbase-release/archive/HDP-3.0.0.0-1634-tag.tar.gz。Phoenix、Hadoop、Hbase编译好后的tar.gz包放到文件服务器上,在编译ambari的时候,修改ambari-metrics/pom.xml中这三个tar.gz下载地址为我们的文件服务器地址。
ambari移植 - 图1

编译container-executor/test-container-executor

请参考《Hadoop 3.1.1 移植指南(CentOS 7.6)》。

编译安装Grafana

下载grafana-2.6.0安装包。
wget https://github.com/grafana/grafana/archive/v2.6.0.tar.gz

解压安装包。
tar -zxf v2.6.0.tar.gz
mv v2.6.0 grafana-2.6.0

搭建好golang环境,并将源码移动到“GOPATH”目录下的“src”目录。
mv grafana-2.6.0 ${GOPATH}/src/

拷贝grafana-2.6.0项目编译过程中本身的依赖到src对应目录。
cd ${GOPATH}/src/grafana-2.6.0
$mkdir -p ../github.com/grafana/grafana/pkg
$cp pkg/* ../github.com/grafana/grafana/pkg/ -rf

执行后端编译。
go run build.go setup
go run build.go build

跳过phantomjs报错(因为系统中已安装),执行前端编译。
npm config set proxy http://{代理ip}:{代理端口}
npm config set https-proxy http://{代理ip}:{代理端口}
npm config set registry “http://registry.npmjs.org/
npm config set strict-ssl false
npm install(可以去掉,只安装与grunt-cli相关的)
npm install -g grunt-cli
grunt —force

拷贝phantomjs可执行文件到相应目录,打包时将自动将phantomjs打包到grafana的rpm包中。
cp /opt/tools/phantomjs/phantomjs/bin/phantomjs vendor/phantomjs/

打包。
go run build.go package

说明:
如果打包出现错误,请参考问题26,采用如下命令打包:
./node_modules/grunt-cli/bin/grunt release —force

最终结果将会生成到tmp目录,直接对tmp目录进行压缩。
mv tmp grafana-2.6.0
tar -zcf grafana-2.6.0.tar.gz grafana-2.6.0

六、编译Ambari

编译前配置

下载源码。
wget https://github.com/hortonworks/ambari-release/archive/AMBARI-2.7.3.0-139-tag.tar.gz

须知:
如果wget下载时报无法验证github.com颁发的证书错误,可在wget命令后面跟参数—no-check-certificate。

解压源码。
tar -zxf AMBARI-2.7.3.0-139-tag.tar.gz
mv ambari-release-AMBARI-2.7.3.0-139-tag /opt/tools/installed

设置环境变量。
export PHANTOMJS_ARCH=”arm64”
git config —global http.sslverify false

修改CPU架构。
参考问题27,将所有pom.xml文件中的“needarch”值,从“x86_64”和“noarch”改为“aarch64”。
image.png
说明:
若X86的rpm包中含有noarch类型,还需在X86服务器上重新编译源码,将所有“needarch”值改为“x86_64”,再重新生成rpm包,从而更好地支持Ambari的X86和泰山服务器混合部署。

将安装nodejs中下载的node-v8.6.0-linux-arm64.tar.gz和v4.5版nodejs移动到maven本地仓。
mkdir -p /root/.m2/repository/com/github/eirslett/node/8.6.0/
mkdir -p /root/.m2/repository/com/github/eirslett/node/4.5.0/
cp node-v8.6.0-linux-arm64.tar.gz /root/.m2/repository/com/github/eirslett/node/8.6.0/
wget http://nodejs.org/dist/v4.5.0/node-v4.5.0-linux-arm64.tar.gz —no-check-certificate
cp node-v4.5.0-linux-arm64.tar.gz /root/.m2/repository/com/github/eirslett/node/4.5.0/

下载yarn到maven本地仓。
wget https://github.com/yarnpkg/yarn/releases/download/v1.1.0/yarn-v1.1.0.tar.gz —no-check-certificate
wget https://github.com/yarnpkg/yarn/releases/download/v0.23.2/yarn-v0.23.2.tar.gz —no-check-certificate
mkdir /root/.m2/repository/com/github/eirslett/yarn/1.1.0/
mkdir /root/.m2/repository/com/github/eirslett/yarn/0.23.2/yarn-0.23.2./
cp yarn-v1.1.0.tar.gz /root/.m2/repository/com/github/eirslett/yarn/1.1.0/yarn-1.1.0.tar.gz
cp yarn-v0.23.2.tar.gz /root/.m2/repository/com/github/eirslett/yarn/0.23.2/yarn-0.23.2./yarn-v0.23.2.tar.gz

设置yarn取消ssl验证。
在非编译目录执行。
tar -zxf yarn-v0.23.2.tar.gz
cd yarn-v0.23.2
./yarn config set strict-ssl false

回到上一层目录
cd -

配置npm代理。
npm config set strict-ssl false
npm config set registry http://registry.npmjs.org/

须知:
##若配置网络代理需执行
npm config set proxy http://{代理ip}:{代理端口}
npm config set https-proxy http://{代理ip}:{代理端口}

修改ambari-web/package.json,将phantomjs版本修改为 2.1.1。
vim /opt/tools/installed/ambari-release-AMBARI-2.7.3.0-139-tag/ambari-web/package.json
vim /opt/tools/installed/ambari-release-AMBARI-2.7.3.0-139-tag/ambari-web/node_modules/mocha-phantomjs/package.json

修改ambari-metrics/pom.xml 中仓库地址。
vim /opt/tools/installed/ambari-release-AMBARI-2.7.3.0-139-tag/ambari-metrics/pom.xml

将hbase,hadoop,grafana,Phoenix地址和文件名修改成提供的地址和相应版本。
说明:
这里用本地搭建的源作为示例。

    <hbase.tar>http://192.168.1.91/packages/tar/hbase-2.0.0.3.0.0.0-1634-bin.tar.gz</hbase.tar>
    <hbase.folder>hbase-2.0.0.3.0.0.0-1634</hbase.folder>
    <hadoop.tar>http://192.168.1.91/packages/tar/hadoop-3.1.0.3.0.0.0-1634.tar.gz</hadoop.tar>
    <hadoop.folder>hadoop-3.1.0.3.0.0.0-1634</hadoop.folder>
    <grafana.folder>grafana-2.6.0</grafana.folder>
    <grafana.tar>http://192.168.1.91/packages/tar/grafana-2.6.0.tar.gz</grafana.tar>
    <phoenix.tar>http://192.168.1.91/packages/tar/phoenix-5.0.0.3.0.0.0-1634.tar.gz</phoenix.tar>

修改ambari-metrics/pom.xml中hdp的url为http://repo.hortonworks.com/content/repositories/releases
将以下标签中url改为http://repo.hortonworks.com/content/repositories/releases

<repository>
      <id>apache-hadoop</id>
      <name>hdp</name>
      <url>http://repo.hortonworks.com/content/repositories/releases</url>
 </repository>

修改ambari-metrics/pom.xml中https开头的域名改为http(可选,配置代理时需要)。

<grafana.tar>https://grafanarel.s3.amazonaws.com/builds/grafana-2.6.0.linux-x64.tar.gz</grafana.tar>
    <phoenix.tar>http://dev.hortonworks.com.s3.amazonaws.com/HDP/centos7/3.x/BUILDS/3.0.0.0-1634/tars/phoenix/phoenix-5.0.0.3.0.0.0-1634.tar.gz</phoenix.tar>
    <phoenix.folder>phoenix-5.0.0.3.0.0.0-1634</phoenix.folder>
    <resmonitor.install.dir>/usr/lib/python2.6/site-packages/resource_monitoring</resmonitor.install.dir>
    <powermock.version>1.6.2</powermock.version>
    <distMgmtSnapshotsId>apache.snapshots.https</distMgmtSnapshotsId>
    <distMgmtSnapshotsName>Apache Development Snapshot Repository</distMgmtSnapshotsName>
    <distMgmtSnapshotsUrl>https://repository.apache.org/content/repositories/snapshots</distMgmtSnapshotsUrl>
    <distMgmtStagingId>apache.staging.https</distMgmtStagingId>
    <distMgmtStagingName>Apache Release Distribution Repository</distMgmtStagingName>
    <distMgmtStagingUrl>https://repository.apache.org/service/local/staging/deploy/maven2</distMgmtStagingUrl>
    <fasterxml.jackson.version>2.9.5</fasterxml.jackson.version>
  </properties>
  <distributionManagement>
    <repository>
      <id>${distMgmtStagingId}</id>
      <name>${distMgmtStagingName}</name>
      <url>${distMgmtStagingUrl}</url>
    </repository>
    <snapshotRepository>
      <id>${distMgmtSnapshotsId}</id>
      <name>${distMgmtSnapshotsName}</name>
      <url>${distMgmtSnapshotsUrl}</url>
    </snapshotRepository>
  </distributionManagement>
  <repositories>
    <repository>
      <id>apache-hadoop</id>
      <name>hdp</name>
      <url>http://nexus-private.hortonworks.com/nexus/content/groups/public</url>
    </repository>
    <repository>
      <id>apache-snapshots</id>
      <name>snapshots</name>
      <url>https://repository.apache.org/content/repositories/snapshots</url>

“ambari-infra/ambari-infra-solr-client/build.xml”中添加代理(可选,若设置代理)。
vim /opt/tools/installed/ambari-release-AMBARI-2.7.3.0-139-tag/ambari-infra/ambari-infra-solr-client/build.xml
project标签中添加

<setproxy proxyhost="{代理ip}" proxyport="{代理端口}" />

修改“ambari-admin/src/main/resources/ui/admin-web/package.json ”中karma-phantomjs-launcher为1.0。
vim /opt/tools/installed/ambari-release-AMBARI-2.7.3.0-139-tag/ambari-admin/src/main/resources/ui/admin-web/package.json

{
  "name": "adminconsole",
  "version": "0.0.0",
  "dependencies": {},
  "devDependencies": {
    "bower": "1.3.8",
    "gulp": "^3.8.8",
    "gulp-add-src": "^0.2.0",
    "gulp-autoprefixer": "0.0.7",
    "gulp-cache": "0.1.1",
    "gulp-clean": "0.2.4",
    "gulp-concat": "2.6.0",
    "gulp-filter": "0.4.1",
    "gulp-flatten": "0.0.2",
    "gulp-load-plugins": "0.5.0",
    "gulp-order": "1.1.1",
    "gulp-plumber": "1.1.0",
    "gulp-size": "0.3.0",
    "gulp-uglify": "0.2.1",
    "gulp-useref": "0.4.2",
    "http-server": "0.6.1",
    "karma": "0.12.16",
    "karma-chrome-launcher": "0.1.4",
    "karma-jasmine": "0.1.5",
    "karma-ng-html2js-preprocessor": "^0.1.0",
    "karma-phantomjs-launcher": "1.0",
    "phantomjs": "^2.1.7",
    "protractor": "1.0.0"
  },

须知:

  1. json格式注意用逗号分开。
  2. 如果需要通过代理访问网络,则修改./ambari-admin/src/main/resources/ui/admin-web/.bowerrc。

vim /opt/tools/installed/ambari-release-AMBARI-2.7.3.0-139-tag/ambari-admin/src/main/resources/ui/admin-web/.bowerrc

添加”strict-ssl”: false,和”https-proxy”:

{
    "directory": "app/bower_components",
    "strict-ssl": false,
    "https-proxy":"http://{代理ip}:{代理端口}",
}

修改 “ambari-infra/pom.xml”中https开头的域名改为http(可选,配置代理时需要)。
vim /opt/tools/installed/ambari-release-AMBARI-2.7.3.0-139-tag/ambari-infra/pom.xml

<issueManagement>
    <system>jira</system>
    <url>https://issues.apache.org/jira/browse/AMBARI</url>
  </issueManagement>

  <repositories>
    <repository>
      <id>apache-hadoop</id>
      <name>hdp</name>
      <url>http://repo.hortonworks.com/content/groups/public/</url>
    </repository>
    <repository>
      <id>oss.sonatype.org</id>
      <name>OSS Sonatype Staging</name>
      <url>https://oss.sonatype.org/content/groups/staging</url>
    </repository>
    <repository>
      <id>spring-milestones</id>
      <name>Spring Milestones</name>
      <url>http://repo.spring.io/milestone</url>
      <snapshots>
        <enabled>false</enabled>
      </snapshots>
    </repository>
    <repository>
      <id>ASF Staging</id>
      <url>https://repository.apache.org/content/groups/staging/</url>
    </repository>
    <repository>
      <id>ASF Snapshots</id>
      <url>https://repository.apache.org/content/repositories/snapshots/</url>
      <snapshots>
        <enabled>true</enabled>
      </snapshots>
      <releases>
        <enabled>false</enabled>
      </releases>
    </repository>
  </repositories>

执行grep -rn “oss.sonatype” 将查找出的所有pom中的该maven仓库注释掉。

[root@Namenode2 ambari-release-AMBARI-2.7.3.0-139-tag]#  grep -rn "oss\.sonatype"
ambari-infra/pom.xml:63:      <id>oss.sonatype.org</id>
ambari-infra/pom.xml:65:      <url>https://oss.sonatype.org/content/groups/staging</url>
ambari-logsearch/pom.xml:81:      <id>oss.sonatype.org</id>
ambari-logsearch/pom.xml:83:      <url>https://oss.sonatype.org/content/groups/staging</url>
ambari-server/pom.xml:1851:      <id>oss.sonatype.org</id>
ambari-server/pom.xml:1853:      <url>https://oss.sonatype.org/content/groups/staging</url>
ambari-serviceadvisor/pom.xml:62:      <id>oss.sonatype.org</id>
ambari-serviceadvisor/pom.xml:64:      <url>https://oss.sonatype.org/content/groups/staging</url>
pom.xml:107:      <id>oss.sonatype.org</id>
pom.xml:109:      <url>https://oss.sonatype.org/content/groups/staging</url>

示例:
[root@Namenode2 ambari-release-2.7.3]# vim ambari-infra/pom.xml、
注释整个标签

<!--
    <repository>
      <id>oss.sonatype.org</id>
      <name>OSS Sonatype Staging</name>
      <url>https://oss.sonatype.org/content/groups/staging</url>
    </repository>
-->

将所有https://repository.apache.org/content/repositories/snapshots/改为http://repository.apache.org/content/repositories/snapshots/
执行
grep -rn “repository.apache.org”

[root@Namenode2 ambari-release-2.7.3]#  grep -rn "repository.apache.org"
ambari-infra/pom.xml:77:      <url>https://repository.apache.org/content/groups/staging/</url>
ambari-infra/pom.xml:81:      <url>https://repository.apache.org/content/repositories/snapshots/</url>
ambari-logsearch/pom.xml:95:      <url>https://repository.apache.org/content/groups/staging/</url>
ambari-logsearch/pom.xml:99:      <url>https://repository.apache.org/content/repositories/snapshots/</url>
ambari-metrics/pom.xml:55:    <distMgmtSnapshotsUrl>https://repository.apache.org/content/repositories/snapshots</distMgmtSnapshotsUrl>
ambari-metrics/pom.xml:58:    <distMgmtStagingUrl>https://repository.apache.org/service/local/staging/deploy/maven2</distMgmtStagingUrl>
ambari-metrics/pom.xml:82:      <url>https://repository.apache.org/content/repositories/snapshots</url>
pom.xml:59:    <distMgmtSnapshotsUrl>https://repository.apache.org/content/repositories/snapshots</distMgmtSnapshotsUrl>
pom.xml:62:    <distMgmtStagingUrl>https://repository.apache.org/service/local/staging/deploy/maven2</distMgmtStagingUrl>
pom.xml:121:      <url>https://repository.apache.org/content/groups/staging/</url>
pom.xml:125:      <url>https://repository.apache.org/content/repositories/snapshots/</url>

示例:
vim ambari-infra/pom.xml
修改url标签中地址

<repository>
  <id>ASF Snapshots</id>
  <url>http://repository.apache.org/content/repositories/snapshots/</url>
  <snapshots>
    <enabled>true</enabled>
  </snapshots>
  <releases>
    <enabled>false</enabled>
  </releases>
</repository>

编译执行

整体编译。
mvn -B install package rpm:rpm -DnewVersion=2.7.3.0.0 -DskipTests -Dmaven.test.skip=true -Drat.numUnapprovedLicenses=1000 -Dpython.ver=”python>=2.6” -Drat.skip -Dcheckstyle.skip

编译各个模块。
mvn clean package -Dbuild-rpm -Dmaven.test.skip=true -DskipTests -Drat.numUnapprovedLicenses=1000 -Dpython.ver=”python>=2.6”

整体编译各个模块并没有生成有效大小的rpm包,需要进入子目录,单独编译各个模块,最终将生成如下大小正常的rpm包。
image.png
说明:
编译过程中遇到的任何问题可参考故障排除。

七、故障排除

问题1:cannot access org.json.simple.JSONAware

现象描述
编译过程中提示“cannot access org.json.simple.JSONAware”。
ambari移植 - 图4
处理步骤
修改“ambari-metrics/ambari-metrics-storm-sink-legacy/pom.xml”文件,将JSONAware对应的jar包加入到dependency中去。
ambari移植 - 图5

问题2:cannot find symbol HBaseTestingUtility

现象描述
编译过程中提示“cannot find symbol HBaseTestingUtility”。
ambari移植 - 图6
处理步骤
目前采用直接跳过tests的编译和运行方法,编译命令中加上如下参数:
-Dmaven.test.skip=true -DskipTests

问题3:Could not find artifact org.apache.zookeeper:zookeeper:jar: 3.4.6.2.3.0.0-2557

现象描述
编译过程中提示“Could not find artifact org.apache.zookeeper:zookeeper:jar: 3.4.6.2.3.0.0-2557”。
ambari移植 - 图7
可能原因
仓库里面不存在该jar包,需要放到cmss.arm仓。
处理步骤
从honorworks官网下载该jar包,暂时放到本地仓。
mkdir -p repo/org/apache/zookeeper/zookeeper/3.4.6.2.3.0.0-2557/
cp zookeeper-3.4.6.2.3.0.0-2557.jar repo/org/apache/zookeeper/zookeeper/3.4.6.2.3.0.0-2557/

问题4:java.net.UnknownHostException: central.maven.org

现象描述
编译过程中提示“java.net.UnknownHostException: central.maven.org”。
ambari移植 - 图8
处理步骤
需要下载两个jar包:lucene-core-6.6.2.jar和lucene-backward-codecs-6.6.2.jar。

  1. 手动下载两个jar包。wget http://central.maven.org/maven2/org/apache/lucene/lucene-core/6.6.2/lucene-core-6.6.2.jar
    wget http://central.maven.org/maven2/org/apache/lucene/lucene-backward-codecs/6.6.2/lucene-backward-codecs-6.6.2.jar
  2. 放到本地和搭建的maven仓中。mkdir -p /data01/repo/org/apache/lucene/lucene-core/6.6.2/
    mkdir -p /data01/repo/org/apache/lucene/lucene-backward-codecs/6.6.2/
    cp lucene-core-6.6.2.jar /data01/repo/org/apache/lucene/lucene-core/6.6.2/
    cp lucene-backward-codecs-6.6.2.jar /data01/repo/org/apache/lucene/lucene-backward-codecs/6.6.2/
  3. 修改ambari-infra/ambari-infra-solr-client/pom.xml文件,改为本地路径或者文件服务器路径。下图中修改成了本地路径:ambari移植 - 图9

    问题5:yarn下载大概541个tgz包,通过代理无法下载

    现象描述
    ambari-web提示yarn下载大概541个tgz包,通过代理无法下载。
    处理步骤

  4. 整理出ambari-web模块中的yarn.lock文件中的tgz包下载地址。grep -r “resolved” ambari-web/yarn.lock | awk -F “ “ ‘{print $2}’ | awk -F “#” ‘{print $1}’ | awk -F “\”” ‘{print $2}’ > /home/tools/yarn/yarn.download

  5. 利用wget下载。cd /home/tools/yarn
    wget cat yarn.download —no-check-certificate
  6. 设置yarn的本地镜像路径。yarn config set yarn-offline-mirror /home/tools/yarn/
  7. 将下载的tgz放到“/home/tools/yarn”目录。

    问题6:单独编译ambari-infra模块出现无法下载压缩包

    现象描述
    单独编译ambari-infra模块时提示“java.net.UnknownHostException: public-repo-1.hortonworks.com”,无法下载solr-7.4.0.tgz。
    ambari移植 - 图10
    处理步骤
    手动下载,然后放到内网文件服务器上。

  8. 手动下载solr-7.4.0.tgz并放到本地目录。wget http://public-repo-1.hortonworks.com/ARTIFACTS/dist/lucene/solr/7.4.0/solr-7.4.0.tgz

  9. 修改“ambari-infra-assembly/pom.xml”文件:ambari移植 - 图11

    问题7:无法下载commons-fileupload-1.3.3.jar

    现象描述
    编译过程中无法下载commons-fileupload-1.3.3.jar。
    ambari移植 - 图12
    处理步骤

  10. 下载commons-fileupload-1.3.3.jar。wget http://central.maven.org/maven2/commons-fileupload/commons-fileupload/1.3.3/commons-fileupload-1.3.3.jar

  11. 放到创建的maven仓,目前暂时放到本地仓。cp commons-fileupload-1.3.3.jar repo/commons-fileupload/commons-fileupload/1.3.3/
  12. 修改ambari-infra-assembly/pom.xml文件;ambari移植 - 图13

    问题8:仓库中找不到ring-cors-0.1.5.jar

    现象描述
    仓库中找不到ring-cors-0.1.5.jar。
    处理步骤
    从maven仓库中手动下载下来,放到本地仓库和搭建的maven仓库中。

    问题9:org.apache.storm:storm-core:jar:0.10.0.2.3.0.0-2557找不到

    现象描述
    编译过程中提示“org.apache.storm:storm-core:jar:0.10.0.2.3.0.0-2557”找不到。
    ambari移植 - 图14
    处理步骤
    从maven或hornworks官网将该jar包下载下来,并替换到本地仓库和搭建的maven仓库中。

    问题10:缺少一大堆jar包

    现象描述
    编译过程中提示缺少一大堆jar包。
    ambari移植 - 图15
    处理步骤
    从maven或hornworks官网将这些jar包下载下来,并替换到本地仓库和搭建的maven仓库中。
    wget https://repo.spring.io/plugins-release/org/apache/zookeeper/zookeeper/3.4.5.1.3.0.0-107/zookeeper-3.4.5.1.3.0.0-107.jar
    wget https://repo.spring.io/plugins-release/org/apache/phoenix/phoenix-core/5.0.0.3.0.0.0-1634/phoenix-core-5.0.0.3.0.0.0-1634.jar
    wget https://repo.spring.io/plugins-release/org/apache/hadoop/hadoop-common/3.1.0.3.0.0.0-1634/hadoop-common-3.1.0.3.0.0.0-1634.jar
    wget https://repo.spring.io/plugins-release/org/apache/hadoop/hadoop-common/3.1.0.3.0.0.0-1634/hadoop-common-3.1.0.3.0.0.0-1634-tests.jar
    wget https://repo.spring.io/plugins-release/org/apache/hadoop/hadoop-annotations/3.1.0.3.0.0.0-1634/hadoop-annotations-3.1.0.3.0.0.0-1634.jar
    wget https://repo.spring.io/plugins-release/org/apache/hadoop/hadoop-yarn-common/3.1.0.3.0.0.0-1634/hadoop-yarn-common-3.1.0.3.0.0.0-1634.jar
    wget https://repo.spring.io/plugins-release/org/apache/hadoop/hadoop-yarn-common/3.1.0.3.0.0.0-1634/hadoop-yarn-common-3.1.0.3.0.0.0-1634-tests.jar
    wget https://repo.spring.io/plugins-release/org/apache/hadoop/hadoop-yarn-api/3.1.0.3.0.0.0-1634/hadoop-yarn-api-3.1.0.3.0.0.0-1634.jar
    wget https://repo.spring.io/plugins-release/org/apache/hadoop/hadoop-yarn-server-common/3.1.0.3.0.0.0-1634/hadoop-yarn-server-common-3.1.0.3.0.0.0-1634.jar
    wget https://repo.spring.io/plugins-release/org/apache/phoenix/phoenix-core/5.0.0.3.0.0.0-1634/phoenix-core-5.0.0.3.0.0.0-1634-tests.jar
    wget https://repo.spring.io/plugins-release/org/apache/hbase/hbase-it/2.0.0.3.0.0.0-1634/hbase-it-2.0.0.3.0.0.0-1634-tests.jar
    wget https://repo.spring.io/plugins-release/org/apache/hbase/hbase-testing-util/2.0.0.3.0.0.0-1634/hbase-testing-util-2.0.0.3.0.0.0-1634.jar
    wget https://repo.spring.io/plugins-release/org/apache/ignite/ignite-core/2.1.0/ignite-core-2.1.0.jar
    wget https://repo.spring.io/plugins-release/org/apache/ignite/ignite-log4j/2.1.0/ignite-log4j-2.1.0.jar

    问题11:无法下载hbase、hadoop、phoenix三个压缩包

    现象描述
    无法下载hbase、hadoop、phoenix三个压缩包。
    处理步骤

  13. 然后修改ambari-metrics/pom.xml文件中如下的压缩包路径为本地路径,并修改版本号。修改前:
    ambari移植 - 图16
    修改后:
    ambari移植 - 图17

  14. 修改ambari-metrics-timelineservice/pom.xml中的hadoop、hbase、phoenix版本号。修改前:
    ambari移植 - 图18
    修改后:
    ambari移植 - 图19

    问题12:多类找不到的错误

    现象描述
    编译过程中提示“package org.apache.hadoop.hbase does not exist”、“package org.apache.commons.lang3 does not exist”、“javax.cache.expiry.Duration does not exist”等多类找不到的错误。
    ambari移植 - 图20
    处理步骤

  15. 将hbase-client-2.0.0.3.0.0.0-1634.jar的引用放到ambari-metrics-timelineservice/pom.xml文件的dependency中去。下载:wget https://repo.spring.io/plugins-release/org/apache/hbase/hbase-client/2.0.0.3.0.0.0-1634/hbase-client-2.0.0.3.0.0.0-1634.jar
    并放到本地仓库和搭建的Maven仓库中
    pom.xml修改后:
    ambari移植 - 图21

  16. 修改ambari-metrics-timelineservice/pom.xml文件。修改前:
    ambari移植 - 图22
    修改后:
    ambari移植 - 图23
  17. ambari-metrics-timelineservice/pom.xml文件中增加cache-api.jar的dependency。下载并更新到本地和搭建的maven仓库中:
    *wget https://repo.spring.io/plugins-release/javax/cache/cache-api/1.1.1/cache-api-1.1.1.jar

    pom.xml修改后:
    ambari移植 - 图24

    问题13:ambari-release-2.7.3/ambari-web/node_modules/mocha-phantomjs/node_modules/phantomjs: Command failed

    现象描述
    ambari-release-2.7.3/ambari-web/node_modules/mocha-phantomjs/node_modules/phantomjs: Command failed
    Downloading https://bitbucket.org/ariya/phantomjs/downloads/phantomjs-1.9.7-linux-i686.tar.bz2
    ambari移植 - 图25
    可能原因
    查看ambari-web目录下的yarn.lock文件,发现mocha-phantomjs使用的phantomjs版本是1.9.7-15:
    ambari移植 - 图26
    而此版本里面的phantomjs.js文件里面的export.version=1.9.7:
    ambari移植 - 图27
    版本不一致导致重新下载。
    处理步骤

  18. 修改本地文件mocha-phantomjs-4.1.0.tgz包中的package.json文件的39行,修改为:“2.1.1”,并重新压缩,获取sha1sum的值。ambari移植 - 图28

  19. 修改ambari-web/yarn.lock文件,将phantomjs版本改为“~2.1.0”,并修改后面的sha1sum的值,否则会报“error Bad hash. Expected “c6910f67935c37285b6114329fc2f27d5f3e3134” but got “82d511fe30d6025de4f4fa70e58c96a74f93fe3a””之类的错误:ambari移植 - 图29
    ambari移植 - 图30说明:
    该文件中必须有phantomjs对应的版本(如下图)才可修改版本,否则会重新下载对应版本的下载包。
    无法访问对应网址的话,会try 4次,并且报错:
    ambari移植 - 图31
  20. 替换掉本地的yarn目录下的tgz包,重新编译。ambari移植 - 图32说明:
    可让服务器不联网,即可使用本地的tgz和phantomjs包。

    问题14:PhantomJS not found on PATH

    现象描述
    error /home/ambari/ambari-release-2.7.3/ambari-web/node_modules/phantomjs-prebuilt: Command failed
    ambari移植 - 图33
    处理步骤
    需要参考安装Phantomjs编译好pantomjs,并配置好环境变量。

    yarn config set yarn-offline-mirror /home/tools/yarn
    export PATH=/home/tools/phantomjs/bin/:/home/ambari/ambari-release-2.7.3/ambari-web/node/:/home/ambari/ambari-release-2.7.3/ambari-web/node/yarn/dist/bin/:/home/tools/node-v4.5.0-linux-arm64/bin:$PATH
    export PHANTOMJS_ARCH="arm64"
    

    问题15:Error:Invalid operands (UND and UND sections) for ‘*’错误

    现象描述
    编译phantomjs报错:Error:Invalid operands (UND and UND sections) for ‘‘错误。
    ambari移植 - 图34
    *处理步骤

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

    问题16:aarch64生成的目标文件和X86的差别大

    现象描述
    aarch64生成的目标文件和X86的差别大,只有三个文件有效,下面是X86的六个包和大小。
    ambari移植 - 图35
    可能原因
    整体编译通过后,需要单独打包各个模块才能生成正常的rpm包。
    处理步骤
    参考编译执行进行整体编译和各个子模块单独编译出包。

    问题17:PhantomJS detected, but wrong version 2.1.1 @ /home/tools/phantomjs/phantomjs-2.1.1/bin/phantomjs

    现象描述

    npm ERR! argv "/home/ambari/ambari-release-2.7.3/ambari-admin/src/main/resources/ui/admin-web/node/node" "/home/ambari/ambari-release-2.7.3/ambari-admin/src/main/resources/ui/admin-web/node/node_modules/npm/bin/npm-cli.js" "install" "--unsafe-perm"
    Failed at the phantomjs@1.9.20 install script 'node install.js'.
    

    image.png
    处理步骤

  21. 执行以下命令。npm config rm proxy
    npm config rm http-proxy
    npm config rm https-proxy
    npm config set no-proxy .huawei.com
    npm config set registry http://registry.npmjs.org/
    npm install karma-phantomjs-launcher

  22. 修改ambari-admin/src/main/resources/ui/admin-web/package.json文件,将26行改为1.0,此版本依赖phantomjs2.1.1。

ambari移植 - 图37

问题18:UNABLE_TO_VERIFY_LEAF_SIGNATURE Request to https://registry.bower.io/packages/angular-animate failed: unable to verify the first certificate

现象描述

UNABLE_TO_VERIFY_LEAF_SIGNATURE Request to https://registry.bower.io/packages/angular-animate failed: unable to verify the first certificate

ambari移植 - 图38
处理步骤

  1. “ambari-admin/src/main/resources/ui/admin-web/.bowerrc”文件中增加如下内容(增加一个禁止使用ssl的选项),注意多行用逗号分隔:ambari移植 - 图39
  2. 修改“ambari-admin/src/main/resources/ui/admin-web/node_modules/bower/node_modules/bower-config/lib/util/defaults.js”文件的24行,将https改为http:ambari移植 - 图40

    问题19:ECMDERR Failed to execute “git ls-remote —tags —heads https://github.com/twbs/bootstrap.git”, exit code of

    现象描述

    fatal: unable to access 'https://github.com/twbs/bootstrap.git/': Peer's Certificate issuer is not recognized.
    

    ambari移植 - 图41
    处理步骤

  3. 运行下面的命令:$git config —global http.sslverify false

  4. 单独运行该命令“git ls-remote —tags —heads https://github.com/twbs/bootstrap.git”通过,再次执行编译命令通过。

    问题20:打ambari-metrics中的rpm包出错

    现象描述

    error: line 7: Dependency tokens must begin with alpha-numeric, '_' or '/': Requires: python >=2.6
    

    ambari移植 - 图42
    处理步骤
    将编译命令的python >=2.6参数去掉。

    问题21:Could not download Node.js

    现象描述

    Could not download Node.js: Could not download https://nodejs.org/dist/v8.6.0/node-v8.6.0-linux-arm64.tar.gz: Unknown host nodejs.org: Name or service not known
    

    ambari移植 - 图43
    处理步骤

  5. 手动下载。wget https://nodejs.org/dist/v8.6.0/node-v8.6.0-linux-arm64.tar.gz

  6. 放到提示的本地仓库和搭建的maven仓库中。cp localfiles/node-v8.6.0-linux-arm64.tar.gz repo/com/github/eirslett/node/8.6.0/node-8.6.0-linux-arm64.tar.gz

    问题22:Could not download Yarn

    现象描述
    Could not download Yarn: Could not download https://github.com/yarnpkg/yarn/releases/download/v1.1.0/yarn-v1.1.0.tar.gz: Unknown host github.com: Name or service not known
    ambari移植 - 图44
    处理步骤

  7. 手动下载。wget https://github.com/yarnpkg/yarn/releases/download/v1.1.0/yarn-v1.1.0.tar.gz

  8. 放到提示的本地仓库和搭建的maven仓库中。cp localfiles/yarn-v1.1.0.tar.gz repo/com/github/eirslett/yarn/1.1.0/yarn-1.1.0.tar.gz

    问题23:error An unexpected error occurred

    现象描述

    error An unexpected error occurred: "https://registry.yarnpkg.com/@angular/http/-/http-4.4.3.tgz: unable to verify the first certificate"
    

    ambari移植 - 图45
    可能原因
    “/home/ambari/ambari-release-2.7.3/ambari-web/node/yarn/dist/bin/yarn”使用的yarn是0.23.2版本,而logsearch-web使用的是1.1.0的版本。
    处理步骤

  9. 重新设置PATH环境变量。

    export PATH=/home/ambari/ambari-release-2.7.3/ambari-logsearch/ambari-logsearch-web/target/webapp-build/node/:/home/ambari/ambari-release-2.7.3/ambari-logsearch/ambari-logsearch-web/target/webapp-build/node/yarn/dist/bin/:$PATH
    
  10. 整理需要下载的压缩包文件。grep -r “resolved” ambari-logsearch/ambari-logsearch-web/yarn.lock | awk -F “ “ ‘{print $2}’ | awk -F “#” ‘{print $1}’ | awk -F “\”” ‘{print $2}’> /home/tools/yarn-logsearch/yarn-logsearch-download.log

  11. 下载压缩包文件。cd /home/tools/yarn-logsearch/
    wget cat yarn-logsearch-download.txt —no-check-certificate
  12. 拷贝到yarn目录(和ambari-web中下载的tgz包一个目录)。\cp *.tgz ../yarn/
  13. 设置yarn的本地镜像路径。yarn config set yarn-offline-mirror /home/tools/yarn/
    yarn config set registry /home/tools/yarn
    yarn config set strict-ssl true
  14. 共下载了1082个tgz包,拷贝到设置的yarn本地镜像路径后,再次启动编译。

    问题24:提示未设置phantomjs的bin的环境变量

    现象描述
    Grafana2.6.0打包报错,提示未设置phantomjs的bin的环境变量:

    No binary for PhantomJS browser on your platform, Please, set "PHANTOMJS_BIN" env variable.
    

    ambari移植 - 图46
    处理步骤
    export PHANTOMJS_BIN=/home/tools/phantomjs/phantomjs-2.1.1/bin/

    问题25:Grafana 2.6.0 打包错误(1)

    现象描述

    TypeError: Cannot read property 'prototype' of undefined
    Loading "grunt-karma.js" tasks...ERROR
    

    ambari移植 - 图47
    处理步骤
    npm install karma
    npm install grunt-karma

    问题26:Grafana 2.6.0 打包错误(2)

    现象描述

    /node_modules/grunt-cli/bin/grunt release
    Running "jshint:source" (jshint) task
    

    ambari移植 - 图48
    可能原因
    打包命令出错。
    处理步骤
    直接根据提示,用grunt命令加—force来进行打包。
    ./node_modules/grunt-cli/bin/grunt release —force

    问题27:rpm包名字是x86_64后缀

    现象描述
    ambari-agent-2.7.3.0-0.x86_64.rpm该模块生成的rpm包名字为X86_64,实际是aarch64版本。
    处理步骤

  15. 修改“ambari-agent/pom.xml”中304行为“aarch64”。ambari移植 - 图49

  16. 再次启动编译,生成正常名字的rpm包。ambari移植 - 图50

须知:ambari-server-2.7.3.0-0.x86_64.rpm同理修改,在aarch64机器上编译rpm包,所有涉及是noarch的地方,也改成aarch64,原因有二:

  1. rpm包里面有so或者二进制文件不是跨平台的;
  2. 混部需要3中类型的包:aarch64、x86_64、noarch,并且noarch的rpm包里面没有so或二进制文件。

    问题28:RPM build errors: Arch dependent binaries in noarch package

    现象描述
    生成noarch类型的rpm包可能会报此问题,默认需要在specs文件中增加下面的语句,但此时会用rpmbuild命令去生成rpm包了,而针对ambari来说,不需要生成noarch类型的rpm包。
    %define _binaries_in_noarch_packages_terminate_build 0
    处理步骤
    请参考问题27
  1. 修改needarch内容从“noarch”到“aarch64”。
  2. 重新编译。