所以,我有一個更新HBase表的Mapper。在地圖()函數,I:單個hadoop Mapper對象用於map()的多個調用嗎?
1)實例化HBaseConfiguration
2)實例化HTable
3)調用hTable.put()一堆次添加行
4)調用hTable.flushCommits()來沖洗我的變化
5)調用HConnectionManager.deleteConnection()殺HBase的
小時連接不過,這似乎效率低下。我想在我的Mapper類的構造函數中實例化HBaseConfiguration和HTable。然後,我可以讓我的映射器類實現Closeable,在close()方法中調用hTable.flushCommits()和HConnectionManager.deleteConnection()。這樣,在每次調用map()時,我都會緩衝我的put()調用,並且會在調用close()時立即刷新所有更改。
但是,如果Mapper對象再次用於map()的多次調用,這是唯一值得的。否則,我不妨留下我的代碼。
所以主要問題是:Mapper對象是否用於多次調用map()?
獎金問題是:重寫的代碼會更有效率嗎?
謝謝!這正是我需要的。 – sangfroid 2012-04-24 17:10:31
嗨, 我想補充一句關於HTable Flushing的句子(「你可能想要小心的唯一的事情就是在你緩衝的數據比你的內存可以處理的情況下,更多地提交提交的內容」 )並不完全正確。 HTable在填充時會自動刷新緩衝區。請閱讀關於setWriteBufferSize(long writeBufferSize)方法的文檔。 http://hbase.apache.org/apidocs/org/apache/hadoop/hbase/client/HTable.html – 2012-04-25 07:06:14
不知道。謝謝@ dino.keco! – 2012-04-25 12:58:13