hadoop叢集搭建配置檔案優化引數

被擱淺的魚發表於2015-09-11

Hadoop搭建優化

作業系統(os)

  1. 禁用Linux邏輯管理卷(LVM)

  2. 掛載資料分割槽時禁用檔案atime和目錄atime

  3. Linux核心引數調整(/etc/sysctl.conf)vm.swappiness = 0;

HDFS引數優化

無特別標識均為:hdfs-site.xml屬性。

  1. fs.default.name(core-site.xml)

定義客戶端所使用的預設檔案系統的URL

  1. dfs.name.dir(重要)

    定義了一個用逗號(中間不加空格)分割的不同的本地檔案路徑,NameNode要在這些路徑上儲存一個HDFS檔案資料的備份。

  2. dfs.data.dir

定義了DataNode在哪裡存放HDFS資料塊

  1. Io.file.buffer.size(core-site.xml)

用來設定hadoop訪問檔案IO的快取大小。預設值為:4kb。參考值:64mb(65536 byte)

  1. dfs.balance.bandwidthPerSec

定義了HDFS平衡器(balancer) 平衡每個DataNode平衡操作所允許的最大頻寬,單位是byte

  1. dfs.block.size

定義了所有新建檔案的預設資料塊大小。預設值:64MB 參考值:128MB (134217728)

  1. dfs.DataNode.du.reserved

定義了每個dfs.data.dir所定義的硬碟空間需要保留的大小。以byte為大小 預設值為0,參考值:10737418240

  1. dfs.NameNode.handler.count

定義NameNode工作執行緒池(用來處理客戶端的遠端過程呼叫及叢集守護程式呼叫)工作執行緒大小。該值一般原則是將值設為叢集的自然對數乘以20 即:20logN N為叢集大小。

  1. dfs.DataNode.failed.volumes.tolerated 定義整個DataNode宣告失敗前,允許多少個硬碟出現故障。預設值為:0參考值:1

  2. fs.trash.interval(core-site.xml)

定義.Trash目錄檔案下檔案被永久刪除前保留的時間。預設值:0(不儲存) 推薦值:1440(24小時)注意:垃圾回收功能只是針對命令式。對javaApi呼叫的刪除無效。

MapReduce

無特別宣告均為mapred-site.xml屬性。

  1. mapred.job.tracker

定義了主機名和埠資訊,jobtracker在該埠監聽遠端過程呼叫(RPC)。

  1. mapred.local.dir

定義了map端中間結果檔案儲存路徑。如果設定路徑為專有硬碟,那麼就沒必要配置hdfs-site.xml 中的 dfs.DataNode.du.reserved屬性了

  1. mapred.java.child.opts

Tasktracker是在一個獨立的JVM程式裡啟動子任務的,啟動時可以把一些引數傳遞給它。比較常見的是設定記憶體的使用。 預設值為:200MB 參考值為:-Xms2g.

  1. mapred.child.ulimit 可以對JVM子任務最大堆疊大小進行補充(即它規定一個程式在它執行結束前可以使用的最大虛擬記憶體) 該值一般大致可設為JVM最大堆疊大小的1.5倍。

  2. mapred.tasktracker.map(和 reduce).tasks.maximum

hadoop mapreduce 任務併發數可能等於mapred.tasktracker.map.tasks.

maximum 和mapred.tasktracker.reduce.tasks.maximum之和 每個任務都在一個獨立的JVM上執行。根據

mapred.java.child.opts設定的記憶體,如果mapred.java.child.opts設定為2g ,

mapred.tasktracker.map.tasks.maximum

設定為12則map任務就消耗24g記憶體。該值一般情況下為每個物理CPU配置1.5個任務,

cup*1.5=mapreduce併發任務總個數, 然後將三分之二處理時間分片給map任務 三分之一留給reduce任務

  1. io.sort.mb

map任務的一些輸出會寫在迴圈緩衝區內,該緩衝區大小是由該屬性指定的,當該緩衝區使用率達到80%時,就會啟動一個後臺程式將溢位資料寫到mapred.local.dir指定的路徑下。預設值為:100MB同時注意該資料所指定的記憶體是包含在子任務的JVM堆疊空間中的。

  1. io.sort.factor

它定義了一次效能合併的檔案數目,以下兩種情況會觸發MapReduce的檔案合併操作:第一種是map任務執行完畢spill檔案需要合併,第二種是在reduces獲取了所有map任務輸出檔案後以及使用者呼叫reduce程式碼之前。增大每一輪開啟檔案個數進行合併可以減少資料讀取和寫入硬碟的時間,也減少了硬碟IO的操作。但合併更多的檔案意味著需要更多的記憶體。

  1. mapred.compress.map.output

啟用map端的壓縮 參考值:true

  1. mapred.map.output. compression.codec

定義了在MapReduce任務中使用的map輸出壓縮碼,如果該值為空則org.apache.hadoop.io.compress.defaultCodec會被呼叫 參考值:org.apache.hadoop.io.compress.SnappyCodec

  1. mapred.output. compression.type

如果MapReduce任務的輸出需要寫成SequenceFile格式,那麼該引數會確定所使用的壓縮型別。可配值有三個:第一種是記錄(RECORD),該值會使得SequenceFile的每個資料都被單獨壓縮。第二種值是塊(BLOCK)該值會使得所有關鍵資料按固定大小分塊壓縮。第三種是無(NONE)設定該值就不會為資料進 行壓縮。參考值:BLOCK。

  1. mapred.job.tracker.handler.count

jobtracker會維護一個工作執行緒池來處理遠端過程呼叫,該值用來控制執行緒池大小。參考值 20logN N為叢集大小。

  1. mapred.reduce.parallel.copies 在MapReduce作業洗牌(shuffle)過程中,每個reducer任務需要從各個tasktrackers中獲取同一作業執行map任務產生的中間資料。該引數可以設定reducer可以並行獲取資料個數。一般可以設定為 4*logN N為叢集大小。

  2. mapred.reduce.tasks 該引數規定了作業要產生的reduce個數。

  3. Tasktracker.http.threads

控制每個tasktracker用於處理請求的並行工作執行緒數。HTTP執行緒的個數與叢集reduce槽的數量,和被許可並行處理的資料份數是成正比的。

  1. Mapred.reduce.slowstart.completed.maps

一旦一些map任務生成了中間結果,就可以提前讓reducer對這些資料進行洗牌(shuffle),儘可能早的拷貝資料,可以使reduce任務在最後一個map任務完成時就可以直接執行。 該屬性定義允許啟動reduce程式時map任務完成的百分比。參考值:0.8 即80%

Hbase搭建重要的hdfs引數

1 dfs.support.append

Hbase需要持久到HDFS這個引數必須被明確設定為true

2 dfs.datanode.max.xcievers

預設值為256建議值為2048這個值太小在客戶端IO負載密集時會報IOException.

相關文章