2013-04-15 26 views
1

我使用HFileOutputFormat將CSV文件批量加載到hbase表中。我只使用job.setNumReduceTasks(0)映射和減少任務。但是我可以看到reducer運行在這個工作中,這個reducer是因爲HFileOutputFormat而啓動的嗎?
以前我使用TableOutputFormat來完成同一個作業,其中從不運行Reducer。我最近重構了map任務以使用HFileOutputFormat,但是現在在發生這種變化之後,我可以看到reducer正在運行。HFileOutputFormat啓動reducer嗎?

其次我得到了以下錯誤的減速器,我以前沒有得到與TableOutputFormat,這也與HFileOutputFormat?

錯誤:拋出java.lang.ClassNotFoundException:com.google.common.base.Preconditions

回答

2

的HFileOutputFormat確實開始(必要的HFiles)reduce任務。

出現此錯誤Hadoop需要Google的Guava庫才能生成HFile。讓Hadoop找到這個庫最簡單的方法就是將它從$HBASE_HOME/lib/複製到$HADOOP_HOME/lib/。尋找guava-<version>.jar

+0

謝謝!有效! :) – RGC

+0

正在嘗試優化我的MR工作,使用你的提示在這[post](http://stackoverflow.com/questions/8750764/what-is-the-fastest-way-to-bulk-load-data-into -hbase-programmatically)。我只有一個map任務,它讀取一個csv文件並將每行(記錄)加載到hbase表中。性能有所提高,但我仍然認爲它不夠高效,因爲它需要大約10分鐘才能載入300萬條記錄。你提到你能夠在一分鐘內加載2.5M。我已經預分割了表區域。還有什麼我可以做到最大效率?壓縮數據?請告知 – RGC

+0

我試圖壓縮mapoutput以及hfiles。這種表現可以改善性能。請教關於我可能會丟失或需要在一分鐘內加載數百萬數據的問題。請注意,除了形成一個鍵並調用context.write(不可變更,放)以外,我不做任何繁重的處理。我注意到地圖在3-4分鐘左右完成,還原器(由HFileOutputFormat調用)花費了大約6-7分鐘,完成的堆積像flash一樣完成。 – RGC

0

是的,即使我們將Reducers的數量設置爲零,HFileOutputFormat啓動一個reducer任務來排序和合並mapper輸出以使該文件與HTable兼容。減速器的數目是在HBase的表

查找示例代碼經由MapReduce工作以製備用於HBase的批量加載數據等於區域的數量,here

相關問題