李小立
(長沙民政職業(yè)技術(shù)學(xué)院 軟件學(xué)院,湖南 長沙 410000)
Hadoop 是一個(gè)由Apache 基金會所開發(fā)的分布式系統(tǒng)基礎(chǔ)架構(gòu),它允許用戶使用簡單的編程模型跨計(jì)算機(jī)集群分布式處理大型數(shù)據(jù)集[1]。其核心組件包括HDFS、Yarn 和MapReduce,其中HDFS 是分布式存儲系統(tǒng),用于提供高可靠性、高擴(kuò)展性和高吞吐率的數(shù)據(jù)存儲服務(wù);Yarn 是資源管理系統(tǒng),負(fù)責(zé)集群資源的統(tǒng)一管理和調(diào)度;MapReduce 是分布式計(jì)算框架,具有易于編程、高容錯(cuò)性和高擴(kuò)展性的優(yōu)點(diǎn)。由于Hadoop 帶有用Java 語言編寫的框架,因此使用Linux 系統(tǒng)搭建Hadoop平臺更具有優(yōu)勢,該文將使用Linux 系統(tǒng)進(jìn)行平臺搭建。
Hadoop 支持在GNU/Linux 系統(tǒng)以及Windows 系統(tǒng)上進(jìn)行安裝使用,在實(shí)際開發(fā)中,由于Linux 系統(tǒng)的便捷性和穩(wěn)定性,Hadoop 集群一般是在Linux 系統(tǒng)上運(yùn)行的。Hadoop 集群的搭建方式分為3 種,包括獨(dú)立模式、偽分布式模式和完全分布式模式。該文將使用三臺虛擬機(jī)搭建一個(gè)偽分布式模式Hadoop 集群。Hadoop 集群的搭建一般需要多臺機(jī)器,從而保證集群的穩(wěn)定性和可靠性,但一般實(shí)驗(yàn)情況下,由于條件限制,通常借助虛擬機(jī)軟件在一臺物理機(jī)上創(chuàng)建多個(gè)Linux 虛擬機(jī)環(huán)境。
使用的軟件包括Vmware Workstation14.0,JDK 1.8,Hadoop2.8.3,Redhat Linux7.0,集群規(guī)劃如表1 所示。
表1 集群規(guī)劃
使用Vmware Workstation 虛擬機(jī)軟件構(gòu)建三臺虛擬機(jī),并安裝RedHat Linux 系統(tǒng),安裝過程該文不進(jìn)行詳細(xì)描述[1]。
1.Linux 系統(tǒng)網(wǎng)絡(luò)配置
設(shè)置每臺虛擬機(jī)的網(wǎng)絡(luò)連接,使用僅主機(jī)的連接模式,并測試網(wǎng)絡(luò)連通性。修改主機(jī)名與IP 地址映射配置,測試三臺主機(jī)之間的連通性,分別在每臺主機(jī)上使用ping 命令去ping 另外兩臺主機(jī)的IP 地址或主機(jī)名。
2.設(shè)置節(jié)點(diǎn)互信
在集群開發(fā)與使用中,主節(jié)點(diǎn)通常會與集群中的其他節(jié)點(diǎn)進(jìn)行通信,由于Linux 系統(tǒng)的安全設(shè)置,在節(jié)點(diǎn)與節(jié)點(diǎn)進(jìn)行訪問時(shí)需要輸入目標(biāo)節(jié)點(diǎn)的用戶名和密碼,因此為了保障集群服務(wù)的連續(xù)運(yùn)行,通過配置SSH 服務(wù)來實(shí)現(xiàn)免密登錄。使用ssh-keygen-t rsa 命令生成秘鑰,并使用sshcopy-id 命令將公鑰拷貝至其他節(jié)點(diǎn)。在每個(gè)節(jié)點(diǎn)都進(jìn)行SSH 服務(wù)配置,配置完成后使用ssh 進(jìn)行訪問測試,此時(shí)可在任意一個(gè)節(jié)點(diǎn)自由切換至其他節(jié)點(diǎn)且不需要輸入用戶名與密碼。
3.為所有節(jié)點(diǎn)配置JDK 和Hadoop
第一步,安裝JDK 與Hadoop。
第二步,配置系統(tǒng)環(huán)境變量,修改/etc/profile 文件,在文件末尾添加JAVA_HOME 與HADOOP_HOME 環(huán)境變量,并修改PATH 環(huán)境變量。修改完配置文件后,使用source/etc/profile 命令使配置生效,并使用 java-version 命令查看JDK 版本信息。
第三步:修改Hadoop 環(huán)境變量
下載并解壓zookeeper-3.3.5.tar 到/hadoop 目錄,將zookeeper-3.3.5.tar 復(fù)制到另外兩臺機(jī)器,每個(gè)節(jié)點(diǎn)創(chuàng)建存放數(shù)據(jù)的目錄/hadoop/data。
1.設(shè)置Zookeeper 相關(guān)配置文件。其中需要注意的是hdfs-site.xml文件,該文件用于設(shè)置HDFS的NameNode 和DataNode 兩大進(jìn)程??稍谠撐募性O(shè)置節(jié)點(diǎn)個(gè)數(shù)及第二個(gè)NameNode 網(wǎng)絡(luò)端口配置。文件中
2.啟動Zookeeper 服務(wù)
修改完所有配置文件后,將配置文件復(fù)制到其他機(jī)器,并為每個(gè)節(jié)點(diǎn)添加id,啟動zk 服務(wù)并查看狀態(tài),然后啟動journalnode,在hdp1 上格式化namenode 節(jié)點(diǎn)及zk,格式化成功后在hdp1 節(jié)點(diǎn)上啟動NameNode 服務(wù)并在備節(jié)點(diǎn)同步主節(jié)點(diǎn)數(shù)據(jù),最后在主節(jié)點(diǎn)上啟動所有服務(wù),啟動成功后在各個(gè)節(jié)點(diǎn)查看服務(wù)啟動狀態(tài)。各節(jié)點(diǎn)服務(wù)啟動狀態(tài)如表2 所示。
表2 節(jié)點(diǎn)服務(wù)器啟動狀態(tài)
為了保證整個(gè)平臺的穩(wěn)定工作,在Zookeeper 引入Watch 機(jī)制,對集群的各個(gè)節(jié)點(diǎn)進(jìn)行監(jiān)聽,當(dāng)集群中的主節(jié)點(diǎn)無法正常工作時(shí),則集群立即啟用備用節(jié)點(diǎn)。該測試將模擬hdp1 節(jié)點(diǎn)故障,查看hdp2 上的NameNode 服務(wù)是否能成功激活。
1.查看hdp1 節(jié)點(diǎn)狀態(tài),如圖1 所示。
2.查看hdp1 及hdp2 上的NameNode 狀態(tài),其中hdp1 為active 狀態(tài),hdp2為standby狀態(tài)。表明當(dāng)前hdp1節(jié)點(diǎn)上的NameNode服務(wù)處于激活狀態(tài)。
3.模擬hdp1 節(jié)點(diǎn)故障,即殺死hdp1 節(jié)點(diǎn)上的NameNode 服務(wù)對應(yīng)的進(jìn)程。查看hdp1 與hdp2 節(jié)點(diǎn)的NameNode 服務(wù)狀態(tài),如圖2 所示。
重新啟動hdp1 節(jié)點(diǎn)的NameNode 服務(wù),查看服務(wù)狀態(tài)。此時(shí),hdp1 節(jié)點(diǎn)的NameNode 服務(wù)已變?yōu)閟tandby。至此,Hadoop平臺及Zookeeper 集群均已準(zhǔn)備就緒。
在hdfs-site.xml 文件中,可設(shè)置進(jìn)行MapReduce 計(jì)算時(shí)數(shù)據(jù)切分的數(shù)據(jù)塊大小,默認(rèn)為128M。在個(gè)人學(xué)習(xí)或測試中,該值設(shè)置過大,一般個(gè)人的測試數(shù)據(jù)大小為KB 或者M(jìn)B 級別。因此,為了進(jìn)行試驗(yàn)對比,該文中將數(shù)據(jù)塊大小修改為1MB,分別使用大小為2.5MB的文件和2KB的文件進(jìn)行詞頻統(tǒng)計(jì)[2],試驗(yàn)結(jié)果對比如表3 所示。
表3 詞頻統(tǒng)計(jì)結(jié)果對比
該文詳細(xì)介紹了Hadoop平臺部署與Zookeeper 集群部署,成功搭建了一個(gè)Hadoop 分布式架構(gòu)平臺,并進(jìn)行了集群測試及詞頻統(tǒng)計(jì)對比實(shí)驗(yàn),為以后大數(shù)據(jù)研究工作提供了一個(gè)實(shí)踐平臺。