用mapreduce來操作hbase的兩點優化

用MR來對hbase的表數據進行分佈式計算。有兩點配置可以優化操作,提升性能。它們分別是:

(1)scan.setCacheBlocks(false);  

 然後調用下面這句來初始化map任務    TableMapReduceUtil.initTableMapperJob

這個配置項是幹什麼的呢?   本次mr任務scan的所有數據不放在緩存中,一方面節省了交換緩存的操作消耗,可以提升本次mr任務的效率,另一方面,一般mr任務scan的數據都是一次性或者非經常用到的,因此不需要將它們替換到緩存中,緩存中還是放一些正常的多次訪問的數據,這樣可以提升查詢性能。

(2)conf.setBoolean("mapred.map.tasks.speculative.execution", false);

這個 "mapred.map.tasks.speculative.execution" 配置項是幹什麼用的呢?

是否開啓mr的map備用任務機制,如果設爲true,則如果一個map任務佔用時間較其他的明顯長很多(策略由內部設置),在其他TT節點上新建一個map任務,兩個一起做,誰先做完,便結束。    

優化項是將其設爲false,爲何呢,跟hbase存儲機制有關,hbase本地存儲機制,即hbase會盡量把hdfs上的數據文件和rs上對應region存在一臺機器上,即當前的map的數據肯定在當前的機器上有本地數據,不需要網絡傳輸。如果啓用備用任務機制,則新創建備用任務時,很有可能新建備用任務的機器上沒有所需要的數據的備份,如此便需要網絡傳輸數據,增加了網絡的開銷,其效率會大大的降低,還不如不開啓備用任務,就讓原來的map任務正常做呢。當然,即便關閉了此機制,如果創建map失敗(比如由於oom異常)仍然會在其他節點上重新創建此map任務。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章