gpt4 book ai didi

java - 单个 hadoop Mapper 对象是否用于多次调用 map()?

转载 作者:可可西里 更新时间:2023-11-01 14:22:14 26 4
gpt4 key购买 nike

所以,我有一个更新 HBase 表的映射器。在 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() 时立即刷新所有更改。

但是,只有在多次调用 map() 时重新使用 Mapper 对象时才值得这样做。否则,我还不如留下我的代码。

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

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

最佳答案

您正在寻找的是setupcleanupsetupmap 被多次调用之前运行一次,而 cleanup 在所有 map 被调用之后被调用一次叫。您可以像覆盖 map 一样覆盖它们。

为您的 HBaseConfigurationHTable 使用私有(private)成员对象。在 setup 中初始化它们。在你的 map 中执行你的 hTable.put()。在您的cleanup 中执行hTable.flushCommits()HConnectionManager.deleteConnection()。您可能需要注意的唯一一件事是刷新提交,而不仅仅是在最后刷新提交,以防您缓冲的数据多于内存可以处理的数据。在这种情况下,您可能希望每 1000 条记录或 map 中的某些内容刷新一次,方法是跟踪您看到的记录数。

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

查看 documentation for Mapper

关于java - 单个 hadoop Mapper 对象是否用于多次调用 map()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10301858/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com