Hadoop集群設置

jopen 10年前發布 | 19K 次閱讀 Hadoop 分布式/云計算/大數據

Hadoop集群配置部分參數:

設置dfs.name.dir 時,通過逗號分隔多個值,可以使namenode將元數據存儲到多個副本,以便namenode出錯時恢復。
dfs.data.dir也可設置多個目錄,但是其目的不是為了冗余容錯,而是可以循環寫入,提高性能。
fs.checkpoint.dir也可設置多個目錄,以保存檢查點。和namenode一樣,其支持冗余備份。
以上設置的目錄,默認在hadoop.tmp.dir目錄下,即/tmp/hadoop-${user.name},需要確保該目錄不被操作系統清理,或者另外指定到其他目錄。


MapReduce的中間輸出文件將存放在mapred.local.dir設置的目錄下,需要確保改目錄具有足夠大的可用空間,因為有時候中間輸出文件會非常大。


mapred.system.dir指定一個目錄,MapReduce將在該目錄下存放需要共享的文件,比如作業的jar文件。


通過設置mapred.tasktracker.map.tasks.maximum和mapred.task
tracker.reduce.tasks.maximum以充分反映tasktracker所在節點的可用CPU核心數。通過設置mapred.child.java.opts來指定分配給每個子JVM的內存數。


某些設置值中,你會發現IP地址設置為0.0.0.0,這表示將地址綁定到該機器所有的可用地址。當然你也可以指定綁定到某一個具體地址。端口號設置為0,表示由服務器選擇一個空閑的端口號。但這種做法通常不推薦,因為可能會和防火墻的設置規則不兼容。


修改core-site.xml中的mapred.child.java.opts值來指定IO緩沖區大小,默認為4KB。(具體應該根據機器而定)


修改hdfs-site.xml中的dfs.block.size屬性值來指定HDFS的文件塊大小,默認為64M。


默認情況下,datanode的HDFS文件系統將利用所有可用的磁盤空間。如果你想保留一部分作為它用,可以指定dfs.datanode.du.reserved屬性值,單位為字節。


Hadoop文件系統提供回收站的功能,即被刪除的文件不會立即做物理刪除,而是可以存放在回收站中,并保留一定時間。這個保留時間可以通過設置fs.trash.interval來指定,單位是分鐘。默認值為0,表示不啟用該功能。
注意:如果文件是由程序刪除的,則文件會立即刪除,不會存放到回收站中。當然,你可顯式調用Trash類在程序中實現該功能。每個用戶有自己單獨的回收站目錄。


當Map運行時間比Reduce時間長很多時,需要考慮提高mapred.reduce.slowstart.completed.maps的值,比如 0.80(80%)。該值的意思是,當已完成的Map數占到Map總數達到某一比例時,開始啟動Reduce的數據拉取。默認值為0.05(5%)。


YARN是新一代MapReduce框架。在此框架下,不再需要運行jobtracker和Tasktracker。取而代之的是一個Resource manager(一般情況下運行在namenode節點,也可指定到專用節點上),以及Node manager(運行在每一個worker node上)。


運行YARN start-all.sh腳本會啟動Resource manager和Node manager(在slavers文件中列出)。


YARN提供了一個Job history server,一般情況下運行在Resource manager節點上。通過這個服務,用戶可以訪問已經完成的job的具體信息。


mapred-site.xml配置文件仍然會被YARN利用,但其中大部分配置信息不會被YARN利用,除了mapred.child.java.opts以及相關的幾個配置。


Yarn-site.xml文件中幾個比較重要的配置項:
mapreduce.framework.name yarn
yarn.resourcemanager.address Resource manager的地址及端口號
yarn.nodemanager.local-dirs 等價于MapReduce 1中的mapred.local.dir
yarn.nodemanager.aux-services YARN沒有tasktracker來負責Map的輸出與Reduce的輸入的銜接。基于YARN的多用途設計,需要明確指定其值為mapreduce.shuffle。
yarn.nodemanager.resource.memory-mb 分配給node manager的可用內存。
yarn.nodemanager.vmem-pmemratio 虛擬內存基于物理內存的倍數,默認2.1,表示每使用1單位的物理內存,最多可使用2.1個單位的虛擬內存。
不同于MapReduce1的以固定數目的槽位來管理內存,YARN提供了對內存的更精細粒度的分配與管理方式。
傳統的MapReduce中區分了Map 槽位和Reduce槽位,并且設置了固定數目的槽位來進行管理。但是實際作業運行時,開始階段僅僅Map是需要的,而Reduce槽位不需要;同理,在作業的后期,僅僅Reduce是需要的。這樣就造成了資源利用率比較低。
YARN不再區分Map或Reduce槽位,它通過內存池的管理方式來分配內存資源。yarn.nodemanager.resource.memory-mb屬性設定了池中總的可用內存。


namenode在啟動后,會進入安全模式。安全模式下文件文件系統只讀不可寫。如果檢查結果顯示99.9%的塊滿足最小復本級別后,默認在30秒(可通過dfs.safemode.extension更改,單位為毫秒)后退出安全模式。當然你也可通過命令明確指定進入或退出安全模式。另一種讓 namenode進入安全模式的方法是,設置dfs.safemode.threshold.pct的值大于1,這樣namenode啟動后就會一直停留在安全模式。安全模式在集群升級或維護時非常實用。


namenode啟動后,會先載入image file(映像文件),然后執行edits(編輯日志)中的各項操作。成功后會生成一個新的image file和空的edits。


HDFS通過log4j來記錄審計日志。默認記錄級別閾值為WARN,可通過更改log4j.logger.org.apache.hadoop.hdfs.server.namenode.FSNamesystem.audit屬性值為INFO來記錄更多的日志。


可以通過運行命令 hadoop fsck / 來檢查文件系統健康狀況。(/表示根目錄)


默認情況下,datanode每3周(可通過dfs.datanode.scan.period.hours屬性更改)會調用一次塊掃描器來檢查本節點下所有的文件塊,如果發現錯誤就會報告給namenode并被及時修復。


Hadoop后臺運行一個balancer(均衡器)進程。它將塊從忙碌的節點移動到相對空閑的節點,以維持整個集群的均衡。均衡器所能使用的資源是受限制的,以免其影響到用戶進程,比如均衡器可使用的網路帶寬只有1MB/s,當然可以通過dfs.balance.bandwidthPerSec更改。


有些數據是不可再生的,所以需要定期備份。而且考慮到各種可能丟失數據的風險,最好能將重要數據備份到另外一個集群(最好是不同軟件版本的集群,這樣可防止軟件本身故障導致數據丟失)。


namenode的本地文件系統中有一個文件(該文件名由dfs.hosts屬性指定),其中記錄了可以連接到namenode的所有datanode。同理,可以連接到jobtracker的所有tasktracker也在同一個文件中指定(該文件名由mapred.hosts指定)。


添加一個新節點步驟如下:
1)將新節點IP地址添加到include文件中。
2)通過命令更新namenode:hadoop dfsadmin –refreshNodes
3)通過命令更新jobtracker:hadoop mradmin -refreshNodes
4)更新slavers文件。
5)啟動新的datanode。
6)通過UI檢查新的datanode是否已運行。


移除一個節點步驟如下:
1)添加要移除節點的地址到exclude文件
2)通過命令更新namenode:hadoop dfsadmin –refreshNodes
3)通過命令更新jobtracker:hadoop  mapred –refreshNodes
4)通過UI檢查節點狀態,如果顯示“decommission in progress”,表示Hadoop正在處理中,比如復制待移除節點上的文件塊到其他節點。
5)當對應節點狀態為“decommissioned”時,表示移除準備工作已完成,此時可關閉對應的節點。
6)再次運行第二步和第三步中的命令,更新namenode和jobtracker。

7)從slavers文件中移除對應的節點信息。

備注:以上配置摘自官方文檔,部分沒有驗證,僅供參考,需讀者自行驗證。

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!