我想從每個映射器批量插入N行到HBase表。我currenly知道這樣做的方法有兩種:使用MapReduce在HBase中插入多行
- 創建Put對象的列表,並使用HTable實例
put(List<Put> puts)
方法,並且確保禁用autoFlush
參數。 - 使用TableOutputFormat類和使用
context.write(rowKey, put)
方法。
哪一個更好?
在第一種方式中,context.write()
不需要,因爲hTable.put(putsList)
方法用於直接將數據放入表中。我的mapper類正在擴展Class Mapper<KEYIN,VALUEIN,KEYOUT,VALUEOUT>
,那麼我應該使用哪些類KEYOUT
和VALUEOUT
?
第二種方式,我必須撥打context.write(rowKey, put)
N次。有沒有什麼辦法可以使用context.write()
獲得Put
作業列表?
是否有任何其他方式與MapReduce做到這一點?
在此先感謝。
爲什麼單映射器爲什麼不能多映射器?你如何指定映射器的數量?即使你指定的建議編碼不能保證mappers的數量是一個。 –
您可以使用setNumMapTasks或conf.set('mapred.map.tasks','numberofmappersyouwanttoset')(但它對配置的建議)更改映射器的數量,但不能保證映射器實例將被設置。此外,它取決於輸入分裂。 –
lookat http://stackoverflow.com/questions/37239944/is-it-possible-to-run-multiple-mappers-on-one-node請看我詳細的答案..隨時提問。 –