Hadoop-2.9.0 编译 (CentOS6.7 64位)
- 0. 环境
- 1. 一些废话
- 2. 环境解析
- 3. 安装环境
- 4. 编译过程
- 5. 出错处理
0. 环境
- CentOS-6.7 64位
Minimal版
- hadoop-2.9.0-src.tar.gz (2.X中目前最新的稳定版)
https://mirrors.aliyun.com/apache/hadoop/common/stable/hadoop-2.9.0-src.tar.gz - jdk-1.8.0_65 64位
jdk-8u65-linux-x64.tar.gz
- Maven3.3.9
apache-maven-3.3.9-bin.tar.gz
- ProtocolBuffer2.5.0
protobuf-2.5.0.tar.gz
- ANT
apache-ant-1.9.7-bin.tar.gz
- 其他环境另行补充
1. 一些废话
为什么需要编译?
- 官方提供的编译好的版本为32位, 绝大部分的运行环境是64位,故需要对源码包进行编译
搭建环境的版本要求在哪看?
- 在源码包下有一个叫BUILDING.txt的文件, 里面详细说明了编译过程中所需要的环境和版本要求, 还有环境安装的命令,十分贴心
声明 本文只是记录向的文章, 着重引导思路, 不适合速食性阅读
2. 环境解析(可跳过)
查看BUILDING.txt文件, 确定编译前的准备工作
- Unix System
- JDK 1.8+
- Maven 3.0 or later
- Findbugs 1.3.9 (if running findbugs)
- ProtocolBuffer 2.5.0
- CMake 2.6 or newer (if compiling native code), must be 3.0 or newer on Mac
- Zlib devel (if compiling native code)
- openssl devel (if compiling native hadoop-pipes and to get the best HDFS encryption performance)
- Linux FUSE (Filesystem in Userspace) version 2.6 or above (if compiling fuse_dfs)
- Internet connection for first build (to fetch all Maven and Hadoop dependencies)
- python (for releasedocs)
- bats (for shell code testing)
- Node.js / bower / Ember-cli (for YARN UI v2 building)
首先是Unix系统, windows排除(当然我也没试过, 如果可以的话, 算是打脸?)
- JDK1.8+
- MVN3.0+
- ProtocolBuffer 2.5.0
- CMake2.6 + (Mac系统3.0+)(穷,没有Mac)
以上是必要的环境内容, 安装过程中会涉及到诸多软件的依赖, 安装之前, 会做提醒
安装过程中需要网络连接,需要下载MVN和Hadoop的依赖(第一次编译需要,亲测不同版本由于需要的依赖不同,编译其他版本时仍然需要联网)(请务必保证网络的通畅)
此外, 在之前看的教程中, 发现有些安装了ANT, 我也安装了(因为懒,要是报错,还得排查环境和配置,很麻烦,宁可多装,也不要漏掉)
- ANT
apache-ant-1.9.7-bin.tar.gz
Installing required packages for clean install of Ubuntu 14.04 LTS Desktop:
* Oracle JDK 1.8 (preferred)
$ sudo apt-get purge openjdk*
$ sudo apt-get install software-properties-common
$ sudo add-apt-repository ppa:webupd8team/java
$ sudo apt-get update
$ sudo apt-get install oracle-java8-installer
* Maven
$ sudo apt-get -y install maven
* Native libraries
$ sudo apt-get -y install build-essential autoconf automake libtool cmake zlib1g-dev pkg-config libssl-dev
* ProtocolBuffer 2.5.0 (required)
$ sudo apt-get -y install protobuf-compiler
Optional packages:
* Snappy compression
$ sudo apt-get install snappy libsnappy-dev
* Intel ISA-L library for erasure coding
Please refer to https://01.org/intel%C2%AE-storage-acceleration-library-open-source-version
(OR https://github.com/01org/isa-l)
* Bzip2
$ sudo apt-get install bzip2 libbz2-dev
* Jansson (C Library for JSON)
$ sudo apt-get install libjansson-dev
* Linux FUSE
$ sudo apt-get install fuse libfuse-dev
这里讲了必要安装的环境的安装方法,和可选环境的安装方法(平台是Ubuntu,把apt-get换成yum就也可以了)
jdk,maven,ProtocalBuffer,ANT稍大一点的软件我都是本地上传安装包的,
大致就这些
3. 安装环境
配置环境的一些个人习惯(经供参考,欢迎指正):
1. 习惯上将自己安装的软件放在/export目录内(其他文件夹或者自建一个也完全没有问题)
2. 在export下会新建以下几个文件夹
- packages 放置上传的安装包
- env 类似于java maven等类型的软件
- data 软件数据的存放位置
- server 类似于tomcat和nginx等类型的软件
- software 位置要求不多的软件的安装位置
3. 安装过程:
- 注: 配置环境变量的格式
vi /etc/profile 在最下边添加一下内容
export JAVA_HOME=/export/env/jdk1.8.0_65
export PATH=.:$PATH:$JAVA_HOME/bin
格式是这样, 把名字和路径改一下就可以了, 之后需要 source /etc/profile
- jdk
- 解压到env文件夹内, 配置环境变量, source一下, java -version测试环境变量是否生效
- maven
- 解压到env文件夹内, 配置环境变量, source一下, mvn -version测试环境变量是否生效
- 修改apache-maven-3.3.9/conf下的setting.xml,配置国内的maven源,能稍微快一点
- 安装ProtocolBuffer2.5.0
- 需要安装一些依赖
yum install gcc gcc-c++ make
- 安装gcc gcc-c++ make, 过程中,y yes什么的需要输入, 也可以在yum后加-y解决
- 解压, 配置, 编译, 安装, protobuf默认安装在 /usr/local 目录, 此处没有改动, 也可以在./ configure 处更改安装位置
cd /protobuf-2.5.0
./ configure
make
make install
- protoc –version 测试一下是否安装成功(verion前是–)
- 安装ANT
- 解压到env文件夹内, 配置环境变量, source一下, ant -version测试环境变量是否生效
- 需要安装一些依赖
- 安装CMake和其他依赖
yum install cmake
yum install openssl-devel
yum install ncurses-devel
4. 编译过程
解压hadoop-2.9.0-src.tar.gz到software文件夹下, 切换到hadoop-2.9.0-src下
执行编译命令
mvn package -Pdist,native -DskipTests -Dtar
- 几乎全程需要联网,网速很重要, 大约需要一个小时
- 编译好的文件是 hadoop-dist/target/ 下的hadoop-2.9.0-tar.gz
5. 出错处理
我编译的过程还算是顺利, 只有一两个问题,
出错后会有提示如何在处理完问题后继续中断的编译, 一般是在上面的编译命令后加上-rf :出错的模块
例如:
mvn package -Pdist,native -DskipTests -Dtar -rf :hadoop-aws
我出的问题是编译hadoop-aws的过程中,需要下载com.amazonaws的DynamoDBLocal包, 在ali和maven的中央仓库中都没有,好在,这个依赖只是在test时需要, 不编译不影响使用, 索性将这个模块的pom.xml中的依赖和源码中的test代码一并删掉就解决了.