基于Docker快速構建Hadoop集群

image.png

很多人在初學Hadoop的時候,都會受阻于Hadoop集群環境的部署,最終放棄治療,僅僅停留在學習分布式系統理論的層面而缺乏動手實踐環節。

為了幫助大家快速構建Hadoop集群,本文提供了一種”即經濟又環保且方便省心”的部署方式,相信你,一定會喜歡的。

一般情況下,大家在個人電腦上學習部署hadoop集群的時候,會借助vmware、virtual box等虛擬機。然而,這些虛擬機有個不好的地方就是占用太多主機資源,除此之外,我們還要為集群內機器建立網絡拓撲關系,實現多機互聯。顯然,這種實踐方式的操作成本是非常高的。

好在最近火熱的Docker容器技術,可以幫助我們省去不少麻煩。Docker不同于VirtualBox等傳統虛機技術,不需要虛擬化硬件資源,基于本機硬件系統,就可以打造出多個沙盒環境,我們可以像使用普通軟件一樣去使用這些沙盒環境,而且它們啟動非常快,彼此獨立運行,互不影響?;谶@些優勢,Docker非常適合用于部署多節點集群(它可以做的事情遠遠不止這些哦)更多有關Docker的知識,大家可以閱讀官方的介紹文檔(https://docs.docker.com)。

為了方便大家快速構建Hadoop分布式系統平臺,本人特制作了一個預裝有Hadoop環境的docker鏡像文件,并基于該鏡像開發了一個實現Hadoop集群快速部署的腳本。大家可訪問鏈https://github.com/gtchaos/docker-for-hadoop獲取腳本內容。

ps: 包含有Hadoop環境的鏡像文件,我已經docker push到了阿里云的docker registry(文章后面會介紹),感興趣的同學,可以按照如下指令獲取該鏡像。

docker pull registry.cn-hangzhou.aliyuncs.com/gtchaos/hadoop:latest

快速構建工具介紹

下面主要介紹構建步驟:

  1. 克隆倉庫
$ git clone https://github.com/gtchaos/docker-for-hadoop.git
  1. 構建集群
# -n 用于指定構建的集群節點數
$ sh build.sh -n 3

附效果圖如下:


  1. 切換到hadoop用戶
    當你成功進入到master容器后,執行如下指令,可切換到hadoop用戶。
root@hadoop-master:~# su hadoop
  1. 啟動Hadoop
hadoop@hadoop-master:~# ./start-hadoop.sh

附效果圖如下:

image.png
  1. 執行wordcount程序
hadoop@hadoop-master:~# ./run-wordcount.sh
  1. 停止Hadoop服務
hadoop@hadoop-master:~# ./stop-hadoop.sh

附效果圖如下:

image.png

通過以上操作,即可快速實現Hadoop集群的快速的部署

Docker國內鏡像

由于Docker官方hub鏡像下載速度極慢,推薦使用國內的docker鏡像服務。目前國內提供Docker鏡像服務的廠商如下:

在此,推薦使用阿里云提供的Docker鏡像加速服務以及針對開發者提供的Docker鏡像倉庫管理服務。

阿里云Docker鏡像加速

阿里云提供上傳、下載、構建及托管的全方位鏡像服務,開發者可以訪問網站http://dev.aliyun.com/search.html 了解更多的內容。

阿里云 - 開發者平臺:https://dev.aliyun.com

注冊并登陸阿里云 - 開發者平臺之后,在首頁點擊“創建我的容器鏡像”,然后就會來到阿里云的服務面板。點擊加速器標簽,根據提示輸入Docker登錄時需要使用的密碼(初次使用時,需要設置Docker登錄密碼),用戶名則是登錄阿里云的用戶名。在出現的頁面中,可以得到一個專屬的鏡像加速地址,類似于https://1234abcd.mirror.aliyuncs.com
。然后,根據頁面中的“操作文檔”信息,配置自己的Docker加速器。如下圖所示:

阿里云 - 容器Hub服務控制臺:https://cr.console.aliyun.com
阿里云Docker Hub服務管理后臺https://cr.console.aliyun.com/#/imageList,支持創建和管理個人的Docker鏡像倉庫以及命名空間。如下圖所示:

阿里云docker registry應用示例介紹

  1. 首先需要擁有一個阿里云帳號,可登錄網站 https://account.aliyun.com/register/register.htm
    完成注冊
  2. 其次,宿主機需要安裝Docker Engine
  3. 然后按照以下說明進行操作 (以下內容參考阿里云Hub服務使用說明)
# 登錄阿里云registry,用戶名是您的阿里云賬號全名, 密碼是您開通namespace時設置的密碼# 你可以在鏡像管理首頁點擊右上角按鈕修改docker登錄密碼
# [REPOSITORY],[TAG]請根據自己的鏡像信息進行填寫,比如gtchaos/
hadoop:1.0
# 鏡像版本號不填的話,默認是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]

# 用獲取的鏡像實例化出一個容器
# 例如: 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,請繼續閱讀本部分,反之,請跳過。由于Hadoop使用protocol buffer進行通信,編譯Hadoop的時候,需要依賴庫libprotoc,因此需要提前編譯protobuf。而在Mac上編譯安裝Hadoop時必須使用版本號為2.5.0的protobuf,采用2.5.0以上版本時Hadoop就會編譯失敗(這點本人是踩過坑的),然而,令人遺憾的是protobuf-2.5.0.tar.gz
已經無法從官網 https://code.google.com/p/protobuf/downloads/list 上下載了,本人特此將在別處尋到的protobuf-2.5.0.tar.gz
上傳到百度云盤,以供大家下載,傳送門:http://pan.baidu.com/s/1dFMLXAh

附:protobuf安裝及hadoop編譯步驟

# 安裝homebrew
ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
# lib庫安裝
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則表示安裝成功。
# 編譯成功后,添加環境變量
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源碼包,推薦使用國內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,運行時會報出 warn 信息,其實不影響正常操作,如果你有“強迫癥”的話,解決方法是將剛剛在機器上編譯好的 native (解壓 hadoop-2.8.1.tar.gz 文件,拷貝 lib/native 目錄)文件夾拷貝到$HADOOP_HOME/libexec路徑下。 形如:

/usr/local/Cellar/hadoop/2.8.0/libexec/lib/native

同時修改 hadoop-env.sh 文件

export HADOOP_OPTS="$HADOOP_OPTS -Djava.net.preferIPv4Stack=true -Djava.library.path=$HADOOP_HOME/libexec/lib/native"

結束語

工欲善其事,必先利其器,借助強大的Docker工具和shell腳本便可以實現Hadoop集群的快速部署。希望通過本文的介紹,能夠掃除大家對Hadoop集群部署的厭惡心理,建立一套屬于個人的Hadoop分布式系統基礎環境,為通往Hadoop的下一關卡隨時做好準備。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容