Hadoop 2.7.5编译指导for Centos 7.6 ★★★

1 软硬件环境

类别

子项

版本

获取地址(方法)

 

硬件

CPU

鲲鹏920

--

网络

Ethernet-10GE

--

内存

xxG   xxxMHz

--

OS

CentOS

7.6


Kernel

4.14


 

软件

GCC

4.8.5

参考下面安装说明

Maven

3.5.4

参考下面安装说明

JDK

1.8.0_191

参考下面安装说明

Protoc

2.5.0

参考下面安装说明

2 编译环境准备

2.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/

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

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

PATH=$JAVA_HOME/bin:$PATH

export   JAVA_HOME PATH

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

source   /etc/profile

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

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

PATH=$MAVEN_HOME/bin:$JAVA_HOME/bin:$PATH

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

远程仓库配置

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

<mirror>
  <id>alimaven</id>
  <name>aliyun maven</name>
  <url>
http://maven.aliyun.com/nexus/content/groups/public/</url>
  <mirrorOf>central</mirrorOf>
  </mirror>

配置代理(视具体网络环境而定,不需要代理即可访问公网的此处不用配置):

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

2.3 安装GCC

yum安装GCC相关软件:

yum   install gcc.aarch64 gcc-c++.aarch64 gcc-gfortran.aarch64 libgcc.aarch64

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

打ARM补丁,补丁内容参考:https://www.huaweicloud.com/kunpeng/software/hadoop.html

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

cd   ./src/google/protobuf/stubs/

patch   -p1 < protoc.patch

cd   -

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

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

2.5解决-fsigned-char问题

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

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

3.在gcc所在目录执行vim gcc,并填入如下内容保存:

#!   /bin/sh

/usr/bin/gcc-impl   -fsigned-char “$@”

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

5.使用与1-4步相似的方式给g++创建同名字的脚本文件

 

3 依赖库编译

3.1 基本库安装

使用yum安装:

yum   install openssl-devel zlib-devel automake libtool cmake libstdc++-static glibc-static   git gcc gcc-c++ make

3.2 依赖库分析

      使用checkSo工具,扫描hadoop 2.7.5版本安装包(扫描前先删除tmp目录,扫描后除了检查result文件,还要检查tmplog文件),发现有3个依赖:leveldbjni-all-1.8.jarnetty-all-4.0.23.Final.jarsnappy-java-1.0.4.1.jar

3.3 leveldbjni-all-1.8.jar编译

   参考leveldbjni-all编译指南进行编译:https://bbs.huaweicloud.com/forum/thread-22684-1-1.html

 或从华为镜像站下载编译好的jar包:https://repo.huaweicloud.com/repository/maven/kunpeng/org/fusesource/leveldbjni/leveldbjni-all/1.8/leveldbjni-all-1.8.jar

    将编译好的jar包直接替换安装到本地仓

3.4 netty-all-4.0.23.Final.jar编译

   参考netty-all编译指南进行编译:https://bbs.huaweicloud.com/forum/thread-22724-1-1.html

    或直接从华为镜像站下载编译好的jar包:https://repo.huaweicloud.com/repository/maven/kunpeng/io/netty/netty-all/4.0.23.Final/netty-all-4.0.23.Final.jar

     将编译好的jar包直接替换安装到本地仓

3.5 snappy-java-1.0.4.1.jar编译

   直接从华为镜像站下载编译好的jar包:https://repo.huaweicloud.com/repository/maven/kunpeng/org/xerial/snappy/snappy-java/1.0.4.1/snappy-java-1.0.4.1.jar

     或按照下面编译指导进行编译,将编译好的jar包直接替换安装到本地仓

3.5.1 功能简介

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

3.5.2 编译步骤

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源码的下载路径:

71.png

因为默认的路径已经失效,需要使用新的下载路径:

http://repository.timesys.com/buildsources/s/snappy/snappy-1.0.4/snappy-1.0.4.tar.gz

注:若还是提示未下载成功,则需要手动wget下载,放到指定目录

3)执行编译

make

可以在target目录下找到生成的jar包:snappy-java-1.0.4.1.jar

 

编译完成的jar包需要替换到自己搭建的本地仓库中。

4 Hadoop编译

4.1 下载源码

下载代码并解压:

wget https://archive.apache.org/dist/hadoop/core/hadoop-2.7.5/hadoop-2.7.5-src.tar.gz

tar -zxvf hadoop-2.7.5-src.tar.gz

4.2 执行编译

进入hadoop源码解压目录

cd hadoop-2.7.5-src

执行编译:

mvn package -DskipTests -Pdist,native -Dtar  -Dmaven.javadoc.skip=true

5 FAQ

5.1 git clone

5.1.1 报证书错误问题现象

72.png

5.1.2 解决方法

git config --global http."sslVerify" false

5.2 hadoop编译下载报错

5.2.1 问题现象2

75.png

5.2.2 解决方法2

在服务器下载apache-tomcat-6.0.44.tar.gz失败,需要用其他方法,例如在windows下载对应文件,并将其拷贝到hadoop-release-HDP-2.3.4.7-tag/hadoop-common-project/hadoop-kms/downloads目录下。

5.2.3 问题现象3

76.png

5.2.4 解决方法3

这个问题是由于从远端仓库下载jetty-util-6.1.26.hwx.jar失败,应该是从https://repository.apache.org/content/repositories/snapshorts下载不到对应的jar包。可以去http://repo.spring.io/plugins-release/org/找对应的jar包和pom文件,并放到本地仓库对应的路径下。从报错信息可以看出,jar包的本地路径是~/.m2/repository/org/mortbay/jetty/jetty-util/6.1.26.hwx,对应的远端仓库路径则是:http://repo.spring.io/plugins-release/org/mortbay/jetty/jetty-util/6.1.26.hwx/jetty-util-6.1.26.hwx.jar 。可以看出来,远端仓库的路径和本地仓库路径是一一对应的。后续如果再出现这样的问题,也可以参考这样修改。不过记得要将jar包对应的pom文件也下载下来放到本地仓库。

5.4 编译leveldbjniautomake找不到

5.4.1 问题现象

77.png

 

5.4.2 解决方法

没有安装automake-1.14,可以使用yum install automake安装。如果yum源上找的没有1.14的版本,则需要修改leveldbjni-linux64/target/native-build下的配置文件。修改configureaclocal.m4,将里面的1.14改成服务器上安装的automake版本,比如1.13.4

5.5 error: required file 'autotools/compile' not found

5.5.1 问题现象

78.png

 

5.5.2 解决方法

根据问题信息,需要手动进入相应目录,手动执行相应命令安装。

cd leveldbjni-linux64/target/native-build

automake   --add-missing