CDH構建大數據平台-集群配置優化實戰之HDFS集群調優


          CDH構建大數據平台-集群配置優化實戰之HDFS集群調優

                                        作者:尹正傑 

版權聲明:原創作品,謝絕轉載!否則將追究法律責任。

 

 

 

.hdfs-default.xml 

1>.dfs.namenode.handler.count

  NameNode中用於處理RPC調用的線程數,即指定NameNode 的服務器線程的數量。NameNode有一個工作線程池用來處理客戶端的遠程過程調用及集群守護進程的調用,處理程序數量越多意味着要更大的池來處理來自不同DataNode的並發心跳以及客戶端並發的元數據操作)。 對於大集群或者有大量客戶端的集群來說,通常需要增大參數dfs.namenode.handler.count的默認值10。設置該值的一般原則是將其設置為集群大小的自然對數乘以20,即20logN,N為集群大小。 
  如果該值設的太小,明顯的狀況就是DataNode在連接NameNode的時候總是超時或者連接被拒絕,但NameNode的遠程過程調用隊列很大時,遠程過程調用延時就會加大。症狀之間是相互影響的,很難說修改dfs.namenode.handler.count就能解決問題,但是在查找故障時,檢查一下該值的設置是必要的。如果前面的描述你仍然覺得很不清楚,可以看下面的python程序,假設我們大數據集群的大小為500台,那么我們可以直接看怎么計算應該設置合理值。
[root@node101.yinzhengjie.org.cn ~]# python -c 'import math ; print int(math.log(500) * 20)' 

124

[root@node101.yinzhengjie.org.cn ~]#

  其實在生產環境中,我把改值設置的較大,如果集群節點數在20左右的話,推薦設置為200。【生產案例說明:計算集群(20台)設置128啟動集群所需時間是35min,而存儲集群(14台)設置的是200啟動的時間是15min】

 

2>.dfs.datanode.handler.count 

  數據節點的服務器線程數,默認為10。可適當增加這個數值來提升DataNode RPC服務的並發度。 在DataNode上設定,取決於系統的繁忙程度,設置太小會導致性能下降甚至報錯。線程數的提高將增加DataNode的內存需求,因此,不宜過度調整這個數值。

 
        

 

3>.dfs.datanode.max.transfer.threads (dfs.datanode.max.xcievers

  DataNode可以同時處理的數據傳輸連接數,即指定在DataNode內外傳輸數據使用的最大線程數。 官方將該參數的命名改為dfs.datanode.max.transfer.threads。默認值為4096。推薦值為8192。

  

4>.dfs.namenode.avoid.read.stale.datanode 

  指示是否避免讀取“過時”的數據節點(DataNode),這些數據節點(DataNode)的心跳消息在指定的時間間隔內未被名稱節點(NameNode)接收。過時的數據節點(DataNode)將移動到返回供讀取的節點列表的末尾。有關寫入的類似設置,請參閱df.namenode.avoint.write.stale.datanode。默認值是flase,推薦設置為true。

 

5>.dfs.namenode.avoid.write.stale.datanode 

 指示超過失效 DataNode 時間間隔 NameNode 未收到檢測信號信息時是否避免寫入失效 DataNode。寫入應避免使用失效 DataNode,除非多個已配置比率 (dfs.namenode.write.stale.datanode.ratio) 的 DataNode 標記為失效。有關讀取的類似設置,請參閱 dfs.namenode.avoid.read.stale.datanode。 默認值是flase,推薦設置為true。

  

6>.dfs.datanode.balance.bandwidthPerSec (dfs.balance.bandwidthPerSec)

  每個 DataNode 可用於平衡的最大帶寬。單位為字節/秒。以每秒字節數的形式指定每個數據節點可用於平衡目的的最大帶寬量。您可以使用以下后綴(不區分大小寫):k(kilo)、m(mega)、g(giga)、t(tera)、p(peta)、e(exa)指定大小(例如128k、512m、1g等)。或者以字節為單位提供完整的大小(例如,對於128 MB,134217728)。默認是10M,我們知道服務器現在都是萬兆網卡了,交換機對應端口也是10G網口的話,也就是說我們最大可以設置1.25G帶寬。但是我們得考慮其他服務的傳輸效率,不能把所有的帶寬都被DataNode 平衡數據所占用啦!推薦設置為128M~512M。

  HDFS平衡器檢測集群中使用過度或者使用不足的DataNode,並在這些DataNode之間移動數據塊來保證負載均衡。如果不對平衡操作進行帶寬限制,那么它會很快就會搶占所有的網絡資源,不會為Mapreduce作業或者數據輸入預留資源。參數dfs.balance.bandwidthPerSec定義了每個DataNode平衡操作所允許的最大使用帶寬,這個值的單位是byte,這是很不直觀的,因為網絡帶寬一般都是用bit來描述的。因此,在設置的時候,要先計算好。DataNode使用這個參數來控制網絡帶寬的使用,但不幸的是,這個參數在守護進程啟動的時候就讀入,導致管理員沒辦法在平衡運行時來修改這個值。

 

 

7>.dfs.datanode.du.reserved

  當DataNode向NameNode匯報可用的硬盤大小的時候,它會把所有dfs.data.dir所列出的可用的硬盤大小總和發給NameNode。由於mapred.local.dir經常會跟DataNode共享可用的硬盤資源,因此我們需要為Mapreduce任務保留一些硬盤資源。dfs.datanode.du.reserved定義了每個dfs.data.dir所定義的硬盤空間需要保留的大小,以byte為單位。默認情況下,該值為0,也就是說HDFS可以使用每個數據硬盤的所有空間,節點硬盤資源耗盡時就會進入讀模式。因此,建議每個硬盤都為map任務保留最少10GB的空間,如果每個Mapreduce作業都會產生大量的中間結果,或者每個硬盤空間都比較大(超過2TB),那么建議相應的增大保留的硬盤空間。我在生產環境中設置改值的大小為50G字節!

 

8>.dfs.datanode.failed.volumes.tolerated

  指定數據節點(DataNode)停止提供服務之前允許失敗的卷數。默認情況下,任何卷故障都會導致數據節點關閉。

  當DataNode的任何一個本地磁盤出故障時,它的默認行為認定整個DataNode失效。在一個中到大型的集群中,硬盤故障是相當常見的,所以這種行為不是最優的。一個DataNode的丟失會導致一些數據塊備份數下降,因此,NameNode會命令其他DataNode復制這些丟失的數據塊來增加被附屬。參數dfs.datanode.failed.volumes.tolerated定義整個DataNode聲明失敗前允許多少個硬盤出現故障。

  很多人會問,為什么不能容忍所有磁盤失效的情況,這樣就可以把整個DataNode的失效推遲到沒有任何可工作的硬盤為止。對於一個永久的時間窗口來說,這看上去很合理的,但是實際上,對於所以的磁盤來說,管理員對於磁盤故障的處理都會早於由於正常磨損而出現的故障。只有一種情況例外,所以的硬盤在一個極短的時間內全部出現故障,這種異常情況需要立即調查。在實踐中,快速的磁盤故障通常意味着驅動控制器或者某些部件故障。正因為罕見,但如果磁盤在短時間內開始出現一連串故障,最好的辦法就是立即隔離。先把整個集群設置為不可用,直到找到失敗的原因為止。參數dfs.datanode.failed.volumes.tolerated默認值為0,也就意味着只要有一個磁盤出現故障就會導致整個DataNode不可用,管理員可以增大該值來保證在出現部分磁盤故障時,DataNode仍能持續運行,但是需要保持謹慎的是,在極短的時間范圍內出現一個或者兩個磁盤故障表明一個更大的問題存在。

 

 

二.core-default.xml

1>.fs.trash.interval

  垃圾桶檢查點之間的分鍾數。還可控制刪除垃圾桶檢查點目錄后的分鍾數。要禁用垃圾桶功能,請輸入 0。 默認為禁用垃圾桶功能。為防止重要文件誤刪,可啟用該特性。 

  用戶經常會意外刪除文件。HDFS支持回收站功能,這類似於大多數操作系統的回收站,當這個功能被啟用,文件被移到用戶的HDFS主目錄中一個名為.Trash目錄中,來保留被刪除的文件,而不是立即徹底刪除。fs.trash.interval定義.Trash目錄下文件被永久刪除前保留的時間。在文件被從HDFS永久刪除前,用戶可以自由地把文件從該目錄下移出來並立即還原。默認值是0說明垃圾回收站功能是關閉的。

  要清楚,回收站功能不是萬能的,推遲刪除意味着要文件所占據的空間仍不可用,除非它被永久刪除。用戶可以通過運行hadoop fs -expunge命令。或者干脆等待指定的時間來明確回收站清空。可以在hadoop fs -rm命令通過指定-skipTrash參數來跳過回收站從而立即刪除文件。

 

2>.io.file.buffer.size

 HDFS文件緩沖區大小,默認為4096(即4K)。不論是對硬盤或者是網絡操作來講,較大的緩存都可以提供更高的數據傳輸,但這也就意味着更大的內存消耗和延遲。一般情況下,可以設置為64KB(65536byte)。生產環境中我們將配置調大,可以設置為1M(1048576byte)

 

3>.io.native.lib.available

  本地庫可以加快基本操作,例如IO,壓縮等。 默認值為true,因此我們可以不用配置該參數!有個了解就好。

 

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM