1. 選擇Cloudera CDH部署你的Cluster

動(dòng)機(jī)

大多數(shù)管理員都是從Apache Hadoop開(kāi)始學(xué)習(xí)。筆者最開(kāi)始也使用Apache版本Hadoop進(jìn)行開(kāi)發(fā)和部署工作,但接觸到Cloudera CDH后,我發(fā)現(xiàn)它可以使管理員的工作更簡(jiǎn)單,不僅可以獲得最新的特性和Bug修復(fù),有時(shí)也會(huì)帶來(lái)令人驚喜的性能改善。

CDH為什么更好?筆者羅列了以下幾點(diǎn):

CDH基于穩(wěn)定版Apache Hadoop,并應(yīng)用了最新Bug修復(fù)或者Feature的Patch。Cloudera常年堅(jiān)持季度發(fā)行Update版本,年度發(fā)行Release版本,更新速度比Apache官方快,而且在實(shí)際使用過(guò)程中CDH表現(xiàn)無(wú)比穩(wěn)定,并沒(méi)有引入新的問(wèn)題。

Cloudera官方網(wǎng)站上安裝、升級(jí)文檔詳細(xì),省去Google時(shí)間。

CDH支持Yum/Apt包,Tar包,RPM包,Cloudera Manager四種方式安裝,總有一款適合您。官方網(wǎng)站推薦Yum/Apt方式安裝,筆者體會(huì)其好處如下:

聯(lián)網(wǎng)安裝、升級(jí),非常方便。當(dāng)然你也可以下載rpm包到本地,使用Local Yum方式安裝。

自動(dòng)下載依賴(lài)軟件包,比如要安裝Hive,則會(huì)級(jí)聯(lián)下載、安裝Hadoop。

Hadoop生態(tài)系統(tǒng)包自動(dòng)匹配,不需要你尋找與當(dāng)前Hadoop匹配的Hbase,F(xiàn)lume,Hive等軟件,Yum/Apt會(huì)根據(jù)當(dāng)前安裝Hadoop版本自動(dòng)尋找匹配版本的軟件包,并保證兼容性。

自動(dòng)創(chuàng)建相關(guān)目錄并軟鏈到合適的地方(如conf和logs等目錄);自動(dòng)創(chuàng)建hdfs, mapred用戶(hù),hdfs用戶(hù)是HDFS的最高權(quán)限用戶(hù),mapred用戶(hù)則負(fù)責(zé)mapreduce執(zhí)行過(guò)程中相關(guān)目錄的權(quán)限。

推薦指數(shù):★★★

推薦理由:獲取最新特性和最新Bug修復(fù);安裝維護(hù)方便,節(jié)省運(yùn)維時(shí)間。

2. Hadoop集群配置與管理

安裝和維護(hù)Hadoop集群涉及大量的管理工作,包括軟件安裝,設(shè)備管理(crontab、iptables等)、配置分發(fā)等。

對(duì)于小型集群軟件分發(fā)和節(jié)點(diǎn)管理可以使用PDSH這款軟件,它可以通過(guò)免密鑰的SSH將文件分發(fā)到目標(biāo)服務(wù)器,以及為一組目標(biāo)設(shè)備發(fā)送命令并獲得反饋。如果是大型集群或者硬件配置差別很大的集群,推薦使用puppet這樣的工具幫助你維護(hù)配置文件,或者通過(guò)Cloudera Manager以GUI的方式的管理集群(注意:Clodera Manager不是開(kāi)源軟件,免費(fèi)版最多支持50個(gè)節(jié)點(diǎn))。

推薦指數(shù):★★★

推薦理由:提高運(yùn)維效率

3. 開(kāi)啟SecondaryNameNode

SecondaryNameNode(下稱(chēng)SNN)的主要功能是工作是幫助NameNode(下稱(chēng)NN)合并編輯日志,然后將合并后的鏡像文件 copy回NN,以減少NN重啟時(shí)合并編輯日志所需的時(shí)間。SNN不是NN的熱備,但是通過(guò)以下步驟可以實(shí)現(xiàn)將SNN切換為NN的目的。首先,SNN節(jié)點(diǎn)上導(dǎo)入從NN Copy過(guò)來(lái)的鏡像文件,然后修改SNN機(jī)器名和IP與NN一致,最后重啟集群。

特別注意的是SNN的內(nèi)存配置要與NN一致,因?yàn)楹喜⒕庉嬋罩镜墓ぷ餍枰獙etadata加載到內(nèi)存完成。另外,不僅僅是SNN,任何保存NN鏡像的節(jié)點(diǎn)都可以通過(guò)上面步驟變?yōu)镹N,只是SNN更適合罷了。

推薦指數(shù):★★★

推薦理由:減少NN重啟導(dǎo)致集群服務(wù)中斷時(shí)間;NN節(jié)點(diǎn)故障后,SNN充當(dāng)NN角色

4. 使用Ganglia和Nagios監(jiān)控你的集群

當(dāng)運(yùn)行一個(gè)大型mapreduce 作業(yè)時(shí),我們通常非常關(guān)心該作業(yè)對(duì)TaskTracker(下稱(chēng)TT)CPU、內(nèi)存、磁盤(pán),以及整個(gè)網(wǎng)絡(luò)的帶寬情況,這時(shí)候就需要Ganglia這個(gè)工具為我們生成相關(guān)圖表來(lái)診斷、分析問(wèn)題。

Ganglia可以監(jiān)控集群狀態(tài),但當(dāng)你的服務(wù)器down機(jī)或者某個(gè)TT掛掉,它卻無(wú)法通知到你,這時(shí)我們可以使用Nagios這款告警軟件,它可以配置郵件告警和短息告警。通過(guò)編寫(xiě)plugins,可以實(shí)現(xiàn)自己的監(jiān)控功能。我們的集群目前做了如下監(jiān)控:

NameNode、JobTracker內(nèi)存

DataNode和TaskTracker運(yùn)行狀態(tài)

NFS服務(wù)狀態(tài)

磁盤(pán)使用情況

服務(wù)器負(fù)載狀態(tài)

推薦指數(shù):★★★

推薦理由:Ganglia可以幫你記錄集群狀態(tài),方便診斷問(wèn)題;Nagios可以再遇到問(wèn)題時(shí)第一時(shí)間通知你。

5. 設(shè)置好內(nèi)存至關(guān)重要

Hadoop集群安裝完畢后,第一件事就是修改bin/hadoop-evn.sh文件設(shè)置內(nèi)存。主流節(jié)點(diǎn)內(nèi)存配置為32GB,典型場(chǎng)景內(nèi)存設(shè)置如下:

  • NN: 15-25 GB  
  • JT:2-4GB  
  • DN:1-4 GB  
  • TT:1-2 GB,Child VM 1-2 GB 
  • 集群的使用場(chǎng)景不同相關(guān)設(shè)置也有不同,如果集群有大量小文件,則要求NN內(nèi)存至少要20GB,DN內(nèi)存至少2GB。

    推薦指數(shù):★★★★★

    推薦理由:幾個(gè)組件中NN對(duì)內(nèi)存最為敏感,它有單點(diǎn)問(wèn)題,直接影響到集群的可用性;JT同樣是單點(diǎn),如果JT內(nèi)存溢出則所有MapReduce Job都無(wú)法正常執(zhí)行。

    6. 管理員玩轉(zhuǎn)MapReduce

    Hadoop原生MapReduce需要Java語(yǔ)言編寫(xiě),但是不會(huì)Java也沒(méi)問(wèn)題,通過(guò)Hadoop streaming框架管理員可以使用Python,Shell,Perl等語(yǔ)言進(jìn)行MapReduce開(kāi)發(fā),但更簡(jiǎn)單的辦法是安裝和使用Hive或者Pig。

    推薦指數(shù):★★★

    推薦理由:減少運(yùn)維時(shí)間,快速響應(yīng)各種ad-hot需求和故障診斷。

    7. NameNode HA

    前面已經(jīng)說(shuō)過(guò),NN是整個(gè)集群可能出現(xiàn)的單點(diǎn)故障。

    Hadoop通過(guò)在hdfs.site.xml文件的dfs.name.dir屬性指定保持的metadata路徑,如果希望保持到多個(gè)路徑,可以使用逗號(hào)分割配置多個(gè)路徑。

    1. <property> 
    2.     <name>dfs.name.dir</name> 
    3.     <value>/data/cache1/dfs/nn,/data/cache2/dfs/nn</value> 
    4. </property> 

    Hadoop官方推薦配置為metadata配置多個(gè)path,其中包含一個(gè)NFS的路徑。但根據(jù)筆者一次集群嚴(yán)重故障經(jīng)驗(yàn),即使這樣,還是導(dǎo)致了所有鏡像文件損壞,包括SNN上的鏡像文件,所以定期備份一個(gè)可用的副本還是很有必要的。

    推薦指數(shù):★★★★★

    推薦理由:Cloudera3uX和Apache1.0的NN單點(diǎn)問(wèn)題是大家最頭痛問(wèn)題之一,多些準(zhǔn)備,少許痛苦。

    8. 使用firewall阻止壞人進(jìn)入

    Hadoop的安全控制非常簡(jiǎn)單,只包含簡(jiǎn)單的權(quán)限,即只根據(jù)客戶(hù)端用戶(hù)名,決定使用權(quán)限。它的設(shè)計(jì)原則是:“避免好人做錯(cuò)事,但不阻止壞人做壞事”。

    如果你知道某臺(tái)NN的IP和端口,則可以很輕松獲取HDFS目錄結(jié)構(gòu),并通過(guò)修改本機(jī)機(jī)器用戶(hù)名偽裝成HDFS文件所屬owner,對(duì)該文件進(jìn)行刪除操作。

    通過(guò)配置kerberos,可以實(shí)現(xiàn)身份驗(yàn)證。但很多管理員使用更簡(jiǎn)單有效的辦法——通過(guò)防火墻對(duì)訪問(wèn)IP進(jìn)行控制。

    推薦指數(shù):★★★★★

    推薦理由:安全無(wú)小事,防范于未然。

    9. 開(kāi)啟垃圾箱(trash)功能

    動(dòng)機(jī)

    我曾經(jīng)犯下一個(gè)錯(cuò)誤,在我加班非常累,大腦稍有混亂的時(shí)候,不小心刪除執(zhí)行了一個(gè)命令“hadoop fs -rmr /xxx/xxx”,沒(méi)有刪除提示,幾TB的數(shù)據(jù),一下子就沒(méi)有了。簡(jiǎn)直讓我崩潰,后悔莫及。這時(shí)你多希望有個(gè)時(shí)間機(jī)器可以讓HDFS恢復(fù)到刪除前的狀態(tài)。

    trash功能就是這個(gè)時(shí)間機(jī)器, 它默認(rèn)是關(guān)閉的,開(kāi)啟后,被你刪除的數(shù)據(jù)將會(huì)mv到操作用戶(hù)目錄的".Trash"文件夾,可以配置超過(guò)多長(zhǎng)時(shí)間,系統(tǒng)自動(dòng)刪除過(guò)期數(shù)據(jù)。這樣一來(lái),當(dāng)操作失誤的時(shí)候,可以把數(shù)據(jù)mv回來(lái)。開(kāi)啟垃圾箱步驟如下:

    vi core-site.xml ,添加下面配置,value單位為分鐘。

  • <property>    
  •   <name>fs.trash.interval</name>    
  •   <value>1440</value>    
  • </property> 
  • 筆者 在CDpu4下不用重啟Namenode就可以生效。開(kāi)啟垃圾箱后,如果希望文件直接被刪除,可以在使用刪除命令時(shí)添加“–skipTrash” 參數(shù),如下:

    hadoop fs –rm –skipTrash /xxxx 

    推薦指數(shù):★★★★★

    推薦理由:想要時(shí)間機(jī)器嗎?

    10. 去社區(qū)尋找?guī)椭?/p>

    Hadoop是一個(gè)非常優(yōu)秀的開(kāi)源項(xiàng)目,但它仍存有很多尚未解決的問(wèn)題,諸如,NN,JT單點(diǎn)問(wèn)題,JT掛死問(wèn)題,Block在小文件下匯報(bào)效率低下等問(wèn)題。此時(shí)可以通過(guò)如下渠道找到可以幫助你的人,筆者幾次集群嚴(yán)重故障都是通過(guò)Cloudera公司的google user group直接獲得幾位 committer的幫助。通常前一天提問(wèn),第二天就會(huì)有反饋。下面是兩個(gè)能夠幫助的你的社區(qū),當(dāng)然你也可以幫助其他人:

    Apache hadoop的mail list :

    http://hadoop.apache.org/mailing_lists.html

    Cloudera CDH google group:

    https://groups.google.com/a/cloudera.org/forum/#!forum/cdh-user

    推薦指數(shù):★★★★★

    推薦理由:沒(méi)有人比軟件作者更熟悉Hadoop本身,去社區(qū)求助,幫你解決很多自己無(wú)法跨越的問(wèn)題。

    分享到

    hanrui

    相關(guān)推薦