孔瑞平 天津工業(yè)職業(yè)學(xué)院
1.Hadoop 框架
Hadoop 是Apache 旗下的一個(gè)分布式計(jì)算的開源平臺(tái),它詳細(xì)的為用戶提供了系統(tǒng)底層的細(xì)節(jié),是一種分布式的基礎(chǔ)架構(gòu)。Hadoop 框架是采用JAVA 語(yǔ)言來編寫的,因此它具有較好的跨平臺(tái)性,且能夠很好的適用于各種廉價(jià)的集群中。
分布式文件系統(tǒng)HDFS 和分布式計(jì)算系統(tǒng)MR 是Hadoop 框架中兩個(gè)較為重要的組件,重要應(yīng)用在于這兩個(gè)重要組件的分布式處理功能。由于Hadoop 框架具有的明顯優(yōu)點(diǎn),各個(gè)領(lǐng)域中已逐步在采用Hadoop 來處理大量的企業(yè)歷史數(shù)據(jù)等,其中以互聯(lián)網(wǎng)行業(yè)為主。目前,國(guó)內(nèi)大量應(yīng)用Hadoop框架來完成數(shù)據(jù)處理的主要有淘寶、中國(guó)移動(dòng)、京東、華為和百度等大型網(wǎng)站。
2.Hadoop 核心組件
(1)MapReduce(分布式計(jì)算系統(tǒng)):MR 主要負(fù)責(zé)作業(yè)的批處理和分布式的計(jì)算,完成了海量數(shù)據(jù)的大量計(jì)算和處理工作。
(2)HDFS(分布式存儲(chǔ)系統(tǒng)):采用HDFS 實(shí)現(xiàn)了超大數(shù)據(jù)集的存儲(chǔ),可采用廉價(jià)的成千上百臺(tái)普通服務(wù)器同時(shí)存儲(chǔ)大量數(shù)據(jù)。實(shí)際上,海量數(shù)據(jù)是同時(shí)存儲(chǔ)在很多臺(tái)分布式的主機(jī)中,實(shí)現(xiàn)了在集群主機(jī)之間很好的通過網(wǎng)絡(luò)共享文件系統(tǒng),但在用戶看來仍像是存儲(chǔ)在同一臺(tái)主機(jī)中。
(3)YARN:屬于Hadoop 框架的資源調(diào)度系統(tǒng),它主要負(fù)責(zé)調(diào)度集群中各主機(jī)的CPU、內(nèi)存等資源。
(4)HBase:是一種分布式的超大型數(shù)據(jù)庫(kù),用戶在處理數(shù)據(jù)時(shí)主要依賴HBase 來實(shí)現(xiàn)隨機(jī)讀寫操作,而HDFS 只是實(shí)現(xiàn)了順序讀寫,不是真正意義上的存儲(chǔ)。
(5)Spark:Spark 的邏輯和MR 類似,不同點(diǎn)在于MR 是基于硬盤方面的計(jì)算,而Spark 框架是內(nèi)存方面的計(jì)算,所以從一定程度上來說,Spark 框架的性能占有優(yōu)勢(shì)。
(6)Hive:它主要實(shí)現(xiàn)了數(shù)據(jù)倉(cāng)庫(kù)的作用。數(shù)據(jù)倉(cāng)庫(kù)一般主要用于存儲(chǔ)海量的歷史數(shù)據(jù),用于企業(yè)決策、統(tǒng)計(jì)分析等情況下,從多種維度出發(fā)使用、分析、統(tǒng)計(jì)數(shù)據(jù),最終滿足用戶的數(shù)據(jù)處理要求。Hive 的功能主要是基于MR,把SQL 語(yǔ)句轉(zhuǎn)換為相應(yīng)的MR 作業(yè)。
(7)Flume:主要用做日志收集,負(fù)責(zé)收集分析流式數(shù)據(jù)時(shí)產(chǎn)生的眾多實(shí)時(shí)流數(shù)據(jù)。
1.安裝VMware 虛擬機(jī)
本部署采用的是VMware 14 版本的虛擬機(jī),它要求本地主機(jī)的CPU 必須要支持虛擬化功能。按照步驟,設(shè)置虛擬機(jī)名稱、指定磁盤容量(如果機(jī)器許可, 可以設(shè)置為略大的空間,如30G)。為了性能考慮,將虛擬機(jī)磁盤存儲(chǔ)為單個(gè)文件,并進(jìn)行光驅(qū)的鏡像索引。結(jié)合本機(jī)的性能設(shè)置,選擇合適的處理器數(shù)量和每個(gè)處理器的內(nèi)核數(shù)量,完成一系列的配置后成功安裝虛擬機(jī)軟件。
2.安裝centos7 系統(tǒng)
本文以centos7 版本進(jìn)行研究,在安裝centos7 之前,需要保證BIOS 中虛擬化功能已正確打開。若虛擬機(jī)正確安裝后,但打開時(shí)沒有反應(yīng),一般是 Windows 防火墻的問題。首先要把防火墻關(guān)閉,如果表現(xiàn)正常了,再將VMware 加入到防火墻的例外中。
安裝CentOS 7 按需設(shè)置虛擬機(jī)的主機(jī)名、啟動(dòng)后設(shè)置等,安裝成功后,能夠正常打開圖形化的Linux 桌面。然后,選擇合適的網(wǎng)絡(luò)工作模式,進(jìn)行虛擬機(jī)網(wǎng)絡(luò)配置:當(dāng)你的電腦所處網(wǎng)絡(luò)不是DHCP方式,而是為每臺(tái)虛擬機(jī)固定IP 地址,采用NAT 模式。滿足以上條件,但仍上不去外網(wǎng),改用橋接方式,橋接方式需要處在DHCP 環(huán)境下,否則不設(shè)置靜態(tài)IP 地址,則不能連通網(wǎng)絡(luò)。配置完成后打開終端,測(cè)試網(wǎng)絡(luò)的連通性,達(dá)到虛擬機(jī)能和本地主機(jī)、外網(wǎng)之間都能夠正常通信。
按照以上方法,需要準(zhǔn)備好三臺(tái)虛擬主機(jī),主機(jī)名分別為:master、slave1 和slave2,并確保三臺(tái)虛擬主機(jī)之間的網(wǎng)絡(luò)是連通的。
在部署Hadoop 之前,必須要明確其安裝方式,按照確定的運(yùn)行模式進(jìn)行相應(yīng)的環(huán)境變量等配置,完成Hadoop 平臺(tái)的部署。
1.選擇運(yùn)行模式
在單機(jī)模式下,程序都運(yùn)行同一個(gè)主機(jī)中。開發(fā)階段大多會(huì)選用單機(jī)模式來調(diào)試和運(yùn)行程序;在集群模式中,將使用虛擬環(huán)境安裝多個(gè)虛擬主機(jī),來模擬一個(gè)集群中的多臺(tái)主機(jī)。
2.運(yùn)行 Hadoop 的用戶
一般情況下,需要指定系統(tǒng)的用戶來操作Hadoop 集群,本集群中三臺(tái)虛擬主機(jī)都默認(rèn)使用stu 用戶 。
3.相關(guān)配置
Hadoop 框架主要使用XML 文件,來配置Hadoop 生態(tài)系統(tǒng)中的眾多組件,其中部分關(guān)鍵的XML 配置文件如下。
(1)core-site.xml:屬于hadoop 的核心配置文件 。
(2)hdfs-site.xml:是HDFS 組件的配置文件,主要用于完成HDFS 的相關(guān)配置。
(3)mapred-site.xml:是MR 組件的配置文件。
(4)yarn-site.xml:是YARN 組件的配置文件, 主要用于完成YARN 的相關(guān)配置。
以上XML 配置文件,全部保存在Hadoop 框架安裝路徑中的etc/hadoop 子目錄下。
在master 虛擬主機(jī)中,默認(rèn)都是使用stu 用戶來操作。
1.通過Xshell 軟件,把Hadoop 的安裝包上傳到master 主機(jī)下的相應(yīng)目錄中。
2.通過tar 命令解壓至安裝的目錄中:tar zvxf 安裝文件的名稱。
3.配置JDK:基于JAVA 語(yǔ)言的Hadoop 框架,需要JDK 運(yùn)行環(huán)境。Hadoop 局限于某個(gè)用戶,如果這個(gè)用戶在登錄后未進(jìn)到shell的情況下需要環(huán)境生效,就需要同時(shí)配置.bash_ profile 文件。經(jīng)修改后,需要通過source 命令使得設(shè)置的環(huán)境變量生效。
4.配置虛擬機(jī)的環(huán)境變量
(1)配置 Hadoop 的 環(huán)境變量:在hadoop-env.sh 文件的JAVA_HOME 變量中,中加入JDK 的安裝路徑。命令為:export JAVA_HOME=/usr/java/jdk1.8.0_211。
(2)配置 Linux 的環(huán)境變量:編輯./bash_profile 文件,增加JAVA_HOME 和HADOOP_HOME 目錄,在PATH 路徑中添加JAVA_HOME/bin, HADOOP_HOME/bin, HADOOP_HOME/sbin。最后,使用source 命令讓環(huán)境變量生效。
5.運(yùn)行和驗(yàn)證:以stu 用戶來驗(yàn)證環(huán)境變量是否設(shè)置成功,使用命令hadoop version 來驗(yàn)證。
按照(一)中方法部署好master 虛擬主機(jī)后,打開master 主機(jī),將已配置成功的hadoop 配置文件復(fù)制到集群中其他虛擬主機(jī)slave1 和slave2 中。復(fù)制完成后,所有虛擬主機(jī)的環(huán)境配置均完成,各虛擬主機(jī)相互之間的網(wǎng)絡(luò)也是互通的。最后,通過jps 命令查看集群中三臺(tái)虛擬主機(jī)的守護(hù)進(jìn)程,來驗(yàn)證Hadoop 部署是否成功。
為了實(shí)現(xiàn)集群中主機(jī)之間快速、方便的實(shí)現(xiàn)遠(yuǎn)程訪問、批量復(fù)制文件等操作,本集群中的三臺(tái)虛擬主機(jī)必須正確實(shí)現(xiàn)ssh 免密登錄的功能。
免密登錄的實(shí)現(xiàn)思路如下。
1.為master 虛擬主機(jī)生成公鑰、私鑰文件:使用ssh-keygen-t rsa 命令。命令執(zhí)行后,回車三次,分別設(shè)置秘鑰的存儲(chǔ)路徑和密碼等。
2.將master 主機(jī)的公鑰內(nèi)容,復(fù)制給slave1 主機(jī),并追加到其authorized_keys 文件下,從而實(shí)現(xiàn)了master 主機(jī)在遠(yuǎn)程登錄slave1 主機(jī)時(shí)不再需要輸入賬號(hào)和口令。復(fù)制命令為:scp ~/.ssh/authorized_keys stu@slave1:~/。
3.接著為slave1 主機(jī)生成公鑰與私鑰, 同樣把該公鑰的文件復(fù)制給slave2 主機(jī),并追加到其authorized_keys 文件下,從而實(shí)現(xiàn)了master 和slave1 主機(jī)在遠(yuǎn)程登錄slave2 主機(jī)時(shí)不再需要輸入賬號(hào)和口令。復(fù)制命令為:scp ~/.ssh/authorized_keys stu@slave2:~/。
4.復(fù) 制slave2 主 機(jī) 的authorized_keys 文 件,給master 與slave1 主機(jī),并存于.ssh 目錄目錄下,成功覆蓋兩臺(tái)接收主機(jī)的已有的authorized_keys 文件內(nèi)容。命令如下:
scp authorized_keys stu@slave1:~/.ssh/
scp authorized_keys stu@master:~/.ssh/
5.驗(yàn)證免密是否實(shí)現(xiàn)之前,需要先檢查master、slave1 和slave2 三臺(tái)主機(jī)中秘鑰文件的權(quán)限。在master、slave1 和slave2 每臺(tái)虛擬主機(jī)中的.ssh/目錄下, 使用ls -l, authorized_keys 查看,確保各自的秘鑰文件的權(quán)限都必須是600,否則使用chmod 進(jìn)行修改。
6.經(jīng)以上設(shè)置后,最后分別在三臺(tái)虛擬主機(jī)中查看authorized_keys 文件中的內(nèi)容, 此時(shí)該秘鑰中包含了三臺(tái)主機(jī)的公鑰信息,在master、slave1、slave2 分別進(jìn)行查看: cat /home/stu/.ssh/authorized_keys。
7.驗(yàn)證ssh 免密登錄:在三臺(tái)虛擬主機(jī)的終端中, 分別執(zhí)行以下命令: ssh master、ssh slave1、ssh slave2,查看是否自動(dòng)的遠(yuǎn)程登錄到了其他主機(jī)中。
經(jīng)驗(yàn)證后,三臺(tái)主機(jī)之間進(jìn)行遠(yuǎn)程登錄時(shí),都不再需要輸入對(duì)方的密碼,即可直接操作對(duì)方,最終實(shí)現(xiàn)了集群的ssh 免密登錄。
若以上設(shè)置沒有問題,仍不能遠(yuǎn)程訪問彼此,需要檢查各虛擬機(jī)的防火墻是否處于關(guān)閉狀態(tài),關(guān)閉防火墻操作, CentOS 7 的防火墻以系統(tǒng)服務(wù)的形式存在,建議在root 用戶下執(zhí)行關(guān)閉操作,以上集群中的三臺(tái)虛擬主機(jī)都需要執(zhí)行該操作。
本文探討了虛擬環(huán)境下Hadoop 集群的快速部署方法,從單機(jī)模式向集群模式進(jìn)行遞進(jìn)式的探討,實(shí)現(xiàn)了Hadoop 集群的快速部署。