HDFS的配置詳解和日常維護


             HDFS的配置詳解和日常維護

                                     作者:尹正傑

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

 

 

一.HDFS運維概述

  HDFS的運維主要分為兩方面,一方面是對文件系統的管理,這部分與linux文件系統的操作有很多相似之處,較易掌握;另一方面是對分布式進程的管理.

  通過Cloudera Manager Server的Web UI去訪問HDFS界面。具體操作如下:

1>.點擊HDFS服務

2>.點擊"Web UI",隨機選擇一個NameNode節點(我這里做了hdfs ha模式)。

3>.查看Hadoop版本

4>.除了上面的方式查看Hadoop版本,我們還可以用以下的方式查看

5>.隨機選中一個節點

6>.點擊"組件",可以查看各個軟件的版本

 

二.HDFS配置文件詳解

1>.以下參數講解以社區版2.6.0的參數名和默認值為准(配置文件為:hdfs-default.xml / hdfs-site.xml )。

  鏈接地址:http://hadoop.apache.org/docs/r2.6.0/hadoop-project-dist/hadoop-hdfs/hdfs-default.xml

2>.dfs.namenode.name.dir 

  指定一個本地文件系統路徑,決定NN在何處存放fsimage。可以通過逗號分隔指定多個路徑,在Hadoop1.0時代這是一種為NN做高可用的方法,但目前有更完善的Journal Node解決方案,留默認值即可。 

3>.dfs.permissions.enabled 

    默認為true。如果為true,則啟用HDFS的權限檢查,否則不啟用。在生產 環境,一定要啟用,測試環境可以自行決定。 

4>.dfs.permissions.superusergroup 

    默認supergroup,指定HDFS的超級用戶組的組名,可按需設置。 

5>.dfs.datanode.data.dir

  默認file://${hadoop.tmp.dir}/dfs/data,指定DN存放塊數據的本地盤路徑,可以通過逗號分隔指定多個路徑。在生產環境可能會在一個DN上掛多塊盤,因此需要修改該值。 

6>.dfs.replication

  塊副本數,默認為3。默認值是一個比較穩妥的值。 

7>.dfs.blocksize 

    塊大小,默認為134217728,即128MB。對大多數生產環境來說是一個比較穩妥的值。因為該值決定了MR的默認map數,也會影響NN消耗的內存量, 需要謹慎修改。 

8>.dfs.namenode.handler.count 

  NN處理rpc請求的線程數,默認為10,對大多數集群來說該值過小,設置該值的一般原則是將其設置為集群大小的自然對數乘以20,即20logN,N為集群大小。例如對100個節點的集群該值可以設到90。 
  
  當然,我們可以通過python幫我們計算合適的值。   [root@node101.yinzhengjie.org.cn
~]# python -c 'import math ; print int(math.log(100) * 20)'   92   [root@node101.yinzhengjie.org.cn ~]#

9>.dfs.datanode.balance.bandwidthPerSec

  HDFS做均衡時使用的最大帶寬,默認為1048576,即1MB/s,對大多數千兆 甚至萬兆帶寬的集群來說過小。不過該值可以在啟動balancer腳本時再設 置,可以不修改集群層面默認值。 

10>.dfs.hosts / dfs.hosts.exclude 

  指定連接NN的主機的白/黑名單。通常黑名單比較有用,例如在對DN進行 更換硬盤操作時,可以先將其加入黑名單進行摘除,等運維操作結束后再放行。

  參考鏈接:https://www.cnblogs.com/yinzhengjie/p/10693499.html。

11>.dfs.datanode.failed.volumes.tolerated 

  DN多少塊盤損壞后停止服務,默認為0,即一旦任何磁盤故障DN即關閉。 對盤較多的集群(例如每DN12塊盤),磁盤故障是常態,通常可以將該值設置為1或2,避免頻繁有DN下線。

12>.dfs.ha.automatic-failover.enabled

  是否啟用HDFS的自動故障轉移,默認為false。像CDH等發行版,如果打開 HDFS HA后,該值會被自動更新為true,因此通常不需要自己改動。 

13>.dfs.support.append 

  是否啟用HDFS的追加寫入支持,默認為true。老版本Hadoop上append功能有bug,因此該值曾經默認為false,但現在已經可以放心使用true,有老集群升級上來的需要調整。 

14>.dfs.encrypt.data.transfer 

    HDFS數據在網絡上傳輸時是否加密,默認為false。如果Hadoop集群運行 在非安全網絡上,可以考慮開啟該參數,但會帶來一些CPU開銷。通常 Hadoop都會在私有網絡內部署,不需要動該值。 

15>.dfs.client.read.shortcircuit 

  是否開啟HDFS的短路本地讀,默認為false。像CDH等發行版會默認將該參 數打開,並且如果在任何一種Hadoop上安裝Impala,也需要打開該參數。 打開后,還需要設置dfs.domain.socket.path參數以指定一個Unix Socket文件的路徑。 

16>.dfs.datanode.handler.count 

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

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

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

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

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

19>.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。

20>.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字節!

21>.其他配置

  有一些操作系統或Linux文件系統層面的配置,本身不屬於HDFS,但會對 HDFS的性能或可用性有影響,我們也需要了解:https://www.cnblogs.com/yinzhengjie/p/10367447.html

 

三.HDFS日常維護

1>.容量管理

  理解HDFS的數據都是以普通文件格式寫到DN的本地磁盤。HDFS的已使用容量有多種查看方式,比如NameNode頁面(默認端口50070的)、hdfs dfs命令、以及集群管理器頁面(如Cloudera CM)。
    
  HDFS總使用容量在80%以下是安全的,超過就需要人工干預。另外也要理解,HDFS不可能做到每個DN的每塊盤都以相同的百分比寫入數據,很可能出現總容量使用80
%,但個別盤已經超90%甚至寫滿的情況,這時候就需要借助balancer腳本(start-balancer.sh)或 hdfs balancer命令來進行均衡。為了管理數據,還需要熟悉常用的hdfs 和Linux命令。   容量管理還涉及到非技術性工作。如企業的數據總量和增量如何? 如何設置清理策略?是否需要對冷熱數據采取不同的管理策略(如存儲介質、副本數)?如何制定擴容、災備方案?等等。這些工作無法通過培訓傳授方案,需要結合企業實際進行規划。

2>.進程管理

  HDFS進程管理中,DN的進程比較次要,死掉只需處理完問題再拉起即可。 

  NN進程的可用性決定了整個HDFS的可用性。目前已有完善的NameNode HA方案,如果是 社區版集群,可參考(QJM方案): http://hadoop.apache.org/docs/r2.6.0/hadoop-project-dist/hadoop-hdfs/HDFSHighAvailabilityWithQJM.html如果是CDH集群,可進入HDFS服務,點擊Actions - Enable High Availability,按照指引逐步操作即可,比較直觀。

  另外,為了保證NN進程的穩定,還需要考慮分配的JVM內存。我們介紹過一般100w個塊對應300MB堆內存,按此計算出一個值后,再乘以2就夠用了。

3>.故障管理

    HDFS最常見的是硬盤故障,停機更換即可,注意同時停機個數<副本數即可,服務起來后做一下fsck。

    NN的故障比較棘手。有了Hadoop2.x后的NameNode HA機制后,單點故障不再可怕,但仍會被內存相關問題困擾。最常出現的情況就是出現長時間的full GC,使得NN無法響應其他進程的RPC請求,從而造成嚴重問題。 推薦使用Java8以上版本的JDK以及G1GC,並分配足夠的堆內存,使得每次GC的時間可控。 

4>.配置管理

  HDFS主要配置的說明已介紹過,其余配置可查詢官方文檔(以2.6.0為 例): http://hadoop.apache.org/docs/r2.6.0/hadoop-project-dist/hadoop-hdfs/hdfs-default.xml.
    
  需要注意的是大部分配置需要重啟HDFS服務生效,小部分需要重啟單個DN生效。

5>. 對HDFS日常維護中常用的命令總結

  HDFS一般命令,在日常維護中高頻使用的: 
    列出文件 文件(及目錄)的復制、追加、刪除、讀取 
    文件(及目錄)權限和歸屬的修改 
    文件(及目錄)大小統計

  HDFS管理命令,在日常維護中高頻使用的:
    hdfs fsck 
    hdfs balancer 
    namenode系列命令(例如啟用HA等)
    dfsadmin系列命令(進入退出安全模式、升級HDFS等) 

 

四.課后作業

    在你的測試集群(最好有多台虛擬機搭一個全分布集群),測試HDFS接近寫滿文件時的狀態變化 

    實驗配置NameNode HA 

 


免責聲明!

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



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