
很多人在初學(xué)Hadoop的時(shí)候,都會(huì)受阻于Hadoop集群環(huán)境的部署,最終放棄治療,僅僅停留在學(xué)習(xí)分布式系統(tǒng)理論的層面而缺乏動(dòng)手實(shí)踐環(huán)節(jié)。
為了幫助大家快速構(gòu)建Hadoop集群,本文提供了一種”即經(jīng)濟(jì)又環(huán)保且方便省心”的部署方式,相信你,一定會(huì)喜歡的。
一般情況下,大家在個(gè)人電腦上學(xué)習(xí)部署hadoop集群的時(shí)候,會(huì)借助vmware、virtual box等虛擬機(jī)。然而,這些虛擬機(jī)有個(gè)不好的地方就是占用太多主機(jī)資源,除此之外,我們還要為集群內(nèi)機(jī)器建立網(wǎng)絡(luò)拓?fù)潢P(guān)系,實(shí)現(xiàn)多機(jī)互聯(lián)。顯然,這種實(shí)踐方式的操作成本是非常高的。
好在最近火熱的Docker容器技術(shù),可以幫助我們省去不少麻煩。Docker不同于VirtualBox等傳統(tǒng)虛機(jī)技術(shù),不需要虛擬化硬件資源,基于本機(jī)硬件系統(tǒng),就可以打造出多個(gè)沙盒環(huán)境,我們可以像使用普通軟件一樣去使用這些沙盒環(huán)境,而且它們啟動(dòng)非??欤舜霜?dú)立運(yùn)行,互不影響?;谶@些優(yōu)勢(shì),Docker非常適合用于部署多節(jié)點(diǎn)集群(它可以做的事情遠(yuǎn)遠(yuǎn)不止這些哦)更多有關(guān)Docker的知識(shí),大家可以閱讀官方的介紹文檔(https://docs.docker.com)。
為了方便大家快速構(gòu)建Hadoop分布式系統(tǒng)平臺(tái),本人特制作了一個(gè)預(yù)裝有Hadoop環(huán)境的docker鏡像文件,并基于該鏡像開(kāi)發(fā)了一個(gè)實(shí)現(xiàn)Hadoop集群快速部署的腳本。大家可訪問(wèn)鏈https://github.com/gtchaos/docker-for-hadoop獲取腳本內(nèi)容。
ps: 包含有Hadoop環(huán)境的鏡像文件,我已經(jīng)docker push到了阿里云的docker registry(文章后面會(huì)介紹),感興趣的同學(xué),可以按照如下指令獲取該鏡像。
docker pull registry.cn-hangzhou.aliyuncs.com/gtchaos/hadoop:latest
快速構(gòu)建工具介紹
下面主要介紹構(gòu)建步驟:
- 克隆倉(cāng)庫(kù)
$ git clone https://github.com/gtchaos/docker-for-hadoop.git
- 構(gòu)建集群
# -n 用于指定構(gòu)建的集群節(jié)點(diǎn)數(shù)
$ sh build.sh -n 3
附效果圖如下:
- 切換到hadoop用戶(hù)
當(dāng)你成功進(jìn)入到master容器后,執(zhí)行如下指令,可切換到hadoop用戶(hù)。
root@hadoop-master:~# su hadoop
- 啟動(dòng)Hadoop
hadoop@hadoop-master:~# ./start-hadoop.sh
附效果圖如下:

- 執(zhí)行wordcount程序
hadoop@hadoop-master:~# ./run-wordcount.sh
- 停止Hadoop服務(wù)
hadoop@hadoop-master:~# ./stop-hadoop.sh
附效果圖如下:

通過(guò)以上操作,即可快速實(shí)現(xiàn)Hadoop集群的快速的部署
Docker國(guó)內(nèi)鏡像
由于Docker官方hub鏡像下載速度極慢,推薦使用國(guó)內(nèi)的docker鏡像服務(wù)。目前國(guó)內(nèi)提供Docker鏡像服務(wù)的廠商如下:
- DaoCloud - Docker加速器(收費(fèi)) https://dashboard.daocloud.io/
- 阿里云 - 開(kāi)發(fā)者平臺(tái) https://dev.aliyun.com
- 微鏡像 - 希云cSphere https://csphere.cn/hub
- 鏡像廣場(chǎng) - 時(shí)速云 https://hub.tenxcloud.com
- 靈雀云 https://hub.alauda.cn
- 網(wǎng)易蜂巢 https://c.163.com
在此,推薦使用阿里云提供的Docker鏡像加速服務(wù)以及針對(duì)開(kāi)發(fā)者提供的Docker鏡像倉(cāng)庫(kù)管理服務(wù)。
阿里云Docker鏡像加速
阿里云提供上傳、下載、構(gòu)建及托管的全方位鏡像服務(wù),開(kāi)發(fā)者可以訪問(wèn)網(wǎng)站http://dev.aliyun.com/search.html 了解更多的內(nèi)容。
阿里云 - 開(kāi)發(fā)者平臺(tái):https://dev.aliyun.com
注冊(cè)并登陸阿里云 - 開(kāi)發(fā)者平臺(tái)之后,在首頁(yè)點(diǎn)擊“創(chuàng)建我的容器鏡像”,然后就會(huì)來(lái)到阿里云的服務(wù)面板。點(diǎn)擊加速器標(biāo)簽,根據(jù)提示輸入Docker登錄時(shí)需要使用的密碼(初次使用時(shí),需要設(shè)置Docker登錄密碼),用戶(hù)名則是登錄阿里云的用戶(hù)名。在出現(xiàn)的頁(yè)面中,可以得到一個(gè)專(zhuān)屬的鏡像加速地址,類(lèi)似于https://1234abcd.mirror.aliyuncs.com
。然后,根據(jù)頁(yè)面中的“操作文檔”信息,配置自己的Docker加速器。如下圖所示:
阿里云 - 容器Hub服務(wù)控制臺(tái):https://cr.console.aliyun.com
阿里云Docker Hub服務(wù)管理后臺(tái)https://cr.console.aliyun.com/#/imageList,支持創(chuàng)建和管理個(gè)人的Docker鏡像倉(cāng)庫(kù)以及命名空間。如下圖所示:
阿里云docker registry應(yīng)用示例介紹
- 首先需要擁有一個(gè)阿里云帳號(hào),可登錄網(wǎng)站 https://account.aliyun.com/register/register.htm
完成注冊(cè) - 其次,宿主機(jī)需要安裝Docker Engine
- Mac OS系統(tǒng)推薦下載安裝Docker for Mac
- Linux系統(tǒng)請(qǐng)參考地址 https://docs.docker.com/engine/installation/linux 安裝適合自己主機(jī)的Docker Engine
- 然后按照以下說(shuō)明進(jìn)行操作 (以下內(nèi)容參考阿里云Hub服務(wù)使用說(shuō)明)
# 登錄阿里云registry,用戶(hù)名是您的阿里云賬號(hào)全名, 密碼是您開(kāi)通namespace時(shí)設(shè)置的密碼# 你可以在鏡像管理首頁(yè)點(diǎn)擊右上角按鈕修改docker登錄密碼
# [REPOSITORY],[TAG]請(qǐng)根據(jù)自己的鏡像信息進(jìn)行填寫(xiě),比如gtchaos/
hadoop:1.0
# 鏡像版本號(hào)不填的話,默認(rèn)是latest
$ docker login --username=your_aliyun@email.com registry.cn-hangzhou.aliyuncs.com
# 從registry中拉取鏡像
# 例如: docker pull reistry.cn-hangzhou.aliyuncs.com/gtchaos/hadoop
$ docker pull registry.cn-hangzhou.aliyuncs.com/[REPOSITORY]:[TAG]
# 鏡像重命名
# 例如: docker tag registry.cn-hangzhou.aliyuncs.com/gtchaos/hadoop gtchaos/hadoop
$ docker tag registry.cn-hangzhou.aliyuncs.com/[REPOSITORY]:[TAG] [TARGET-IMAGE]:[TAG]
# 用獲取的鏡像實(shí)例化出一個(gè)容器
# 例如: docker run -itd --name hadoop-master gtchaos/hadoop
$ docker run -itd --name CONTAINER IMAGE[:TAG]
# 修改容器并提交作為新的鏡像版本
# 例如: docker commit -m "add start/stop-hadoop server shell" -a "gtchaos" hadoop-master registry.cn-hangzhou.aliyuncs.com/gtchaos/hadoop:1.1
$ docker commit -m "add your words" -a "add your nickname" CONTAINER registry.cn-hangzhou.aliyuncs.com/[REPOSITORY]:[TAG]
# 將新的鏡像版本推送到registry
# 例如: docker push registry.cn-hangzhou.aliyuncs.com/gtchaos/hadoop:1.1
$ docker push registry.cn-hangzhou.aliyuncs.com/[REPOSITORY]:[TAG]
在Mac本地編譯Hadoop源碼
如果你喜歡折騰的話,希望在mac本地編譯安裝Hadoop,請(qǐng)繼續(xù)閱讀本部分,反之,請(qǐng)?zhí)^(guò)。由于Hadoop使用protocol buffer進(jìn)行通信,編譯Hadoop的時(shí)候,需要依賴(lài)庫(kù)libprotoc,因此需要提前編譯protobuf。而在Mac上編譯安裝Hadoop時(shí)必須使用版本號(hào)為2.5.0的protobuf,采用2.5.0以上版本時(shí)Hadoop就會(huì)編譯失?。ㄟ@點(diǎn)本人是踩過(guò)坑的),然而,令人遺憾的是protobuf-2.5.0.tar.gz
已經(jīng)無(wú)法從官網(wǎng) https://code.google.com/p/protobuf/downloads/list 上下載了,本人特此將在別處尋到的protobuf-2.5.0.tar.gz
上傳到百度云盤(pán),以供大家下載,傳送門(mén):http://pan.baidu.com/s/1dFMLXAh。
附:protobuf安裝及hadoop編譯步驟
# 安裝homebrew
ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
# lib庫(kù)安裝
xcode-select --install
# 編譯工具安裝
brew install autoconf automake libtool cmake
# 編譯protobuf2.5.0版本
tar -zxf protobuf-2.5.0.tar.gz
cd protobuf-2.5.0
./configure --prefix=/usr/local/protobuf/
make && make install
# 在終端輸入protoc --version命令,如顯示libprotoc 2.5.0則表示安裝成功。
# 編譯成功后,添加環(huán)境變量
export PROTOBUF="/user/local/protobuf"
export OPENSSL_ROOT_DIR="/usr/local/Cellar/openssl/1.0.2j"
export OPENSSL_INCLUDE_DIR="/usr/local/Cellar/openssl/1.0.2j/lib"
export PATH=$PROTOBUF/bin:$PATH
# 下載hadoop2.8.1源碼包,推薦使用國(guó)內(nèi)Hadoop鏡像地址下載,速度快的驚人!
wget https://mirrors.tuna.tsinghua.edu.cn/apache/hadoop/common/hadoop-2.8.1/hadoop-2.8.1-src.tar.gz# 使用maven編譯
tar zxf hadoop-2.8.1-src.tar.gz
cd hadoop-2.8.1-src
mvn package -Pdist,native -DskipTests -Dtar
# 編譯好的hadoop tar 文件在如下路徑
# hadoop-2.8.1-src/hadoop-dist/target/hadoop-2.8.1.tar.gz
如果使用 brew install 安裝 hadoop,運(yùn)行時(shí)會(huì)報(bào)出 warn 信息,其實(shí)不影響正常操作,如果你有“強(qiáng)迫癥”的話,解決方法是將剛剛在機(jī)器上編譯好的 native (解壓 hadoop-2.8.1.tar.gz 文件,拷貝 lib/native 目錄)文件夾拷貝到$HADOOP_HOME/libexec路徑下。 形如:
/usr/local/Cellar/hadoop/2.8.0/libexec/lib/native
同時(shí)修改 hadoop-env.sh 文件
export HADOOP_OPTS="$HADOOP_OPTS -Djava.net.preferIPv4Stack=true -Djava.library.path=$HADOOP_HOME/libexec/lib/native"
結(jié)束語(yǔ)
工欲善其事,必先利其器,借助強(qiáng)大的Docker工具和shell腳本便可以實(shí)現(xiàn)Hadoop集群的快速部署。希望通過(guò)本文的介紹,能夠掃除大家對(duì)Hadoop集群部署的厭惡心理,建立一套屬于個(gè)人的Hadoop分布式系統(tǒng)基礎(chǔ)環(huán)境,為通往Hadoop的下一關(guān)卡隨時(shí)做好準(zhǔn)備。