是用于多次调用 map() 的单个 hadoop 映射器对象



所以,我有一个更新HBase表的映射器。 在 map() 函数中,I :

1) 实例化 HBase配置

2) 实例化一个 HTable

3)调用hTable.put()很多次来添加行

4) 调用 hTable.flushCommits() 来刷新我的更改

5) 调用 HConnectionManager.deleteConnection() 以终止与 HBase 的连接

但是,这似乎效率低下。 我想在我的映射器类的构造函数中实例化HBaseConfiguration和HTable。 然后我可以让我的映射器类实现 Closeable,在 close() 方法中调用 hTable.flushCommits() 和 HConnectionManager.deleteConnection()。 这样,在每次调用 map() 时,我都会缓冲我的 put() 调用,并在调用 close() 时立即刷新所有更改。

但是,仅当 Mapper 对象被重用于对 map() 的多次调用时,这才值得。 否则,我不妨不要管我的代码。

所以主要问题是:Mapper 对象是否用于对 map() 的多次调用?

额外的问题是:重写的代码会更有效率吗?

您正在寻找的是setupcleanupsetup在调用map之前运行一次,cleanup在所有maps被调用后被调用一次。您覆盖这些就像覆盖map一样。

将私有成员对象用于HBaseConfigurationHTable。在setup中初始化它们。在你的map里做你的hTable.put().在你的cleanuphTable.flushCommits()HConnectionManager.deleteConnection()。您可能唯一需要注意的是,在您缓冲的数据超过内存可以处理的数据的情况下,不要在最后刷新提交。在这种情况下,您可能希望通过跟踪您看到的记录数来刷新地图中的每 1000 条记录或某些内容。

这肯定会更有效率!打开和关闭该连接将产生大量开销。

查看映射器的文档

相关内容

  • 没有找到相关文章

最新更新