io.file.buffer.size
hadoop訪問文件的IO操做都須要經過代碼庫。所以,在不少狀況下,io.file.buffer.size都被用來設置緩存的大小。不管是對硬盤或者是網絡操做來說,較大的緩存均可以提供更高的數據傳輸,但這也就意味着更大的內存消耗和延遲。這個參數要設置爲系統頁面大小的倍數,以byte爲單位,默認值是4KB,通常狀況下,能夠設置爲64KB(65536byte)。node
dfs.balance.bandwidthPerSec
HDFS平衡器檢測集羣中使用過分或者使用不足的DataNode,並在這些DataNode之間移動數據塊來保證負載均衡。若是不對平衡操做進行帶寬限制,那麼它會很快就會搶佔全部的網絡資源,不會爲Mapreduce做業或者數據輸入預留資源。參數dfs.balance.bandwidthPerSec定義了每一個DataNode平衡操做所容許的最大使用帶寬,這個值的單位是byte,這是很不直觀的,由於網絡帶寬通常都是用bit來描述的。所以,在設置的時候,要先計算好。DataNode使用這個參數來控制網絡帶寬的使用,但不幸的是,這個參數在守護進程啓動的時候就讀入,致使管理員沒辦法在平衡運行時來修改這個值。python
dfs.block.size
不少人都會認爲HDFS中塊的大小都是同樣的,其實這不正確。由於每一個文件在建立的時候,都會肯定相關的數據塊大小。參數dfs.block.size定義了全部新建文件的默認數據塊大小。這個參數的設定並不會影響文件系統中現有的文件,客戶端在建立文件的時候,若是有特殊須要,能夠重寫該參數。
dfs.block.size的單位是byte,默認值是67108864 (64MB)。對於不少狀況來講,134217728 (128MB)更加合適。對於一個Mapreduce做業(尤爲是用子類FileInputFormat定義輸入格式的做業),對文件的每一個數據塊會啓用一個map任務來處理。這就意味這數據塊的大小顯著地影響Mapreduce做業的效率。緩存
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),那麼建議相應的增大保留的硬盤空間。安全
dfs.namenode.handler.count
NameNode有一個工做線程池用來處理客戶端的遠程過程調用及集羣守護進程的調用。處理程序數量越多意味着要更大的池來處理來自不一樣DataNode的併發心跳以及客戶端併發的元數據操做。對於大集羣或者有大量客戶端的集羣來講,一般須要增大參數dfs.namenode.handler.count的默認值10。設置該值的通常原則是將其設置爲集羣大小的天然對數乘以20,即20logN,N爲集羣大小。若是前面的描述你仍然以爲很不清楚,能夠看下面的python程序(其中的200表示集羣的大小)網絡
1 |
esammer:~ hadoop01$ python -c 'import math ; print int(math.log(200) * 20)' |
2 |
105 |
若是該值設的過小,明顯的情況就是DataNode在鏈接NameNode的時候老是超時或者鏈接被拒絕,但NameNode的遠程過程調用隊列很大時,遠程過程調用延時就會加大。症狀之間是相互影響的,很難說修改dfs.namenode.handler.count就能解決問題,可是在查找故障時,檢查一下該值的設置是必要的。併發
dfs.datanode.failed.volumes.tolerated
當DataNode的任何一個本地磁盤出故障時,它的默認行爲認定整個DataNode失效。在一箇中到大型的集羣中,硬盤故障是至關常見的,因此這種行爲不是最優的。一個DataNode的丟失會致使一些數據塊備份數降低,所以,NameNode會命令其餘DataNode複製這些丟失的數據塊來增長被附屬。參數dfs.datanode.failed.volumes.tolerated定義整個DataNode聲明失敗前容許多少個硬盤出現故障。
不少人會問,爲何不能容忍全部磁盤失效的狀況,這樣就能夠把整個DataNode的失效推遲到沒有任何可工做的硬盤爲止。對於一個永久的時間窗口來講,這看上去很合理的,可是實際上,對於因此的磁盤來講,管理員對於磁盤故障的處理都會早於因爲正常磨損而出現的故障。只有一種狀況例外,因此的硬盤在一個極短的時間內所有出現故障,這種異常狀況須要當即調查。在實踐中,快速的磁盤故障一般意味着驅動控制器或者某些部件故障。正由於罕見,但若是磁盤在短期內開始出現一連串故障,最好的辦法就是當即隔離。先把整個集羣設置爲不可用,直到找到失敗的緣由爲止。參數dfs.datanode.failed.volumes.tolerated默認值爲0,也就意味着只要有一個磁盤出現故障就會致使整個DataNode不可用,管理員能夠增大該值來保證在出現部分磁盤故障時,DataNode仍能持續運行,可是須要保持謹慎的是,在極短的時間範圍內出現一個或者兩個磁盤故障代表一個更大的問題存在。負載均衡
dfs.hosts
全部的DataNode均可以鏈接到一個NameNode並加入到集羣。在第一次鏈接到NameNode時,DataNode會獲取一個命名空間ID,並能夠當即接收數據塊。管理員能夠經過一個含有DataNode主機名列表的文件,來確認容許鏈接並加入集羣的DataNode。在這種狀況下,其餘DataNode則不容許加入集羣。對於安全須要有強烈要求的,或者對於訪問權限有控制的,都會用到這個功能。
該文件中dfs.hosts的格式是用換行符來分割主機名或者IP地址,這主要看集羣經過什麼來識別機器。oop
dfs.host.exclude
相似dfs.hosts,HDFS能夠經過指定文件把相關節點排除在外,這個文件是一個以換行符分割的列表,每行包括一個主機名或IP地址。若是一臺主機先被包含在內,又出如今排除列表中。即,若是一個機器名字同時出如今兩個文件中,最終結果是被排除掉的。dfs.host.exclude的參數還有一個做用,它能優雅地卸載DataNode。spa
fs.trash.interval
用戶常常會意外刪除文件。HDFS支持回收站功能,這相似於大多數操做系統的回收站,當這個功能被啓用,文件被移到用戶的HDFS主目錄中一個名爲.Trash目錄中,來保留被刪除的文件,而不是當即完全刪除。
fs.trash.interval定義.Trash目錄下文件被永久刪除前保留的時間。在文件被從HDFS永久刪除前,用戶能夠自由地把文件從該目錄下移出來並當即還原。默認值是0說明垃圾回收站功能是關閉的。
要清楚,回收站功能不是萬能的,推遲刪除意味着要文件所佔據的空間仍不可用,除非它被永久刪除。用戶能夠經過運行hadoop fs -expunge命令。或者乾脆等待指定的時間來明確回收站清空。能夠在hadoop fs -rm命令經過指定-skipTrash參數來跳過回收站從而當即刪除文件。操作系統