陳新華
摘要:Hadoop系統是優秀的大數據處理系統,具有分布式存儲和處理數據的能力,其應用環境的部署相對比較復雜,文章提出一種自動化部署Hadoop的解決方案。通過編寫自動化部署Hadoop的shell腳本,可以快速部署Hadoop大數據平臺,顯著降低了Hadoop集群部署的復雜度及時間成本。
關鍵詞:自動化部署;大數據平臺;Hadoop集群
中圖分類號:TP393 文獻標識碼:A
文章編號:1009-3044(2019)08-0221-03
1 概述
隨著信息技術的發展,越來越多的信息以數字形式在信息系統中傳輸、處理和存儲。在信息技術快速發展的今天,人類以正在以前所未有的速度產生數據,除了信息系統的運行產生大量數據,現在每個人在每天的生活中都會產生很多的數據(例如工作中產生的數據、電話通信、交通導航、新聞閱覽、消費記錄、評論、留言、工作過程等),大數據就成為這個高科技時代的產物。大數據是云計算、智慧城市的基礎,同時大數據也為人工智能提供數據基礎。Hadoop作為開源的大數據處理系統,為數據的存儲和處理提供了技術平臺,為了解決Hadoop系統應用中配置管理的復雜性問題,本文通過shell編程,提供了一種自動化配置管理Hadoop的方法,減少了配置難度,提升了Hadoop平臺的部署速度。
2 HADOOP簡介
Hadoop是一套開源的軟件平臺,利用服務器集群,根據用戶的自定義業務邏輯,對海量數據進行分布式處理。Hadoop的主要目標是對分布式環境下的“大數據”以一種可靠、高效、可伸縮的方式處理。
Hadoop的MapReduce和HDFS的核心設計,使得整個框架能夠自動處理節點故障。MapReduce提供了對數據的計算,HDFS提供了海量數據的存儲。Hadoop能夠輕松處理PB級的海量數據。
HDFS(Hadoop Distributed File System)是為Hadoop項目開發的文件系統,它采用(master/slave)架構。HDFS由一個NameNode和眾多DataNode組成。HDFS以文件格式為用戶存儲數據提供相應的文件名稱空間。通常情況下,HDFS將這些文件分成幾個文件塊,這些文件塊被存儲在一組數據服務中。然后由NameNode提供基本功能,如打開、關閉和重命名文件和目錄,同時負責將文件塊映射到DataNode節點上。由DataNode負責響應客戶端具體文件的讀寫操作,同時處理NameNode節點發來的建立、刪除和備份數據塊的請求。Hadoop平臺架構如圖1所示。
Hadoop平臺的部署形式可分為三類:獨立模式,偽分布模式和完全分布模式(標準集群模式)。根據研究項目的要求,建立企業大數據Hadoop平臺必須使用完全分布式模式。
Hadoop的部署方式目前以手動部署居多。手動部署缺點較多,主要表現在部署耗時多、容易出現錯誤、對操作人員的技術水平要求高、部署過程既不可重復也不可靠、需要維護額外的文檔。
本文提出一種自動化部署Hadoop的解決方案。通過編寫shell腳本,可以快速實現自動化部署Hadoop大數據平臺,大大降低了Hadoop集群部署的復雜度、縮減了部署的時間成本。在一定程度上彌補了手動部署的缺點。
3 自動化部署程序的設計與實現
3.1 shell工具介紹
Shell提供了用戶和內核進行交互操作的一種接口。同時,Shell也是一個命令解釋器,它解釋由用戶輸入的命令并且把它們送到內核。不僅如此,Shell有自己的編程語言用于對命令的編輯,它允許用戶編寫由 shell 命令組成的程序。UNIX/Linux 操作系統下的Shell既是用戶交互的界面,也是控制系統的腳本語言。
本文利用shell編寫自動化部署腳本。
3.2 自動化部署shell腳本的實現
自動化部署shell腳本的實現主要依據hadoop平臺的部署步驟,將每一個步驟編寫為shell腳本,最后形成一個shell腳本文件。下文以一個master節點,兩個slave節點,共三個節點組成的hadoop集群為例進行展示。
1) 配置SSH免密登錄。腳本如下:
[#修改hosts文件,配置主機名與ip的映射。
echo "IP地址 master" >> /etc/hosts
echo " IP地址slave1" >> /etc/hosts
echo " IP地址slave2" >> /etc/hosts
#下載安裝expect。
yum install expect –y
#生成秘鑰。
echo |ssh-keygen -t rsa
#需要配置的主機名。
SERVERS="master slave1 slave2"
#需要配置的主機登錄密碼。
PASSWORD=123456
#將本機生成的公鑰復制到其他節點上。
ssh_copy_id_to_all(){
for SERVER in $SERVERS
do
auto_ssh_copy_id $SERVER $PASSWORD
done
} ]
2) 配置每臺服務器的hosts文件。腳本如下:
[#在master上配置hosts文件,再將配置好的hosts文件發送給slave1,slave2。
scp /etc/hosts slave1:/etc
scp /etc/hosts slave2:/etc ]
3) 創建目錄并安裝hadoop和jdk軟件。腳本如下:
[#為集群中節點的hdfs的NameNode、DataNode及臨時文件在用戶目錄下創建目錄。
mkdir -p /home/data/hdfs/data /home/data/hdfs/tmp /home/data/hdfs/name
#解壓軟件包并將解壓后的包移動到相應的目錄下。
tar -zxvf jdk-8u171-linux-x64.tar.gz
mv jdk1.8.0_171 /usr/local/
tar -zxvf hadoop-2.7.6.tar.gz
mv hadoop-2.7.6 /home/data/hdfs/data ]
4) 配置環境變量。
java環境變量配置腳本如下:
[grep -q "export PATH=" /etc/profile
if [ $? -ne 0 ]; then
#末行插入
echo 'export PATH=$PATH:$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$HADOOP_HOME/bin'>>/etc/profile
else
#行尾添加
sed -i '/^export PATH=.*/s/$/:\$JAVA_HOME\/bin/' /etc/profile
fi
grep -q "export JAVA_HOME=" /etc/profile
if [ $? -ne 0 ]; then
#導入配置
filename="$(ls /usr/local | grep '^jdk.*[^rpm | gz]$' | sed -n '1p')"
sed -i "/^export PATH=.*/i\export JAVA_HOME=\/usr\/local\/jdk1.8.0_171$filename" /etc/profile
sed -i '/^export PATH=.*/i\export CLASSPATH=$JAVA_HOME/lib:$JAVA_HOME/jre/lib' /etc/profile
#echo "export JAVA_HOME=/usr/local/$filename">>/etc/profile
#echo 'export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar'>>/etc/profile
else
#替換原有配置
filename="$(ls /usr/local | grep '^jdk.*[^rpm | gz]$' | sed -n '1p')"
sed -i "s/^export JAVA_HOME=.*/export JAVA_HOME=\/usr\/local\/$filename/" /etc/profile
fi
source /etc/profile
echo"7"
source /etc/profile
echo"8" ]
hadoop環境變量配置腳本如下:
[grep -q "export HADOOP_HOME=" /etc/profile
if [ $? -ne 0 ]; then
#在PATH前面一行插入HADOOP_HOME
sed -i '/^export PATH=.*/i\export HADOOP_HOME=\/home\/data\/hdfs\/data\/hadoop-2.7.6' /etc/profile
else
sed -i 's/^export HADOOP_HOME=.*/export HADOOP_HOME=\/home\/data\/hdfs\/data\/hadoop-2.7.6:' /etc/profile
fi
source /etc/profile
echo"9"
source /etc/profile ]
加載,使slave的環境變量生效。
[scp /etc/profile slave1:/etc
scp /etc/profile slave2:/etc
ssh slave1 source /etc/profile
ssh slave2 source /etc/profile ]
5) 共享Hadoop配置文件。
hadoop-2.7的配置目錄,依次修改core-site.xml、hdfs-site.xml、mapred-site.xml、yarn-site.xml以及slaves文件。腳本如下:
[#將整個hadoop-2.7.6文件夾及其子文件夾復制到slave1和slave2的相同目錄中。
scp –r /home/data/hdfs/data/hadoop-2.7.6/root@slave1:/home/data/hdfs/data
scp –r /home/data/hdfs/data/hadoop-2.7.6/root@slave2:/home/data/hdfs/data ]
6) 啟動hadoop服務。腳本如下:
[#格式化namenode
/home/data/hdfs/data/hadoop-2.7.6/bin/hadoop namenode –format
#啟動hadoop進程
/home/data/hdfs/data/hadoop-2.7.6/sbin/hadoop-daemon.sh start namenode
/home/data/hdfs/data/hadoop-2.7.6/sbin/hadoop-daemon.sh start datanode
/home/data/hdfs/data/hadoop-2.7.6/sbin/hadoop-daemon.sh start secondarynamenode
/home/data/hdfs/data/hadoop-2.7.6/sbin/yarn-daemon.sh start resourcemanager
#在slave節點上啟動hadoop進程
ssh slave1 /home/data/hdfs/data/hadoop-2.7.6/sbin/yarn-daemon.sh start nodemanager
ssh slave2 /home/data/hdfs/data/hadoop-2.7.6/sbin/yarn-daemon.sh start nodemanager ]
4 基于HADOOP的企業大數據平臺自動化部署測試
4.1 測試網絡拓撲結構設計
測試環境搭建的是hadoop三節點集群,包含一臺master節點,兩臺slave節點。
實驗室環境中Hadoop集群的拓撲結構如圖2所示。
ip地址和主機名規劃如表1所示。
4.2 測試環境準備
1)操作系統鏡像選擇的是rhel-server-7.0-x86_64-dvd.iso,也可以選擇Ubuntu、CentOS等。
2)軟件選擇Hadoop2.7.6和jdk1.8.0_171。
4.3 基于HADOOP的企業大數據平臺的自動化部署
1) 執行hadoop.sh腳本文件。
將以上腳本寫入一個名為hadoop.sh的腳本文件,并在master節點上使用下列命令執行該腳本文件。
[root@master ~]# . /hadoop.sh
2) 運行jps查看服務啟動情況。
腳本文件運行結束后,即可用jps查看hadoop服務啟動情況。
[root@master ~]# jps
3) 查看UI管理界面
登錄http://192.168.127.130:50070查看YARN管理界面,如圖3所示。
可以看出三節點集群的hadoop大數據平臺自動化部署成功。
5 總結
Hadoop作為大數據分析平臺被企業廣泛應用,但其部署過程復雜、耗時長、技術要求高。本文以企業大數據平臺的部署為研究對象,提出使用自動化部署來改善手動部署的缺點,編寫了自動化部署文件,并在三節點的hadoop集群上進行了自動化部署測試。測試結果顯示,自動化部署將部署時間從5~6小時縮減至5~10分鐘,顯著地降低了部署的時間成本,而且對部署人員的技術要求也不高。
參考文獻:
[1] 孟源北.支持自動化Hadoop安裝部署的研究[J].信息通信,2013(8):20.
[2] 于金良,朱志祥,李聰穎.Hadoop平臺的自動化部署與監控研究[J].計算機與數字工程,2016(12):2457-2461.
[3] 劉萍.基于Hadoop與Spark的大數據處理平臺的構建研究[J].通化師范學院學報,2018(30):83-88.
[4] 孟永偉,黃建強,曹騰飛,王曉英.Hadoop集群部署實驗的設計與實現[J].實驗技術與管理,2015(1):145-149.
【通聯編輯:王力】