建议使用以下浏览器,以获得最佳体验。 IE 9.0+以上版本 Chrome 31+ 谷歌浏览器 Firefox 30+ 火狐浏览器
请选择 进入手机版 | 继续访问电脑版
设置昵称

在此一键设置昵称,即可参与社区互动!

确定
我再想想
选择版块
标签
您还可以添加5个标签
  • 没有搜索到和“关键字”相关的标签
  • 云产品
  • 解决方案
  • 技术领域
  • 通用技术
  • 平台功能
取消

五湖四海@银河护卫队

发帖: 118粉丝: 43

级别 : 版主

发消息 + 关注

发表于2020年02月10日 21:16:47 962 1
直达本楼层的链接
楼主
显示全部楼层
[大数据] Tez-0.5.4移植指南 for 中标麒麟7.5【鲲鹏920(ARM64)】

 

1 CDH简介

CDHCloudera’s Distribution Including Apache Hadoop)是Cloudera的开源大数据平台,基于Web的用户界面,支持大多数Hadoop组件,包括HDFSMapReduceHivePigHbaseZookeeperSqoop,简化了大数据平台的安装、使用难度。

本文主要是描述如何将CDH 5.15.1x86版本中的Tez相关组件移植到TaiShan服务器上,包含编译部分。CDH的其他组件如果需要移植,也可以参考本文中描述的方法操作。

官方链接: https://tez.apache.org/

类别:大数据

语言: JAVA

2 软硬件环境

类别

子项

版本

获取地址(方法)

 

硬件

CPU

Kunpeng 920

iBMC

网络

Ethernet-10GE

iBMC

存储

SATA 4T

iBMC

内存

xxG   xxxMHz

iBMC

OS

NeoKylin

7.5

cat   /etc/neokylin-release

Kernel

4.14.0

cat   /proc/version

 

软件

GCC

4.8.5

gcc -v

Maven

3.5.4

参考下面安装说明

JDK

1.8.0_191

参考下面安装说明

Protoc

2.5.0

参考下面安装说明


3 编译环境准备

3.1 安装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/

【注】:使用系统自带Openjdk软件包可以通过执行“yum -y install java-1.8.0*进行安装然后参考如下步骤配置JAVA_HOME环境变量;

配置java环境变量,在/etc/profile文件末尾处增加下面的代码:

JAVA_HOME=/opt/tools/installed/jdk8u191-b12

PATH=$JAVA_HOME/bin:$PATH

export   JAVA_HOME PATH

运行下面命令,使修改的环境变量生效:

source   /etc/profile

3.2 安装GCC等依赖项

挂载OS镜像:

mount -o loop   /home/NeoKylin/nsV7Update5-adv-lic-build05-aarch64.iso /mnt/NeoKylin/

修改/etc/yum.repos.d/ns7-adv.repo文件,配置yum本地源:

[ns7-adv-os]

name=NeoKylin Linux Advanced Server 7 - Os

baseurl= file:///mnt/NeoKylin

gpgcheck=0

gpgkey=file:///mnt/NeoKylin/RPM-GPG-KEY-neokylin-release

enabled=1

        运行下面的命令,使yum源配置生效:

yum clean all

yum makecache

yum安装GCC等相关依赖:

sudo yum install -y snappy snappy-devel autoconf automake libtool   git gcc gcc-c++ make cmake openssl openssl-devel ncurses-devel zlib zlib-devel   bzip2 bzip2-devel bzip2-libs readline readline-devel bison zip unzip tar tcl java-1.8.0*   bison* ncurses*

3.3 安装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文件末尾增加下面高亮代码:

JAVA_HOME=/opt/tools/installed/jdk8u191-b12

M2_HOME=/opt/tools/installed/apache-maven-3.5.4

PATH=$M2_HOME/bin:$JAVA_HOME/bin:$PATH

export M2_HOME   JAVA_HOME PATH

运行下面的命令,是修改的环境变量生效:

source /etc/profile

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

配置文件路径:/opt/tools/installed/apache-maven-3.5.4/conf/settings.xml

本地仓库配置:(可选,可保持默认)

<!--默认在“~/.m2/”目录下,可以按下行格式修改成你自己想保存的目录-->

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

远程仓库配置:(可选,默认用maven2官方远程仓但访问慢,建议用国内maven仓)

<!--修改成自己搭建的maven仓库,如果没有,可以使用下面的华为开源maven -->

<mirror>
  <id>
huaweimaven</id>
  <name>
huaweicloud maven</name>
  <url>
https://mirrors.huaweicloud.com/repository/maven/</url>
  <mirrorOf>central</mirrorOf>
  </mirror>

配置代理:(可选,外网环境下不用配置maven的代理)

  <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>

3.4 gccg++c++增加-fsigned-char选项

1、对gcc增加-fsigned-char选项

1)使用which gcc命令寻找gcc所在路径(一般位于/usr/bin/gcc)

which gcc

2)更改gcc的名字(比如改成gcc-arm

mv /usr/bin/gcc   /usr/bin/gcc-arm

3)、进入gcc所在目录执行vi gcc,并填入如下内容保存:

#! /bin/sh

/usr/bin/gcc-arm -fsigned-char "$@"

cd /usr/bin/

vi gcc

4)、执行chmod +x gcc给脚本添加执行权限

chmod +x gcc

2、对g++增加-fsigned-char选项

1)使用which g++命令寻找g++所在路径(一般位于/usr/bin/g++)

which g++

2)更改g++的名字(比如改成g++-arm

mv /usr/bin/g++   /usr/bin/g++-arm

3)、进入g++所在目录执行vi g++,并填入如下内容保存:

#! /bin/sh

/usr/bin/g++-arm -fsigned-char "$@"

cd /usr/bin/

vi g++

4)、执行chmod +x g++给脚本添加执行权限

chmod +x g++

3、对c++增加-fsigned-char选项

1)使用which c++命令寻找g++所在路径(一般位于/usr/bin/c++)

which c++

2)更改c++的名字(比如改成c++-arm

mv /usr/bin/c++   /usr/bin/c++-arm

3)、进入c++所在目录执行vi c++,并填入如下内容保存:

#! /bin/sh

/usr/bin/c++-arm -fsigned-char "$@"

cd /usr/bin/

vi c++

4)、执行chmod +x c++给脚本添加执行权限

chmod +x c++

3.5 安装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

cd   protobuf-2.5.0

修改autogen.sh文件的第20-24行:

vi   autogen.sh

注释如下红框内注释内容并增加如下:

curl -L   https://github.com/google/googletest/archive/release-1.5.0.tar.gz | tar zx

mv googletest-release-1.5.0 gtest

protoc-1.PNG

打ARM补丁:

cp   protoc.patch ./src/google/protobuf/stubs/

cd   ./src/google/protobuf/stubs/

patch   -p1 < protoc.patch

cd   -

注:proctoc ARM补丁为protoc.patch.rar(从附件中解压获取);


        编译并安装到系统默认目录:

./autogen.sh   && ./configure CFLAGS='-fsigned-char' && make && make   install

3.6 编译安装Snappy 1.1.3

下载并解压源码:

wget   https://github.com/google/snappy/releases/download/1.1.3/snappy-1.1.3.tar.gz

tar   zxvf snappy-1.1.3.tar.gz

cd   snappy-1.1.3/

执行./configure进行编译配置:

./configure

        执行make进行编译:

make   -j32

        执行make install编译安装:

make   install

snappy-1.1.3-1.PNG

查看编译后的结果:

cd   /usr/local/lib

snappy-1.1.3-2.PNG

3.7 编译安装Hadoop-Snappy

通过git clone下载源码:

git   clone https://github.com/electrum/hadoop-snappy.git

修改src/main/native/Makefile.am文件:

vi   src/main/native/Makefile.am

根据如果红框内的内容进行修改

hadoop-snappy-1.PNG

         执行mvn package进行编译:

mvn   package

hadoop-snappy-2.PNG

         查看编译后的jar文件:

cd   target/hadoop-snappy-0.0.1-SNAPSHOT-tar/hadoop-snappy-0.0.1-SNAPSHOT/lib

hadoop-snappy-3.PNG

【注】:hadoop-snappy-0.0.1-SNAPSHOT.jar文件在hadoop-2.6.0-cdh5.15.1编译完成后,需将该文件拷贝到$HADOOP_HOME/lib库目录下

 

4 软件移植分析

1、使用checkSo工具(获取地址:https://bbs.huaweicloud.com/forum/thread-22679-1-1.html检查tez-0.5.4对应x86的安装包或源码包是否有依赖x86so文件,通过检查tez-0.5.4的源码apache-tez-0.5.4-src.tar.gz没有发现有依赖的x86架构的so文件。 


5 依赖库编译

5.1 编译snappy-java-1.0.4.1.jar

SnappyGoogle开源的压缩/解压缩库,snappy-java封装了其接口

1)从github网站下载源码并解压

wget https://codeload.github.com/xerial/snappy-java/tar.gz/snappy-java-1.0.4.1

mv snappy-java-1.0.4.1   snappy-java-1.0.4.1.tar.gz

tar -xzvf snappy-java-1.0.4.1.tar.gz

cd snappy-java-snappy-java-1.0.4.1

        2)修改Makefile文件中snappy源码的下载路径:

vi Makefile

snappy-java-1.0.4.1-1.PNG

注】因为默认的路径已经失效,需要如下使用新的下载路径:http://repository.timesys.com/buildsources/s/snappy/snappy-1.0.4/snappy-1.0.4.tar.gz

3)安装libstdc++-static-4.8.5-28.el7.ns7.02.aarch64.rpmglibc-static-2.17-222.el7.ns7.01.aarch64.rpm

wget http://download.cs2c.com.cn/neokylin/desktop/everything/7.0/aarch64/os/Packages/libstdc++-static-4.8.5-28.el7.ns7.02.aarch64.rpm

rpm -ivh   libstdc++-static-4.8.5-28.el7.ns7.02.aarch64.rpm

wget http://download.cs2c.com.cn/neokylin/desktop/everything/7.0/aarch64/os/Packages/glibc-static-2.17-222.el7.ns7.01.aarch64.rpm

rpm -ivh   glibc-static-2.17-222.el7.ns7.01.aarch64.rpm

4)执行make编译并查看编译后的snappy-java-1.0.4.1.jar

make

cd   target/

snappy-java-1.0.4.1-2.PNG

4)将编译后的snappy-java-1.0.4.1.jar覆盖到本地maven仓对应路径

cp   snappy-java-1.0.4.1.jar   /root/.m2/repository/org/xerial/snappy/snappy-java/1.0.4.1/

snappy-java-1.0.4.1-3.PNG 


6 Tez-0.5.4编译

6.1 下载源码

下载代码并解压:

wget   https://mirrors.tuna.tsinghua.edu.cn/apache/tez/0.5.4/apache-tez-0.5.4-src.tar.gz

tar -zxvf apache-tez-0.5.4-src.tar.gz

cd   apache-tez-0.5.4-src/

 

6.2 执行编译

执行编译并查看编译后的结果(每次编译前需要指定内存大小):

export MAVEN_OPTS="-Xms1024m -Xmx12G   -XX:PermSize=4096m"

mvn clean install -Phadoop-2 -DskipTests -Pdist   -Prelease,security,native,hadoop-snappy -Drat.numUnapprovedLicenses=200   -Dhadoop.profile=2.0 -Dhadoop-snappy.version=0.0.1-SNAPSHOT

cd tez-dist/target/

tez-1.PNG


6.3 注意

  1. 编译过程中遇到问题可以参考9 FAQ

  2. 第一次编译的时候会从远程maven仓库下载jar包到本地仓库,但是有几个jar包是X86的,所以在tez编译完成及第5章的jar包编译完成后,需要将第5章编译的jar包替换掉本地仓库中相应路径的jar包,然后重新编译一次tez。第二次编译会很快,所以不用担心。

     

7 验证

1、编译验证

使用checkSo工具(获取地址:https://bbs.huaweicloud.com/forum/thread-22679-1-1.html)检查编译后的tez-dist/target/tez-0.5.4.tar.gz中是否不再含有依赖的x86架构的so文件,检查方法参考工具中的 《CheckSo使用说明.docx》,如果还有依赖的x86架构的so文件,则需要继续完成对应jar包的编译,直到无依赖的x86架构的so文件后,再次编译该组件并通过checkSo工具检查确认,编译后的组件包不再有依赖的x86架构的so文件则表明编译成功。

通过checkSo工具检查tez-dist/target/路径下编译后的tez-0.5.4.tar.gz发现存在如下依赖的so文件:

tez-2.PNG

上图依赖库的编译见 5 依赖库编译 章节(需要编译snappy-java-1.0.4.1.jar),完成依赖库编译后需要重新编译前面编译包含依赖库的tez-0.5.4.tar.gz,直到编译后的tez-0.5.4.tar.gz通过checkSo工具检查不再有依赖so等文件

2、功能验证

暂无。

 

8 参考信息

    1. http://tez.apache.org/releases/apache-tez-0-5-4.html

    2. http://tez.apache.org/


9 FAQ

9.1 git clone报证书错误

9.1.1 问题现象

git-clone-1.PNG

9.1.2 解决方法

git config --global http."sslVerify" false

9.2 wget下载https链接报证书错误

9.2.1 问题现象

wget-1.PNG

9.2.2 解决方法

在下载命令后面跟参数--no-check-certificate

举报
分享

分享文章到朋友圈

分享文章到微博

五湖四海@银河护卫队

发帖: 118粉丝: 43

级别 : 版主

发消息 + 关注

发表于2020年04月24日 15:07:36
直达本楼层的链接
沙发
显示全部楼层

点赞 评论 引用 举报

游客

富文本
Markdown
您需要登录后才可以回帖 登录 | 立即注册