【華為雲技術分享】【鯤鵬來了】鯤鵬遷移過程案例分享


轉載自鯤鵬論壇

今天為大家分享的是一家專業從事工業互聯網關鍵技術,產品開發的全棧解決方案供應商,致力於工業制造直接的工業互聯網應用以及工業企業大數據服務為兩大核心業務,在進行鯤鵬遷移時,遇到的問題及經驗分享。

首先是大數據組件CDH的編譯安裝。CDH是用Java編寫的,默認配置是在x86的機器上運行,需要進行修改才能在鯤鵬雲服務器上運行。在修改過程中遇到不少坑,在這分享一下踩坑經歷,以供各位參考。

CDH是Apache Hadoop和相關項目的最完整,經過測試的流行發行版。 CDH提供了Hadoop的核心元素 - 可擴展的存儲和分布式計算 - 以及基於Web的用戶界面和重要的企業功能。 CDH是Apache許可的開放源碼,是唯一提供統一批處理,交互式SQL和交互式搜索以及基於角色的訪問控制的Hadoop解決方案。

環境信息:

類別

子項

版本

OS

CentOS

7.5

Kernel

4.14

 

軟件

CDH-hadoop

hadoop-2.6.0-cdh5.13.3

Maven

3.5.4

Ant

1.9.4

Git

1.8.3.1

GCC

4.8.5

Cmake

3.11.2

JDK

1.8

依賴安裝

yum -y install gcc-c++ autoconf   automake libtool cmake svn openssl-devel ncurses-devel

組件編譯安裝

下載安裝包

1、安裝jdk-1.8.0

參考《華為雲鯤鵬雲服務最佳實踐-JDK-1.8.0 安裝配置指南》

2、安裝Maven

簡介:通過一小段描述信息來管理項目的構建,報告和文檔的項目管理工具軟件。

安裝軟件:apache-maven-3.5.4-bin.tar.gz

wget     https://archive.apache.org/dist/maven/maven-3/3.5.4/binaries/apache-maven-3.5.4-bin.tar.gz

解壓

tar -zxvf apache-maven-3.5.4-bin.tar.gz -C   /opt/ClouderaHadoopTAR/

配置mvn的環境變量

1 vim/etc/profile
2 
3 export   M2_HOME=/opt/ClouderaHadoopTAR/apache-maven-3.5.4
4 
5 export PATH=$M2_HOME/bin:$PATH

 

 

source /etc/profile

測試是否安裝完成

mvn -v

 

3、安裝Findbugs

安裝軟件:findbugs-3.0.1.tar.gz

wget http://prdownloads.sourceforge.net/findbugs/findbugs-3.0.1.tar.gz

解壓

tar -zxvf findbugs-3.0.1.tar.gz -C   /usr/local/hadoopapps/findbugs/

配置Findbugs環境變量

1 export   FINDBUGS_HOME=/usr/local/hadoopapps/findbugs/findbugs-3.0.1/
2 
3 export PATH=$PATH:$FINDBUGS_HOME/bin

 

使環境變量生效

source /etc/profile

測試是否安裝成功

findbugs -version

 

4、安裝ProtocolBuffer

直接用yum安裝

yum install protobuf-compiler.aarch64

 

測試是否安裝成功

protoc --version

5、安裝Snappy

簡介:Snappy 是一個 C++ 的用來壓縮和解壓縮的開發包。

安裝軟件:snappy-1.1.3.tar.gz

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

 

進入snappy目錄

cd snappy-1.1.3/

 

編譯安裝

1 ./configure
2 
3 make
4 
5 make install

測試是否安裝成功,查看snappy文件庫

ls -lh /usr/local/lib | grep snappy

 

相關依賴安裝完之后,就可以開始編譯CDH了。

編譯要求:hadoop-2.6.0-cdh5.13.3

wget     http://archive.cloudera.com/cdh5/cdh/5/hadoop-2.6.0-cdh5.13.3.tar.gz

解壓

tar -zxvf    hadoop-2.6.0-cdh5.13.3.tar.gz

 

進入hadoop-2.6.0-cdh5.13.3目錄

cd hadoop-2.6.0-cdh5.13.3/src    #pom.xml所在同級目錄

 

使用JDK8需要改動的地方

(1)修改Hadoop依賴的JDK版本

sed -i "s/1.7/1.8/g" `grep javaVersion -rl   /usr/local/src/hadoop-2.6.0-cdh5.13.3/pom.xml`

 

否則會報以下錯誤

1 [WARNING] Rule 1:   org.apache.maven.plugins.enforcer.RequireJavaVersion failed with message:
2 
3 Detected JDK Version: 1.8.0-131 is not in the allowed   range [1.7.0,1.7.1000}].

(2)替換依賴的jdk.tools版本

sed -i "s/1.7/1.8/g" `grep 1.7 -rl   /usr/local/src/hadoop-2.6.0-cdh5.13.3/hadoop-common-project/hadoop-annotations/pom.xml`

否則會報以下錯誤

 1 [ERROR] Failed to execute goal   org.apache.maven.plugins:maven-compiler-plugin:2.5.1:compile   (default-compile) on project hadoop-annotations: Compilation failure:   Compilation failure:
 2 
 3 [ERROR]   /usr/local/src/hadoop-2.6.0-cdh5.13.3/hadoop-common-project/hadoop-annotations/src/main/java/org/apache/hadoop/classification/tools/ExcludePrivateAnnotationsJDiffDoclet.java:[20,22]   error: package com.sun.javadoc does not exist
 4 
 5 [ERROR]   /usr/local/src/hadoop-2.6.0-cdh5.13.3/hadoop-common-project/hadoop-annotations/src/main/java/org/apache/hadoop/classification/tools/ExcludePrivateAnnotationsJDiffDoclet.java:[21,22]   error: package com.sun.javadoc does not exist
 6 
 7 [ERROR]   /usr/local/src/hadoop-2.6.0-cdh5.13.3/hadoop-common-project/hadoop-annotations/src/main/java/org/apache/hadoop/classification/tools/ExcludePrivateAnnotationsJDiffDoclet.java:[22,22]   error: package com.sun.javadoc does not exist
 8 
 9 [ERROR]   /usr/local/src/hadoop-2.6.0-cdh5.13.3/hadoop-common-project/hadoop-annotations/src/main/java/org/apache/hadoop/classification/tools/ExcludePrivateAnnotationsJDiffDoclet.java:[35,16]   error: cannot find symbol
10 
11 [ERROR]     symbol:   class LanguageVersion
12 
13 [ERROR]     location: class ExcludePrivateAnnotationsJDiffDoclet

(3)替換不規范的字符

sed -i "s/<\/ul>//g" `grep   "</ul>" -l   /usr/local/src/hadoop-2.6.0-cdh5.13.3/hadoop-common-project/hadoop-annotations/src/main/java/org/apache/hadoop/classification/InterfaceStability.java`

否則會報以下錯誤

1 [ERROR] Failed to execute goal   org.apache.maven.plugins:maven-javadoc-plugin:2.8.1:jar (module-javadocs) on   project hadoop-annotations: MavenReportException: Error while creating   archive:
2 [ERROR] Exit code: 1 -   /usr/local/src/hadoop-2.6.0-cdh5.13.3/hadoop-common-project/hadoop-annotations/src/main/java/org/apache/hadoop/classification/InterfaceStability.java:27:   error: unexpected end tag: </ul>
3 [ERROR]  *   </ul>
4 [ERROR]    ^
5 [ERROR]
6 [ERROR] Command line was:   /usr/local/jdk1.8.0_131/jre/../bin/javadoc @options @packages
7 [ERROR]
8 [ERROR] Refer to the generated Javadoc files in   '/usr/local/src/hadoop-2.6.0-cdh5.13.3/hadoop-common-project/hadoop-annotations/target'   dir.
9 [ERROR]

(4)關閉DocLint特性

Java 8 新增了DocLint特性,這個特性主要是在開發階段生產javadoc文檔之前就檢查Javadoc注釋的錯誤,並且鏈接到源代碼。如果javadoc的注釋有錯誤,不生產javadoc。

默認情況下DocLint功能是開啟的,在配置里添加-Xdoclint:none可以關閉這個功能,生成javadoc就不會做檢查。

vim /usr/local/src/hadoop-2.6.0-cdh5.13.3/pom.xml

(5)在<properties></properties>之間添加如下屬性

<additionalparam>-Xdoclint:none</additionalparam>

否則會報以下錯誤

1 [ERROR] Failed to execute goal   org.apache.maven.plugins:maven-javadoc-plugin:2.8.1:jar (module-javadocs) on   project hadoop-nfs: MavenReportException: Error while creating archive:
2 
3 [ERROR] Exit code: 1 - /usr/local/src/hadoop-2.6.0-cdh5.13.3/hadoop-common-project/hadoop-nfs/src/main/java/org/apache/hadoop/oncrpc/RpcCallCache.java:126:   warning: no @return
4 
5 [ERROR]     public String getProgram() {
6 
7 [ERROR]                 ^
8 
9 [ERROR] /usr/local/src/hadoop-2.6.0-cdh5.13.3/hadoop-common-project/hadoop-nfs/src/main/java/org/apache/hadoop/oncrpc/RpcCallCache.java:131:   warning: no @param for clientId

(6)修復bug

參考鏈接https://issues.apache.org/jira/browse/YARN-3400

替換兩個文件:

./hadoop-2.6.0-cdh5.13.3/src/hadoop-mapreduce-project/hadoop-mapreduce-client/hadoop-mapreduce-client-nativetask/src/main/native/src/lib/primitives.h

. /hadoop-2.6.0-cdh5.13.3/src/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/ipc/RPCUtil.java

替換文件請見附件,由於文件上傳限制,需要修改文件名,分別改為primitives.h和RPCUtil.java

否則會報

1 [ERROR] Failed to execute goal   org.apache.maven.plugins:maven-compiler-plugin:2.5.1:compile   (default-compile) on project hadoop-yarn-common: Compilation failure:   Compilation failure:
2 
3 [ERROR]   /usr/local/src/hadoop-2.6.0-cdh5.13.3/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/ipc/RPCUtil.java:[101,10]   error: unreported exception Throwable; must be caught or declared to be   thrown
4 
5 [ERROR]   /usr/local/src/hadoop-2.6.0-cdh5.13.3/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/ipc/RPCUtil.java:[104,10]   error: unreported exception Throwable; must be caught or declared to be   thrown
6 
7 [ERROR]   /usr/local/src/hadoop-2.6.0-cdh5.13.3/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/ipc/RPCUtil.java:[107,10]   error: unreported exception Throwable; must be caught or declared to be   thrown

(7)安裝protobuf

版本必須與Hadoop一致,否則會報錯

1 WARNING]   [protoc, --version] failed: java.io.IOException: Cannot run program   "protoc": error=2, No such file or directory
2 
3 [ERROR] stdout:   []

查看Hadoop版本中指定的protobuf版本

1 grep   "<cdh.protobuf.version>"   /root/.m2/repository/com/cloudera/cdh/cdh-root/5.13.3/cdh-root-5.13.3.pom
2 
3 <cdh.protobuf.version>2.5.0</cdh.protobuf.version>

替換yum源

 wget -O   /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo

執行命令進行編譯

mvn package -DskipTests -Pdist,native -Dtar   -Dsnappy.lib=/usr/local/lib   -Dbundle.snappy -Dmaven.javadoc.skip=true

編譯結果位於./hadoop-dist/target/

hadoop-2.6.0-cdh5.13.3.tar.gz是壓縮包

hadoop-2.6.0-cdh5.13.3是文件夾

1.編譯時可能會遇到javah錯誤

配置JAVA_HOME路徑即可

2.checksum.cc文件的問題

注釋掉硬件CRC32的實現,使用軟件實現方式

修改/opt/hadoop-2.6.0-cdh5.13.3/src/hadoop-mapreduce-project/hadoop-mapreduce-client/hadoop-mapreduce-client-nativetask/src/main/native/src/util/Checksum.cc

注釋掉582行,583,584行,即可繼續編譯.

編譯libtorrent-rasterbar.so

1.安裝依賴

yum install -y boost boost-devel

2.下載源碼

wget https://github.com/arvidn/libtorrent/releases/download/libtorrent-1_0_6/libtorrent-rasterbar-1.0.6.tar.gz

3.編譯源碼

1 tar -zxvf libtorrent-rasterbar-1.0.6.tar.gz
2 
3 cd libtorrent-rasterbar-1.0.6
4 
5 ./configure
6 
7 make -j4
8 
9 make install

通過swig將c/c++封裝成python可調用的so動態鏈接庫4.找到libtorrent-rasterbar.so文件

1.安裝swig

 yum install -y swig

2.下載源碼

 git clone https://github.com/AGWA/parentdeathutils.git

3.改寫源碼

 1     cd parentdeathutils
 2 
 3      cp diewithparent.c diewithparent.i
 4 
 5      vim diewithparent.i
 6 
 7      /***在文件頭部添加如下內容***/
 8 
 9     %module diewithparent
10 
11     %{
12 
13      #define SWIG_FILE_WITH_INIT
14 
15      #include <sys/prctl.h>
16 
17      #include <signal.h>
18 
19      #include <unistd.h>
20 
21      #include <stdio.h>
22 
23      #include <stdlib.h>
24 
25      %}

4.建python模塊,利用-python參數執行swig

swig -python diewithparent.i

執行完命令后生成兩個不同的文件:diewithparent_wrap.c和diewithparent.py

5.利用distutils生成動態庫

先定義一個配置文件,命名為setup.py

vim setup.py

setup.py內容如下:

1 # -*- coding: utf-8 -*
2 
3 from distutils.core import setup, Extension
4 
5 
6 
7 diewithparent_module = Extension('_diewithparent',sources=['diewithparent_wrap.c','diewithparent.c'],)
8 
9 setup (name='diewithparent',version='1.0',author="SWIG Docs",description="""Simple swig diewithparent from docs""",ext_modules = [diewithparent_module],py_modules = ["diewithparent"],)

6.生成_diewithparent.so動態庫

python setup.py build_ext --inplace

作者:南七技校林書豪


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM