[轉] Hadoop管理員的十個最佳實踐

前言

接觸Hadoop有兩年的時間了,期間遇到不少的問題,既有經典的NameNode和JobTracker內存溢出故障,也有HDFS存儲小文件問題,既有任務調度問題,也有MapReduce性能問題.遇到的這些問題有些是Hadoop自身的缺陷(短板),有些則是使用的不當。html

在解決問題的過程當中,有時須要翻源碼,有時會向同事、網友請教,遇到複雜問題則會經過mail list向全球各地Hadoop使用者,包括Hadoop Committer(Hadoop開發者)求助。在得到不少人幫助後,本身將遇到問題和心得整理成文,但願本文能夠對那些焦頭爛額的Hadoop新手們有所幫助,少走筆者的彎路。node

PS. 本文基於 Cloudera CDH 3u4(同Apache Hadoop 1.0)編寫。相關推薦配置爲官方推薦值或者筆者經驗數值,它不是絕對的,可能會由於不一樣的應用場景和硬件環境有所出入。ios

 

1. 選擇Cloudera CDH部署你的Cluster

動機

大多數管理員都是從Apache Hadoop開始學習。筆者最開始也使用Apache版本Hadoop進行開發和部署工做,但接觸到Cloudera CDH後,我發現它可使管理員的工做更簡單,不只能夠得到最新的特性和Bug修復,有時也會帶來使人驚喜的性能改善。apache

CDH爲何更好?筆者羅列了如下幾點:安全

  1. CDH基於穩定版Apache Hadoop,並應用了最新Bug修復或者Feature的Patch。Cloudera常年堅持季度發行Update版本,年度發行Release版本,更新速度比Apache官方快,並且在實際使用過程當中CDH表現無比穩定,並無引入新的問題。
  2. Cloudera官方網站上安裝、升級文檔詳細,省去Google時間。
  3. CDH支持Yum/Apt包,Tar包,RPM包,Cloudera Manager四種方式安裝,總有一款適合您。官方網站推薦Yum/Apt方式安裝,筆者體會其好處以下:
    1. 聯網安裝、升級,很是方便。固然你也能夠下載rpm包到本地,使用Local Yum方式安裝。
    2. 自動下載依賴軟件包,好比要安裝Hive,則會級聯下載、安裝Hadoop。
    3. Hadoop生態系統包自動匹配,不須要你尋找與當前Hadoop匹配的Hbase,Flume,Hive等軟件,Yum/Apt會根據當前安裝Hadoop版本自動尋找匹配版本的軟件包,並保證兼容性。
    4. 自動建立相關目錄並軟鏈到合適的地方(如conf和logs等目錄);自動建立hdfs, mapred用戶,hdfs用戶是HDFS的最高權限用戶,mapred用戶則負責mapreduce執行過程當中相關目錄的權限。

推薦指數:★★★服務器

 

推薦理由:獲取最新特性和最新Bug修復;安裝維護方便,節省運維時間。網絡

2. Hadoop集羣配置與管理

安裝和維護Hadoop集羣涉及大量的管理工做,包括軟件安裝,設備管理(crontab、iptables等)、配置分發等。架構

對於小型集羣軟件分發和節點管理可使用PDSH這款軟件,它能夠經過免密鑰的SSH將文件分發到目標服務器,以及爲一組目標設備發送命令並得到反饋。若是是大型集羣或者硬件配置差異很大的集羣,推薦使用puppet這樣的工具幫助你維護配置文件,或者經過Cloudera Manager以GUI的方式的管理集羣(注意:Clodera Manager不是開源軟件,免費版最多支持50個節點)。框架

推薦指數:★★★運維

推薦理由:提升運維效率

3. 開啓SecondaryNameNode

SecondaryNameNode(下稱SNN)的主要功能是工做是幫助NameNode(下稱NN)合併編輯日誌,而後將合併後的鏡像文件copy回NN,以減小NN重啓時合併編輯日誌所需的時間。SNN不是NN的熱備,可是經過如下步驟能夠實現將SNN切換爲NN的目的。首先,SNN節點上導入從NN Copy過來的鏡像文件,而後修改SNN機器名和IP與NN一致,最後重啓集羣。

特別注意的是SNN的內存配置要與NN一致,由於合併編輯日誌的工做須要將metadata加載到內存完成。另外,不只僅是SNN,任何保存NN鏡像的節點均可以經過上面步驟變爲NN,只是SNN更適合罷了。

推薦指數:★★★

推薦理由:減小NN重啓致使集羣服務中斷時間;NN節點故障後,SNN充當NN角色

4. 使用Ganglia和Nagios監控你的集羣

當運行一個大型mapreduce 做業時,咱們一般很是關心該做業對TaskTracker(下稱TT)CPU、內存、磁盤,以及整個網絡的帶寬狀況,這時候就須要Ganglia這個工具爲咱們生成相關圖表來診斷、分析問題。

Ganglia能夠監控集羣狀態,但當你的服務器down機或者某個TT掛掉,它卻沒法通知到你,這時咱們可使用Nagios這款告警軟件,它能夠配置郵件告警和短息告警。經過編寫plugins,能夠實現本身的監控功能。咱們的集羣目前作了以下監控:

  1. NameNode、JobTracker內存
  2. DataNode和TaskTracker運行狀態
  3. NFS服務狀態
  4. 磁盤使用狀況
  5. 服務器負載狀態

推薦指數:★★★

推薦理由:Ganglia能夠幫你記錄集羣狀態,方便診斷問題;Nagios能夠再遇到問題時第一時間通知你。

5. 設置好內存相當重要

Hadoop集羣安裝完畢後,第一件事就是修改bin/hadoop-evn.sh文件設置內存。主流節點內存配置爲32GB,典型場景內存設置以下

NN: 15-25 GB
JT:2-4GB
DN:1-4 GB
TT:1-2 GB,Child VM 1-2 GB

集羣的使用場景不一樣相關設置也有不一樣,若是集羣有大量小文件,則要求NN內存至少要20GB,DN內存至少2GB。

推薦指數:★★★★★

推薦理由:幾個組件中NN對內存最爲敏感,它有單點問題,直接影響到集羣的可用性;JT一樣是單點,若是JT內存溢出則全部MapReduce Job都沒法正常執行。

6. 管理員玩轉MapReduce

Hadoop原生MapReduce須要Java語言編寫,可是不會Java也沒問題,經過Hadoop streaming框架管理員可使用Python,Shell,Perl等語言進行MapReduce開發,但更簡單的辦法是安裝和使用Hive或者Pig。

推薦指數:★★★

推薦理由:減小運維時間,快速響應各類ad-hot需求和故障診斷。

7. NameNode HA

前面已經說過,NN是整個集羣可能出現的單點故障。

Hadoop經過在hdfs.site.xml文件的dfs.name.dir屬性指定保持的metadata路徑,若是但願保持到多個路徑,可使用逗號分割配置多個路徑。

<property>
    <name>dfs.name.dir</name>
    <value>/data/cache1/dfs/nn,/data/cache2/dfs/nn</value>
</property>

Hadoop官方推薦配置爲metadata配置多個path,其中包含一個NFS的路徑。但根據筆者一次集羣嚴重故障經驗,即便這樣,仍是致使了全部鏡像文件損壞,包括SNN上的鏡像文件,因此按期備份一個可用的副本仍是頗有必要的。

推薦指數:★★★★★

推薦理由:Cloudera3uX和Apache1.0的NN單點問題是你們最頭痛問題之一,多些準備,少量痛苦。

8. 使用firewall阻止壞人進入

Hadoop的安全控制很是簡單,只包含簡單的權限,即只根據客戶端用戶名,決定使用權限。它的設計原則是:「避免好人作錯事,但不阻止壞人作壞事」。

若是你知道某臺NN的IP和端口,則能夠很輕鬆獲取HDFS目錄結構,並經過修改本機機器用戶名假裝成HDFS文件所屬owner,對該文件進行刪除操做。

經過配置kerberos,能夠實現身份驗證。但不少管理員使用更簡單有效的辦法——經過防火牆對訪問IP進行控制。

推薦指數:★★★★★

推薦理由:安全無小事,防範於未然。

9. 開啓垃圾箱(trash)功能

動機

我曾經犯下一個錯誤,在我加班很是累,大腦稍有混亂的時候,不當心刪除執行了一個命令「hadoop fs -rmr /xxx/xxx」,沒有刪除提示,幾TB的數據,一會兒就沒有了。簡直讓我崩潰,後悔莫及。這時你多但願有個時間機器可讓HDFS恢復到刪除前的狀態。

trash功能就是這個時間機器, 它默認是關閉的,開啓後,被你刪除的數據將會mv到操做用戶目錄的".Trash"文件夾,能夠配置超過多長時間,系統自動刪除過時數據。這樣一來,當操做失誤的時候,能夠把數據mv回來。開啓垃圾箱步驟以下:

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

<property>  
  <name>fs.trash.interval</name>  
  <value>1440</value>  
</property>  

筆者 在CDH3u4下不用重啓Namenode就能夠生效。開啓垃圾箱後,若是但願文件直接被刪除,能夠在使用刪除命令時添加「–skipTrash」 參數,以下:

hadoop fs –rm –skipTrash /xxxx

推薦指數:★★★★★

推薦理由:想要時間機器嗎?

10. 去社區尋找幫助

Hadoop是一個很是優秀的開源項目,但它仍存有不少還沒有解決的問題,諸如,NN,JT單點問題,JT掛死問題,Block在小文件下彙報效率低下等問題。此時能夠經過以下渠道找到能夠幫助你的人,筆者幾回集羣嚴重故障都是經過Cloudera公司的google user group直接得到幾位 committer的幫助。一般前一天提問,次日就會有反饋。下面是兩個可以幫助的你的社區,固然你也能夠幫助其餘人:

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

推薦指數:★★★★★

推薦理由:沒有人比軟件做者更熟悉Hadoop自己,去社區求助,幫你解決不少本身沒法跨越的問題。

Cloudera簡介:

公司是一家Hadoop軟件服務公司,提供免費軟件CDH和Cloudera Manager Free Edition,同時提供Hadoop相關資訊、培訓、技術支持等服務。Hadoop創始人Dong Cutting在該公司任架構師,同時該公司擁有多名Apache Committer。

相關文章
相關標籤/搜索