所以,我有一个更新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