ARM平臺搭建Hadoop叢集
/*
Hadoop是Apache旗下主流的大資料計算和儲存框架之一,在近年來應用的越來越廣泛。常規意義上的Hadoop叢集都是搭建在商業伺服器上的,利用大規模櫃式伺服器的強勁硬體資源進行大資料分散式計算。同時Hadoop是由Java編寫的,執行在JVM之上。而Java是跨平臺的,可以“run everywhere”,這就給在ARM平臺上搭建Hadoop叢集帶來了希望。事實上,已經有多家大廠和個人愛好者做出了此類嘗試,Cubieboard製作出了一個相當漂亮的8節點Hadoop叢集(http://cubieboard.org/2013/08/01/hadoophigh-availability-distributed-object-oriented-platform-on-cubieboard/)。由於實際專案需求,我在64位ARM平臺上搭建出了一個三節點的Hadoop叢集。比算力當然比不過商業伺服器,只作為一次有趣的嘗試。
*/
0. 硬體資源和軟體版本介紹
此案例中選用的嵌入式開發板型號是Firefly-RK3399,官網的產品介紹可點選http://www.t-firefly.com/product/rk3399.html。
硬體資源:
– Firefly-RK3399×3,6 核,2GHz主頻,4GB DDR3 RAM,120G eMMC
– 散熱風扇×3,用來超頻後的散熱
– HDMI 線×1,顯示屏x1
– 4口路由器,修改設定當成交換機用,用來給3塊開發板聯網
– 網線×3
軟體版本:
– 作業系統:Ubuntu16.04
– Java 環境:jdk for ARM 8u172
– Hadoop 2.7.6
1. 準備工作
1.1 配置本地hosts
規定叢集一共有三臺裝置,一臺主機和兩臺從機。主節點的主機名改成Master,兩個從節點分別改成Slave1和Slave2。IP地址從192.168.1.50依次往後排到192.168.1.52(IP地址可以自定義)。若再增加一個從機,則繼續新增slave節點。注意在每個裝置上都要進行以下操作。
#進入hosts檔案
sudo gedit /etc/hosts
#將以下內容新增到文字中:
192.168.1.50 Master
192.168.1.51 Slave1
192.168.1.52 Slave2
1.2 更改本機IP地址
在主機上執行以下操作,這裡的閘道器和dns都是192.168.1.1,因為我最終連入網際網路的那個路由器是192.168.1.1。若實際情況不同可作出相應修改。
#修改配置檔案
sudo gedit /etc/network/interfaces
#在文字末尾新增以下內容:
auto eth0
iface eth0 inet static
address 192.168.1.50
netmask 255.255.255.0
gateway 192.168.1.1
dns-nameservers 192.168.1.1
#重啟網路,使配置生效
sudo /etc/init.d/networkin restart
然後在各個從機上也按規定更改為對應的ip地址
使用ping指令在Master主機中進行測試,使用類似指令在Slave上測試,確保兩兩之間一定可以ping通。
ping -c4 Slave1
ping -c4 Slave2
1.3 更改主機名
為更直觀的區分每個節點,修改每個裝置的主機名。進入以下檔案中
sudo gedit /etc/hostname
把原來的主機名刪除
然後新增各自的主機名
Master 或者Slave1或者Slave2
2. 設定ssh免密碼登入
因為Hadoop各個節點之間的管理通訊使用的是ssh,所以要求主節點必須能夠ssh免密登入到所有從節點。下面配置root使用者下的ssh免密登入,所有操作都是在root許可權下。
2.1 修改sshd_config配置
#在檔案中新增:
RSAAuthentication yes
PubkeyAuthentication yes
#然後把PermitRootLogin prohibit改成
PermitRootLogin yes
#重啟ssh服務:
2.2 生成key
一直回車,/root就會生成.ssh資料夾。
2.3 合併公鑰到authorized_keys檔案
這時就能在本機免密碼登入。
ssh localhost
2.4 在從機上進行1、2、3步實現本機免密碼登入
2.5 拷貝key
#把Master的authorized_keys、known_hosts、id_rsa.pub通過ssh複製到Slave1和Slave2的/root/.ssh目錄。
scp authorized_keys known_hosts id_rsa.pub [email protected]:/root/.ssh
scp authorized_keys known_hosts id_rsa.pub [email protected]:/root/.ssh
2.6 完成之後在主機上重啟ssh服務後即可免密碼登入
service ssh restart
2.7 檢證免密登陸
ssh Slave1
ssh Slave2
至此,免密登入的工作已經完成
3. 安裝Hadoop
3.1 將安裝包下載到Master上,/usr/local/目錄下,解壓
tar -zxvf hadoop-2.7.6.tar.gz
3.2 將解壓出來的資料夾改名為hadoop
mv hadoop-2.7.6 hadoop
3.3 在/usr/local/hadoop目錄下建立資料存放的資料夾tmp
mkdir tmp
3.4 配置core-site.xml
此檔案是Hadoop的核心檔案
gedit/usr/local/hadoop/etc/hadoop/core-site.xml
3.5 配置hdfs-site.xml
此配置檔案設定hdfs的一些屬性。dfs.namenode.secondary.http-address是主節點的IP地址和埠號;dfs.replication是備份係數,指每個block在hadoop叢集中有幾份,係數越高,冗餘性越好,但是佔用儲存也越多,預設為3,可以設定為和從節點數相同;dfs.namenode.name.dir和dfs.datanode.data.dir規定了主節點儲存整個檔案系統的檔案目錄樹的目錄。dfs.socket.timeout是hdfs的讀寫超時時間限制。
gedit/usr/local/hadoop/etc/hadoop/hdfs-site.xml
3.6 配置mapred-site.xml
這是規定MapReduce計算屬性的檔案。mapreduce.framework.name規定採用yarn資源管理器進行分散式計算時的資源排程;下面兩個屬性與歷史任務檢視有關。
gedit /usr/local/hadoop/etc/hadoop/mapred-site.xml
3.7 配置yarn-site.xml
gedit/usr/local/hadoop/etc/hadoop/yarn-site.xml
此檔案規定了yarn排程器的一些引數。yarn.resourcemanager.hostname寫主節點(namenode)的主機名;yarn.nodemanager.resource.memory-mb是分散式叢集分配給yarn的最大記憶體空間,單位是MB,此引數要按照叢集的具體情況設定,本叢集三個裝置記憶體均是4GB,酌情分配2/3左右,此值必須大於1024,否則影響程序。
3.8 配置Hadoop環境屬性
修改/usr/local/hadoop/etc/hadoop目錄下hadoop-env.sh、yarn-env.sh的JAVA_HOME,不設定的話,啟動不了:
export JAVA_HOME=/usr/local/java
3.9 配置slaves
gedit /usr/local/hadoop/etc/hadoop/slaves
刪除預設的localhost,增加從節點:
Slave1
Slave2
注意:若再增加一個從機,再繼續新增slave主機名
3.10 配置環境變數:
gedit~/.bashrc
新增:
#HADOOP
exportHADOOP_HOME=/usr/local/Hadoop
exportPATH=$PATH: /usr/local/hadoop/bin:/usr/local/hadoop/sbin
使配置生效:
source~/.bashrc
3.11 傳送Hadoop至其它節點
(從機不需下載安裝包,由主機傳送過去即可,環境變數從機要配置)
將配置好的Hadoop複製到各個節點對應位置上,通過scp傳送:
3.12 啟動Hadoop
在Master伺服器啟動hadoop,從節點會自動啟動。
進入/usr/local/hadoop目錄,初始化,輸入命令:
(格式化只能在搭hadoop的時候在主機初始化一次,後來新增的從節點只能在slave上自己啟動,不能進行格式化):
bin/hdfsnamenode -format
(1)在主機上全部啟動:
sbin/start-all.sh
(2)新增從節點的時候在從機上自己啟動:
/usr/local/hadoop/sbin/hadoop-daemon.shstart datanode
/usr/local/hadoop/sbin/yarn-daemon.shstart nodemanager
3.13 驗證Hadoop
1.jps執行成功結果:
2.測試Web訪問:
致謝
安裝過程中參考了
https://yq.aliyun.com/ziliao/60550
https://blog.csdn.net/laohuang1122/article/details/9953083
等多篇文章,以及來自專案組小夥伴的指導,感謝他們的付出!
Hear me roar!