Hadoop引數調優

張蘭雲發表於2013-08-06

最近看了很多如何讓hadoop執行時間減少的文章,一點自己的理解,記錄如下

1)壓縮map輸出和reduce輸出

    壓縮輸出結果,不僅可以減少寫資料,還可以加快map到ruduce的傳輸速度,有利於加快執行時間。

2)不要重複建立物件

    儘量在mapper或者reducer的類中去建立,不要重複的在map函式中建立物件。

3)scan的引數設定

    在掃描資料庫表時,scan的一些屬性:hbase.scan.catching 和 hbase.scan.batch 都是可以一次性的返回

    多條記錄,避免每次都要去訪問資料庫,同時要注意只設定自己需要的columnFamily就可以了,減少不必要的

    資料返回,同時設定scan.setCatchingBlocks(false),這樣可以避免掃庫的時候重寫了快取,因為掃庫這種動作

    不代表真實的查詢頻率,不應該覆蓋快取。

4)推測執行

    mapred.map.tasks.speculative.execution,此屬性預設為true,即當程式感知到某個map的執行時間較慢,會

    在另外一個機器上執行同樣的任務,成功後kill掉當前執行的任務。個人感覺這個引數在資源充足的時候,可以設定

    為false,避免浪費資源。在資源不足的時候,可以開啟此引數,避免因為某些任務過慢,影響整體任務的執行時間。

5)hbase的引數設定(客戶端設定無效)

  hbase.regionserver.handler.count

    regionserver的工作執行緒數量,預設是10,沒有疑問,官方預設值太小,通常都調到100~200之間,提高regionserver效能。

  hbase.regionserver.lease.period  

    regionserer租約時間,預設值是60s,也有點小,如果你的生產環境中,在執行一些任務時,如mapred時出現lease超時的報錯,那這個時候就需要去調大這個值了。

  hfile.block.cache.size

    regionserver cache的大小,預設是0.2,是整個堆記憶體的多少比例作為regionserver的cache,調大該值會提升查詢效能,當然也不能過大,如果你的hbase都大量的查詢,

    寫入不是很多的話,調到0.5也就夠了。

相關文章