[英]Is a single hadoop Mapper object used for more than one call to map()?
所以,我有一個更新HBase表的Mapper。 在map()函數中,我:
1)實例化HBaseConfiguration
2)實例化HTable
3)多次調用hTable.put()來添加行
4)調用hTable.flushCommits()來刷新我的更改
5)調用HConnectionManager.deleteConnection()來終止與HBase的連接
但是,這似乎效率低下。 我想在我的Mapper類的構造函數中實例化HBaseConfiguration和HTable。 然后我可以讓我的mapper類實現Closeable,在close()方法中調用hTable.flushCommits()和HConnectionManager.deleteConnection()。 這樣,在每次調用map()時,我都會緩沖put()調用,並在調用close()時立即刷新所有更改。
但是,如果將Mapper對象重新用於對map()的多次調用,則這是值得的。 否則,我也可以單獨留下我的代碼。
所以主要的問題是:Mapper對象是否用於多次調用map()?
獎金問題是:重寫代碼會更有效嗎?
您正在尋找的是setup
和cleanup
。 setup
在多次調用map
之前運行一次,並在調用所有maps
后調用一次cleanup
。 您可以覆蓋這些,就像覆蓋map
。
為HBaseConfiguration
和HTable
使用私有成員對象。 在setup
初始化它們。 在map
執行hTable.put()
。 在cleanup
執行hTable.flushCommits()
和HConnectionManager.deleteConnection()
。 您可能要小心的唯一事情就是在緩沖更多數據而不是內存可以處理的情況下,更多地刷新提交。 在這種情況下,您可能希望通過跟蹤您看到的記錄數來清除地圖中的每1000條記錄或其他內容。
這肯定會更有效率! 打開和關閉該連接將產生大量開銷。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.