本地编译Hadoop2.9.1源码总结

目录

 

一、文档编写的目的

二、编译要求

三、软件安装

3.1 安装JDK

3.2 安装各种库

3.3 安装maven

3.4 安装protocolBuffer

3.5 安装findbugs

四、开始编译

五、编译中可能遇到的问题


一、文档编写的目的

当在Windows平台安装hadoop时,或者添加Hadoop一些额外功能时,需要对Hadoop源码进行编译,本文以Hadoop2.9.1为例进行源码编译。

操作流程概述:

  • 编译要求
  • 软件安装
  • 开始编译

测试环境概述:

  • CentOS6.9
  • apache hadoop2.9.1
  • whj(普通)用户

 

二、编译要求

先去官网下载hadoop2.9.1源码并解压,打开解压目录下的BUILDING.txt,编译过程和需要的软件其实就是根据这个文档里的描述来的。

下载地址:hadoop2.9.1源码

Requirements:

* Unix System
* JDK 1.7 or 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)
* Node.js / bower / Ember-cli (for YARN UI v2 building)

这是编译所需要的软件,包括:

  1. JDK1.7 or 1.8
  2. maven 3.0 or later
  3. findbugs 1.3.9
  4. protocolBuffer 2.5.0
  5. cmake 2.6
  6. zlib-devel
  7. openssl-devel

 解决编译依赖需安装autoconf automake gcc等

三、软件安装

3.1 安装JDK

安装JDK1.7 或1.8并配置环境变量,这里就不赘述了,前面文档《hodoop伪分布配置详细步骤》也有介绍。

3.2 安装各种库

sudo yum -y install svn ncurses-devel gcc*

sudo yum -y install lzo-devel zlib-devel autoconf automake libtool cmake openssl-devel

3.3 安装maven

概述:

Maven是一个项目管理和综合工具。Maven提供了开发人员构建一个完整的生命周期框架。开发团队可以自动完成项目的基础工具建设,Maven使用标准的目录结构和默认构建生命周期。

下载地址: apache-maven-3.5.4-bin.tar.gz

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

配置环境变量

$ sudo vim /etc/profile                  (末尾追加)

export MAVEN_HOME=/opt/modules/apache-maven-3.5.4

export MAVEN_OPTS="-Xms256m -Xmx512m"

export PATH=$PATH:$MAVEN_HOME/bin

保存并使环境变量生效,source /etc/profile,输入mvn -version,有下面输出结果则安装并配置正确。

本地编译Hadoop2.9.1源码总结_第1张图片

3.4 安装protocolBuffer

概述:

Google Protocol Buffer( 简称 Protobuf) 是 Google 公司内部的混合语言数据标准,Protocol Buffers 是一种轻便高效的结构化数据存储格式,可以用于结构化数据串行化,或者说序列化。它很适合做数据存储或 RPC 数据交换格式。可用于通讯协议、数据存储等领域的语言无关、平台无关、可扩展的序列化结构数据格式。目前提供了 C++、Java、Python 三种语言的 API。

下载地址:protocol-buffers-2.5.0.tar.gz

解压并编译安装

$ tar -zxvf protobuf-2.5.0.tar.gz -C /opt/modules/

$ cd /opt/modules/protobuf-2.5.0/

$ ./configure

$ make install

$ sudo make install

验证:输入protoc --version,有下面输出结果则安装并配置正确。

$ protoc --version

3.5 安装findbugs

概述:

FindBugs 是由马里兰大学提供的一款开源 Java静态代码分析工具。FindBugs通过检查类文件或 JAR文件,将字节码与一组缺陷模式进行对比从而发现代码缺陷,完成静态代码分析。

下载地址:findbugs-1.3.9

解压安装并配置环境变量

$ tar -zxvf findbugs-1.3.9.tar.gz -C /opt/modules/

$ sudo vim /etc/profile

(末尾添加)

export FINDBUGS_HOME=/opt/modules/findbugs-1.3.9

export PATH=$PATH:$FINDBUGS_HOME/bin

$ source /etc/profile              (立即生效)

验证:输入findbugs -version,有下面输出结果则安装并配置正确

$ findbugs -version

四、开始编译

首先保证主机能上网,在编译过程中网络保持畅通;进入到hadoop2.9.1源码的解压目录下,输入下面命令:

$ mvn package -Pdist,native -DskipTests -Dtar

或者

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

前面只编译本地代码,后者编译本地代码和文档,因此前者速度较快。

本地编译Hadoop2.9.1源码总结_第2张图片

接下来就是漫长的等待,等出现这个就说明编译成功。

本地编译Hadoop2.9.1源码总结_第3张图片

编译好的文件在../hadoop-dist/target/hadoop-2.7.1.tar.gz下。

五、编译中可能遇到的问题

错误1

Connection to http://repo.maven.apache.org refused

表示连接maven远程仓库拒绝,此时再运行一下编译命令,就会接着下载jar包。

错误2

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.1:compile (default-compile) on project hadoop-nfs: Compilation failure: Compilation failure:
[ERROR] /home/hadoop/toolkits/hadoop-2.7.1-src/hadoop-common-project/hadoop-nfs/src/main/java/org/apache/hadoop/oncrpc/XDR.java:[23,30] package org.jboss.netty.buffer does not exist

这个错误估计很少遇到,这是因为我嫌repo.maven.apache.org这个网站比较慢,更改的第三方镜像,导致maven中的settings文件配置错误,后来采用默认的就行,虽然慢点。

错误3

[ERROR] around Ant part ...... @ 10:123 in /opt/soft/hadoop-2.7.1-src/hadoop-hdfs-project/hadoop-hdfs-httpfs/target/antrun/build-main.xml
[ERROR] -> [Help 1]

这是由于tomcat的apache-tomcat-6.0.41.tar.gz包太大,没有下载完整,可以到.../hadoop-2.9.1-src/hadoop-hdfs-project/hadoop-hdfs-httpfs/downloads/apache-tomcat-6.0.41.tar.gz这个目录下,删除重新下载。

提醒: 
1、有时候编译过程中会出现下载某个包的时间太久,这是由于连接网站的过程中会出现假死,此时按ctrl+c,重新运行编译命令。 
2、如果出现缺少了某个文件的情况,则要先清理maven(使用命令 mvn clean) 再重新编译。

 

你可能感兴趣的:(大数据篇之Hdfs)