Hadoop源码环境搭建及编译(Windows 、MAC)

Hadoop源码环境搭建及编译(Windows 、MAC)

Windows

1. 下载对应版本的Hadoop源码包

2. 编译Hadoop源码

编译源码最好是在linux平台,此处用CentOS 7.4平台编译源码

使用root用户编译

所有软件压缩包,放到**/opt/apps**目录

2.1 查看编译说明文件

将hadoop-2.7.0-src.tar.gz源码包放到/opt目录下

将源码包解压到/opt目录

[root@node-01 opt]# cd /opt/
[root@node-01 opt]# tar -xzvf hadoop-2.7.0-src.tar.gz

进入解压出来的目录

[root@node-01 opt]# cd hadoop-2.7.0-src/
[root@node-01 hadoop-2.7.0-src]# ls

BUILDING.txt文件是编译hadoop源码的说明文件;打开文件,列出了编译hadoop源码时,要求软件及对应版本要求

要求在Unix系统下编译

2.2 安装JDK

要求版本:JDK1.7+

确定JDK是否已经安装,要求JDK1.7或以上版本

若已经安装非系统自带的openjdk且是版本符合要求,则略过步骤“安装JDK”;运行下边命令进行确认

[root@node-01 jdk1.8.0_201]# java -version
java version "1.8.0_201"
Java(TM) SE Runtime Environment (build 1.8.0_201-b09)
Java HotSpot(TM) 64-Bit Server VM (build 25.201-b09, mixed mode)

(使用root用户)卸载系统自带的openjdk

[root@node-01 ~]# rpm -qa |grep java
python-javapackages-3.4.1-11.el7.noarch
java-1.8.0-openjdk-headless-1.8.0.161-2.b14.el7.x86_64
tzdata-java-2018c-1.el7.noarch
java-1.7.0-openjdk-1.7.0.171-2.6.13.2.el7.x86_64
java-1.8.0-openjdk-1.8.0.161-2.b14.el7.x86_64
javapackages-tools-3.4.1-11.el7.noarch
java-1.7.0-openjdk-headless-1.7.0.171-2.6.13.2.el7.x86_64

忽略依赖卸载查询到的openjdk相关包

rpm -e --nodeps python-javapackages-3.4.1-11.el7.noarch
rpm -e --nodeps java-1.8.0-openjdk-headless-1.8.0.161-2.b14.el7.x86_64
...

上传自己的jdk解压,并配置环境变量

tar -zxvf /opt/apps/jdk-8u201-linux-x64.tar.gz -C /opt/

打开/etc/profile文件添加以下内容

export JAVA_HOME=/opt/jdk1.8.0_201
export PATH=$PATH:$JAVA_HOME/bin
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

检测是否安装成功

[root@node-01 jdk1.8.0_201]# source /etc/profile
[root@node-01 jdk1.8.0_201]# java -version
java version "1.8.0_201"
Java(TM) SE Runtime Environment (build 1.8.0_201-b09)
Java HotSpot(TM) 64-Bit Server VM (build 25.201-b09, mixed mode)

2.3 安装依赖包

根据编译说明文件BUILDING.txt,安装相关依赖程序包

[root@node-01 jdk1.8.0_201]# yum -y install gcc-c++ build-essential autoconf automake libtool cmake zlib1g-dev pkg-config libssl-devua svn openssl-devel ncurses-devel

说明:

gcc-c++ -> liunx环境中的c/c++编译器

build-essential -> linux操作系统上面开发程序,光有了gcc是不行的;它还需要一个build-essential软件包;作用是提供编译程序必须软件包的列表信息

如果运行过程中,出现一下类似情况,说明需要更换yum源

Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
 * base: mirrors.neusoft.edu.cn
 * extras: mirrors.tuna.tsinghua.edu.cn
 * updates: mirrors.neusoft.edu.cn
base                                                                     | 3.6 kB  00:00:00     
extras                                                                   | 3.4 kB  00:00:00     
updates                                                                  | 3.4 kB  00:00:00     
updates/7/x86_64/primary_db                                              | 6.5 MB  00:00:01     
No package build-essential available.
No package zlib1g-dev available.
No package pkg-config available.
No package libssl-devua available.
Resolving Dependencies
--> Running transaction check

或参考下边四种情况的解决方案

情况一:No package build-essential available.解决方案

yum groupinstall 'Development Tools'

情况二:No package zlib1g-dev available.解决方案

yum install zlib
yum install zlib-devel

情况三:No package pkg-config available.解决方案

yum install pkgconfig

情况四:No package libssl-devua available.解决方案

yum install openssl
yum install openssl-devel

2.4 安装Maven

版本要求:Maven 3.0或以后版本均可

:由于apache-maven-3.5.0及以后的版本,在编译hadoop-2.7.0源码时,容易出错;本文档使用apache-maven-3.5.0

先确认一下,是否已经安装了符合要求的maven;

若已安装apache-maven-3.5.0,则略过“安装maven”步骤

[root@node-01 opt]# mvn -v

否则安装apache-maven-3.5.0

安装软件:apache-maven-3.5.0-bin.tar.gz

解压maven压缩包到/opt目录下

[root@node-01 apps]# ls
apache-maven-3.5.0-bin.tar.gz
[root@node-01 apps]# tar -xzvf apache-maven-3.5.0-bin.tar.gz -C /opt/

配置mvn的环境变量

[root@node-01 ~]# vim /etc/profile

添加如下内容

export M2_HOME=/opt/apache-maven-3.5.0
export PATH=$PATH:$M2_HOME/bin

测试是否安装完成

[root@node-01 ~]# source .bash_profile
[root@node-01 ~]# mvn -v

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0OCWWntI-1582616296146)(assets/Image201907281207.png)]

默认使用中央仓库下载即可

2.5 安装Findbugs

版本要求:Findbugs 1.3.9

安装软件:findbugs-3.0.1.tar.gz

[root@node-01 apps]# ls
findbugs-3.0.1.tar
[root@node-01 apps]# tar -xvf findbugs-3.0.1.tar.gz -C /opt

配置Findbugs环境变量

[root@node-01 apps]# vim /etc/profile

添加如下内容

export FINDBUGS_HOME=/opt/findbugs-3.0.1
export PATH=$PATH:$FINDBUGS_HOME/bin

测试是否安装完成

[root@node-01 apps]# source /etc/profile
[root@node-01 apps]# findbugs -version
3.0.1

2.6 安装ProtocolBuffer

版本要求:ProtocolBuffer 2.5.0

安装软件:protobuf-2.5.0.tar,不建议用其它版本

[root@node-01 apps]# ls
protobuf-2.5.0.tar
[root@node-01 apps]# tar -xvf protobuf-2.5.0.tar
[root@node-01 apps]# mv protobuf-2.5.0 ../
[root@node-01 apps]# cd /opt/protobuf-2.5.0/
[root@node-01 protobuf-2.5.0]# ./configure 
[root@node-01 protobuf-2.5.0]# make -j 4  # 干货,-j以4核同时编译;根据实际情况修改
[root@node-01 protobuf-2.5.0]# make install

测试是否安装完成

[root@node-01 protobuf-2.5.0]# protoc --version
libprotoc 2.5.0

2.7 安装Snappy

若想让hadoop支持snappy压缩,得先安装snappy;

若不需要,跳过此步骤

[root@node-01 apps]# ls
snappy-1.1.3.tar.gz

解压

[root@node-01 opt]# tar -xzvf snappy-1.1.3.tar.gz -C /opt/

安装

[root@node-01 opt]# cd /opt/snappy-1.1.3/
[root@node-01 snappy-1.1.3]# ./configure
[root@node-01 snappy-1.1.3]# make -j 4
[root@node-01 snappy-1.1.3]# make install

查看snappy文件库

[root@node-01 snappy-1.1.3]# ls -lh /usr/local/lib | grep snappy
-rw-r--r--. 1 root root 510K 4月  12 14:14 libsnappy.a
-rwxr-xr-x. 1 root root  955 4月  12 14:14 libsnappy.la
lrwxrwxrwx. 1 root root   18 4月  12 14:14 libsnappy.so -> libsnappy.so.1.3.0
lrwxrwxrwx. 1 root root   18 4月  12 14:14 libsnappy.so.1 -> libsnappy.so.1.3.0
-rwxr-xr-x. 1 root root 253K 4月  12 14:14 libsnappy.so.1.3.0
[root@node-01 snappy-1.1.3]# 

2.8 安装Jansson

首先确保已经安装wget,若没有,先安装(自行百度)

[root@node-01 snappy-1.1.3]# cd /opt/apps/
[root@node-01 opt]# wget http://www.digip.org/jansson/releases/jansson-2.5.tar.gz
[root@node-01 opt]# tar -zxvf jansson-2.5.tar.gz -C /opt
[root@node-01 opt]# cd /opt/jansson-2.5
[root@node-01 jansson-2.5]# ./configure  && make && make install

2.9 编译hadoop

防止编译时java.lang.OutOfMemoryError:Java heap space堆栈内存溢出问题,可以适当调整一下编译用的内存大小

[root@node-01 opt]# export MAVEN_OPTS="-Xms256m -Xmx2048m"

进入源码包下,执行命令进行编译

[root@node-01 fuse-2.8.4]# cd
[root@node-01 ~]# cd /opt/
[root@node-01 opt]# cd hadoop-2.7.0-src/
[root@node-01 hadoop-2.7.0-src]# mvn package -Pdist,native,docs -DskipTests -Dtar

如果中途编译失败,并且不要文档、hadoop支持snappy、支持openssl的话,请使用这个命令

[root@localhost hadoop-2.7.7-src]# mvn clean package -Pdist,native -DskipTests -Dtar -Drequire.snappy -Dsnappy.lib=/usr/local/lib -Dbundle.snappy -Drequire.openssl

说明:
支持snappy(若不需要支持snappy,把这些选项去除即可):Drequire.snappy -Dsnappy.lib=/usr/local/lib -Dbundle.snappy

MAC

1 安装依赖

brew install  gcc autoconf automake libtool cmake snappy gzip bzip2 zlib openssl protobuf

2 安装 findbugs(下载压缩包解压)

3 环境变量

export OPENSSL="/usr/local/Cellar/openssl/1.0.2t"
export OPENSSL_ROOT_DIR="$OPENSSL"
export PATH="$OPENSSL/bin:$PATH"
export PKG_CONFIG_PATH="$OPENSSL/lib/pkgconfig"
export LDFLAGS="-L$OPENSSL/lib"
export CPPFLAGS="-I$OPENSSL/include"

export FINDBUGS_HOME=/opt/findbugs-3.0.1
export PATH=$PATH:$FINDBUGS_HOME/bin

4 编译

mvn package -Pdist,native,docs -DskipTests -Dtar

附:编译出错解决

在编译hadoop-pipes时报错:

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-antrun-plugin:1.7:run (make) on project hadoop-pipes: An Ant BuildException has occured: exec returned: 1

[ERROR] around Ant part ...... @ 5:127 in /opt/hadoop-2.7.0-src/hadoop-tools/hadoop-pipes/target/antrun/build-main.xml

进入/opt/hadoop-2.7.0-src/hadoop-tools/hadoop-pipes/target/antrun/build-main.xml文件可以看到


<project name="maven-antrun-" default="main"  >
<target name="main">
  <mkdir dir="/opt/hadoop-2.7.0-src/hadoop-tools/hadoop-pipes/target/native"/>
  <exec failonerror="true" dir="/opt/hadoop-2.7.0-src/hadoop-tools/hadoop-pipes/target/native" executable="cmake">
    <arg line="/opt/hadoop-2.7.0-src/hadoop-tools/hadoop-pipes/src/ -DJVM_ARCH_DATA_MODEL=64"/>
  exec>
  <exec failonerror="true" dir="/opt/hadoop-2.7.0-src/hadoop-tools/hadoop-pipes/target/native" executable="make">
    <arg line="VERBOSE=1"/>
  exec>
  <exec failonerror="true" dir="/opt/hadoop-2.7.0-src/hadoop-tools/hadoop-pipes/target/native" executable="make">exec>
target>

通过上面的报错信息,可以看出是在cmake时报错,于是我开始手动编译

cmake /Users/yangjb/IdeaProjects/hadoop/hadoop-tools/hadoop-pipes/src/ -DJVM_ARCH_DATA_MODEL=64

发现报以下错误:

CMake Error at /usr/local/Cellar/cmake/3.13.2/share/cmake/Modules/FindPackageHandleStandardArgs.cmake:137 (message):
  Could NOT find OpenSSL, try to set the path to OpenSSL root folder in the
  system variable OPENSSL_ROOT_DIR (missing: OPENSSL_INCLUDE_DIR)

没有设置OPENSSL_ROOT_DIR

export OPENSSL_ROOT_DIR="/usr/local/Cellar/[email protected]/1.1.1d"

在运行:

cmake /Users/yangjb/IdeaProjects/hadoop/hadoop-tools/hadoop-pipes/src/ -DJVM_ARCH_DATA_MODEL=64

发现仍有错误,提示在CmakeList.txt/opt/hadoop-2.7.0-src/hadoop-tools/hadoop-pipes/src/CmakeList.txt)文件中需要在cmake_minimum_required(VERSION 2.6 FATAL_ERROR)增加一行

project(ProjectName)

增加之后运行上面一条命令成功

但是在运行下面一句话时报错

make VERBOSE=1

查了很多资料,关于这个报错的回答很少,最后发现是因为openssl的1.1的版本有bug导致,于是换成了[email protected]之后,解决问题。

brew uninstall --ignore-dependencies openssl
brew install https://github.com/tebelorg/Tump/releases/download/v1.0.0/openssl.rb

你可能感兴趣的:(hadoop)