在Ubuntu X64上編譯Hadoop

深藍發表於2016-12-12

在之前的文章中介紹瞭如何直接在Ubuntu中安裝Hadoop。但是對於64位的Ubuntu來說,官方給出的Hadoop包是32位的,執行時會得到警告:

WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable

所以我們最好是自己在Ubuntu中編譯Hadoop。先介紹一下我的環境是Ubuntu 16.1 X64 Server版,當前最新的Hadoop是2.7.3。我們可以先下載原始碼,在其中有BUILDING.txt,指導我們如何在Ubuntu中編譯Hadoop:

Installing required packages for clean install of Ubuntu 14.04 LTS Desktop:

* Oracle JDK 1.7 (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-java7-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 libprotobuf-dev protobuf-compiler

Optional packages:

* Snappy compression
  $ sudo apt-get install snappy libsnappy-dev
* 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

 

我用的Linux16.1 X64 Server版本,也是大同小異,接下來是編譯Hadoop的過程:

1.更新apt源

首先需要更新我們的apt源,因為如果是國外源的話,接下來安裝會很慢。使用命令

sudo vi /etc/apt/sources.list

開啟這個apt源列表,如果其中看到是http://us.xxxxxx之類的,那麼就是外國的,如果看到是http://cn.xxxxx之類的,那麼就不用換的。我的是美國的源,所以需要做一下批量的替換。在命令模式下,輸入:

:%s/us./cn./g

就可以把所有的us.改為cn.了。然後輸入:wq即可儲存退出。

sudo apt-get update

更新一下源。

2.安裝必備軟體

2.1安裝SSH

sudo apt-get install ssh

安裝完畢後我們就可以用putty或者SecureCRT連線到Ubuntu了。

2.2安裝JDK

sudo apt-get install default-jdk

安裝後可以執行java –version看安裝的版本

2.3安裝Maven

sudo apt-get install maven

這是編譯Hadoop的工具,安裝完成後,可以執行mvn -–version看安裝的版本

2.4安裝依賴庫

sudo apt-get install g++ autoconf automake libtool cmake zlib1g-dev pkg-config libssl-dev

2.5安裝ProtocolBuffer 2.5.0

注意,我要編譯的是Hadoop2.7.3,必須安裝的ProtocolBuffer是2.5這個版本,如果不是的話,接下來會編譯失敗:

protoc version is 'libprotoc 3.0.0, expected version is '2.5.0'

如果我們執行文件中的:

sudo apt-get -y install libprotobuf-dev protobuf-compiler

protoc –version 會告訴我們安裝的是3.0版本,這是不對的。我們需要的是2.5版。怎麼辦呢?只有去GitHub找到2.5版,然後重新編譯安裝。過程如下:

wget https://github.com/google/protobuf/releases/download/v2.5.0/protobuf-2.5.0.tar.gz
tar -xzf protobuf-2.5.0.tar.gz
cd protobuf-2.5.0/
./autogen.sh
./configure
make
make install
現在我們重新執行protoc –version 會看到版本是2.5了。
2.6更新Maven映象
由於Maven預設連線的是國外的伺服器,會很慢,所以我們需要更新Maven源為國內的伺服器。推薦還有阿里雲的Maven源:http://maven.aliyun.com/
具體做法是:
cd ~/.m2 (如果沒有這個資料夾,那麼就在~目錄mkdir .m2建立這個資料夾)
vi settings.xml
然後輸入以下的內容:
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
<mirrors>
<mirror>
<id>nexus-aliyun</id>
<mirrorOf>*</mirrorOf>
<name>Nexus aliyun</name>
<url>http://maven.aliyun.com/nexus/content/groups/public</url>
</mirror>
</mirrors>
</settings>

3.編譯Hadoop

首先我們下載最新的Hadoop原始碼,訪問官網http://hadoop.apache.org/releases.html,可以看到最新的是2.7.3,所以我們點選2.7.3的source,會給我們一個比較快的下載地址。

wget http://mirror.bit.edu.cn/apache/hadoop/common/hadoop-2.7.3/hadoop-2.7.3-src.tar.gz

下載完畢後解壓:

tar -zxvf hadoop-2.7.3-src.tar.gz

cd hadoop-2.7.3-src

最後,就是用Maven編譯Hadoop:

mvn package -Pdist,native -DskipTests –Dtar

這是一個比較漫長的過程,可能要等10~20來分鐘。如果一切正常,那麼執行完畢後,我們會看到成功編譯的通知:

image

我是在虛擬機器中,花了23分鐘,我們的Hadoop X64版本就編譯出來了。

編譯好的Hadoop是在:

hadoop-dist/target/ 目錄下,hadoop-2.7.3.tar.gz檔案便是

我們可以把這個包下載到本地,或者傳輸到其他伺服器,接下來就是用這個包安裝Hadoop,具體安裝配置過程參見我這篇部落格

 

相關文章