1. 程式人生 > >ARM平臺搭建Hadoop叢集

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!