大多數(shù)管理員都是從Apache Hadoop開始學習。筆者最開始也使用Apache版本Hadoop進行開發(fā)和部署工作,但接觸到Cloudera CDH后,我發(fā)現(xiàn)它可以使管理員的工作更簡單,不僅可以獲得最新的特性和Bug修復(fù),有時也會帶來令人驚喜的性能改善。
接觸Hadoop有兩年的時間了,期間遇到很多的問題,既有經(jīng)典的NameNode和JobTracker內(nèi)存溢出故障,也有HDFS存儲小文件問題,既有任務(wù)調(diào)度問題,也有MapReduce性能問題.遇到的這些問題有些是Hadoop自身的缺陷(短板),有些則是使用的不當。
在解決問題的過程中,有時需要翻源碼,有時會向同事、網(wǎng)友請教,遇到復(fù)雜問題則會通過mail list向全球各地Hadoop使用者,包括Hadoop Committer(Hadoop開發(fā)者)求助。在獲得很多人幫助后,自己將遇到問題和心得整理成文,希望本文可以對那些焦頭爛額的Hadoop新手們有所幫助,少走筆者的彎路。
PS. 本文基于 Cloudera CDH 3u4(同Apache Hadoop 1.0)編寫。相關(guān)推薦配置為官方推薦值或者筆者經(jīng)驗數(shù)值,它不是絕對的,可能會因為不同的應(yīng)用場景和硬件環(huán)境有所出入。
1. 選擇Cloudera CDH部署你的Cluster
動機
大多數(shù)管理員都是從Apache Hadoop開始學習。筆者最開始也使用Apache版本Hadoop進行開發(fā)和部署工作,但接觸到Cloudera CDH后,我發(fā)現(xiàn)它可以使管理員的工作更簡單,不僅可以獲得最新的特性和Bug修復(fù),有時也會帶來令人驚喜的性能改善。
CDH為什么更好?筆者羅列了以下幾點:
CDH基于穩(wěn)定版Apache Hadoop,并應(yīng)用了最新Bug修復(fù)或者Feature的Patch。Cloudera常年堅持季度發(fā)行Update版本,年度發(fā)行Release版本,更新速度比Apache官方快,而且在實際使用過程中CDH表現(xiàn)無比穩(wěn)定,并沒有引入新的問題。
Cloudera官方網(wǎng)站上安裝、升級文檔詳細,省去Google時間。
CDH支持Yum/Apt包,Tar包,RPM包,Cloudera Manager四種方式安裝,總有一款適合您。官方網(wǎng)站推薦Yum/Apt方式安裝,筆者體會其好處如下:
聯(lián)網(wǎng)安裝、升級,非常方便。當然你也可以下載rpm包到本地,使用Local Yum方式安裝。
自動下載依賴軟件包,比如要安裝Hive,則會級聯(lián)下載、安裝Hadoop。
Hadoop生態(tài)系統(tǒng)包自動匹配,不需要你尋找與當前Hadoop匹配的Hbase,F(xiàn)lume,Hive等軟件,Yum/Apt會根據(jù)當前安裝Hadoop版本自動尋找匹配版本的軟件包,并保證兼容性。
自動創(chuàng)建相關(guān)目錄并軟鏈到合適的地方(如conf和logs等目錄);自動創(chuàng)建hdfs, mapred用戶,hdfs用戶是HDFS的最高權(quán)限用戶,mapred用戶則負責mapreduce執(zhí)行過程中相關(guān)目錄的權(quán)限。
推薦指數(shù):★★★
推薦理由:獲取最新特性和最新Bug修復(fù);安裝維護方便,節(jié)省運維時間。
2. Hadoop集群配置與管理
安裝和維護Hadoop集群涉及大量的管理工作,包括軟件安裝,設(shè)備管理(crontab、iptables等)、配置分發(fā)等。
對于小型集群軟件分發(fā)和節(jié)點管理可以使用PDSH這款軟件,它可以通過免密鑰的SSH將文件分發(fā)到目標服務(wù)器,以及為一組目標設(shè)備發(fā)送命令并獲得反饋。如果是大型集群或者硬件配置差別很大的集群,推薦使用puppet這樣的工具幫助你維護配置文件,或者通過Cloudera Manager以GUI的方式的管理集群(注意:Clodera Manager不是開源軟件,免費版最多支持50個節(jié)點)。
推薦指數(shù):★★★
推薦理由:提高運維效率
3. 開啟SecondaryNameNode
SecondaryNameNode(下稱SNN)的主要功能是工作是幫助NameNode(下稱NN)合并編輯日志,然后將合并后的鏡像文件copy回NN,以減少NN重啟時合并編輯日志所需的時間。SNN不是NN的熱備,但是通過以下步驟可以實現(xiàn)將SNN切換為NN的目的。首先,SNN節(jié)點上導(dǎo)入從NN Copy過來的鏡像文件,然后修改SNN機器名和IP與NN一致,最后重啟集群。
特別注意的是SNN的內(nèi)存配置要與NN一致,因為合并編輯日志的工作需要將metadata加載到內(nèi)存完成。另外,不僅僅是SNN,任何保存NN鏡像的節(jié)點都可以通過上面步驟變?yōu)镹N,只是SNN更適合罷了。
推薦指數(shù):★★★
推薦理由:減少NN重啟導(dǎo)致集群服務(wù)中斷時間;NN節(jié)點故障后,SNN充當NN角色
4. 使用Ganglia和Nagios監(jiān)控你的集群
當運行一個大型mapreduce 作業(yè)時,我們通常非常關(guān)心該作業(yè)對TaskTracker(下稱TT)CPU、內(nèi)存、磁盤,以及整個網(wǎng)絡(luò)的帶寬情況,這時候就需要Ganglia這個工具為我們生成相關(guān)圖表來診斷、分析問題。
Ganglia可以監(jiān)控集群狀態(tài),但當你的服務(wù)器down機或者某個TT掛掉,它卻無法通知到你,這時我們可以使用Nagios這款告警軟件,它可以配置郵件告警和短息告警。通過編寫plugins,可以實現(xiàn)自己的監(jiān)控功能。我們的集群目前做了如下監(jiān)控:
NameNode、JobTracker內(nèi)存
DataNode和TaskTracker運行狀態(tài)
NFS服務(wù)狀態(tài)
磁盤使用情況
服務(wù)器負載狀態(tài)
推薦指數(shù):★★★
推薦理由:Ganglia可以幫你記錄集群狀態(tài),方便診斷問題;Nagios可以再遇到問題時第一時間通知你。