Docker的Hadoop一鍵啟動之旅

Docker的Hadoop一鍵啟動之旅

大數據、雲端運算這麼夯,數據資料的基礎建設是何等的重要,Hadoop基本上是個分佈式的開源應用程式框架(任意門),除了提供經典的MapReduce的平台,另外還支援分佈式的檔案系統,會說它是經典是因為現在的實務的應用程式已經都轉移到Apache Spark去了,這邊就暫且不提。

 

一般hadoop要有成效,至少要有4台主機以上….因此要建置Hadoop Distributed File System,最簡單的方式,還是透過Docker了

DockerHub上就有公司很友善的提供了Image來讓我們可以建置(試用)Hadoop(支援到Hadoop 2.7版本) …傳送門

看過Hadoop安裝於Linux的許多教學後(從java安裝到node設定,會有點想死),會萬千感謝提供這個Images的善心人士整個弄到可以一鍵安裝

 

廢話不多說,Hadoop Image Docker啟動命令:

sudo docker run -d --name=hadoop-dev-server \
	-p 8020:8020 \
	-p 8030:8030 \
	-p 8040:8040 \
	-p 8042:8042 \
	-p 8088:8088 \
	-p 19888:19888 \
	-p 49707:49707 \
	-p 50010:50010 \
	-p 50020:50020 \
	-p 50070:50070 \
	-p 50075:50075 \
	-p 50090:50090 \
	-p 9000:9000 \
	762e8eefc162 /etc/bootstrap.sh -d

建立好以後我們列表出來所有的container,發現,他已經好好的在運行了。

c93953e56bb6 762e8eefc162 “/etc/bootstrap.sh -d” 9 hours ago Up 9 hours 0.0.0.0:8020->8020/tcp, 2122/tcp, 0.0.0.0:8030->8030/tcp, 0.0.0.0:8040->8040/tcp, 0.0.0.0:8042->8042/tcp, 0.0.0.0:8088->8088/tcp, 0.0.0.0:9000->9000/tcp, 0.0.0.0:19888->19888/tcp, 0.0.0.0:49707->49707/tcp, 0.0.0.0:50010->50010/tcp, 0.0.0.0:50020->50020/tcp, 0.0.0.0:50070->50070/tcp, 0.0.0.0:50075->50075/tcp, 8031-8033/tcp, 0.0.0.0:50090->50090/tcp hadoop-dev-server

註:這個image可以讓我們一鍵啟動Single Node來試著與他的介面試著交互,然而若要實作多node的hadoop,來建立真正的分散式服務,怎麼辦?

一樣透過docker啊,多好,又有人建立了dockerfile(傳送門again),這邊先不談,先把基礎環境建立與操作方法做一篇記錄:

 

這裡面有好多port都bind出來了,但僅介紹一些常用Port,有部分Port估計是分散式架構下在用的,首先是50070,這個是Web介面,除了可以看到Hadoop Service的運行狀態,空間使用狀況,還可以看到檔案目錄清單

接著是9000,預設HDFS協定的Port,等等我們立馬來使用看看

Hadoop的檔案系統的使用方式,我知道有2種(有沒有其他方式,待後續一探究竟)

一種就是透過Web的方式,Python裡面可以安裝WebHDFS套件,透過http://xxxxx:50070,實際上是透過Restful Api進行檔案傳輸

而另一個就是直接透過hdfs協定,然而,要透過HDFS協定,就要先安裝Hadoop的程式,官網

(注意版本…目前Hadoop 2.7版本,請下載盡量相近的Hadoop版本,我就有遇到用太舊的hadoop程式去連2.7版的,出現的錯誤訊息是IPC version 9 cannot communicate with client version 4,追查了一下發現只是版本太舊的問題,透過以下下載安裝方式,就可以解決了)

這一塊因為必須具備Hdfs 的driver,所以必須要有相關的環境,像我在windows 上跑的python就因為driver問題,而選擇透過webhfds來交互

 

這次我下載的是hadoop-2.6.5 binary的版本(我之前去下載一些舊版本的hdfsclient的程式,就有遇到過不相容的狀況)

#wget http://apache.stu.edu.tw/hadoop/common/hadoop-2.6.5/hadoop-2.6.5.tar.gz

#tar -xzcf hadoop-2.6.5.tar.gz

經過一連串解壓以後,我們多了一個Hadoop 2.6.5的目錄,然而,Hadoop的程式是透過Java 寫的,所以要運行起來的話,Java 環境也是必要安裝

一種是透過手動的方式配置,詳細記錄如下:

tar -zxvf /home/paul/download/jdk-8u144-linux-x64.tar.gz -C /usr/local
mv /usr/loca/jdk-8u144-linux-x64.tar.gz /usr/local/jdk
sudo /etc/profile.d/development.sh

# 加入以下內容
JAVA_HOME=/usr/local/jdk
CLASSPATH=.:$JAVA_HOME/lib
PATH=$JAVA_HOME/bin:$PATH
export JAVA_HOME CLASSPATH PATH

# 立即生效
. /etc/profile
ln -s -f /usr/local/jdk/bin/java /usr/bin/java
ln -s -f /usr/local/jdk/bin/javac /usr/bin/javac

# 關閉selinux
sudo nano /etc/selinux/config
# 將SELINUX=enforcing改為SELINUX=disable
# 查看java版本
java -version

另一種就是透過centos的方式安裝

#sudo yum install java

#java -version

印出以下代表運行java 該有的環境已經有了

openjdk version “1.8.0_141”
OpenJDK Runtime Environment (build 1.8.0_141-b16)
OpenJDK 64-Bit Server VM (build 25.141-b16, mixed mode)

然後,我們立即對我們的容器進行hdfs連結

#cd ~/hadoop-2.6.5/bin

#./hdfs dfs -ls hdfs://localhost:9000/

註:若透過後者easy_install的方式安裝java,執行hadoop時若有出現JAVA_HOME未配置的話,就要再export JAVA_HOME=/usr/local/jdk就可以了

若有顯示檔案根目錄(理論上跟web:50070所看到的目錄結構應該要一致)

Found 3 items
drwxr-xr-x – root supergroup 0 2017-06-27 16:39 hdfs://localhost:9000/exchange
drwxr-xr-x – root supergroup 0 2017-07-26 11:28 hdfs://localhost:9000/upload_files
drwxr-xr-x – root supergroup 0 2015-07-22 23:17 hdfs://localhost:9000/user

那就代表大功告成啦啦啦啦,後續直接對這個檔案系統操作的話,再參考相關指令集教學

例如上傳檔案的話,可以透過

~/hadoop-2.6.5/bin/hdfs dfs -put ~/test.txt hdfs://localhost:9000/upload_files

不過,馬上就會面臨到權限問題:

put: Permission denied: user=paul, access=WRITE, inode=”/test.txt._COPYING_”:root:supergroup:drwxr-xr-x

web就可以直接指定root,但linux連過去會依目前的使用者作為user

因此,可以得知,只要su到root,再執行/home/paul/hadoop-2.6.5/bin/hdfs dfs -put /home/paul/test.txt hdfs://localhost:9000/upload_files就可以了

drwxr-xr-x – root supergroup 0 2017-07-26 11:50 hdfs://localhost:9000/upload_files/exchange
-rw-r–r– 3 root supergroup 5 2017-07-27 01:29 hdfs://localhost:9000/upload_files/test.txt

至於要怎麼解決這個問題,包含透過使用者有自行的目錄權限,就還需要再研究了,等明天看看吧…時候不早了..

待閱讀:hadoop權限問題參考

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *