当我应该关闭HTablePool在MapReduce作业



我试图使用HTablePool来减少HTable实例的创建。然而,我不知道在我的映射器/还原器我应该把HTablePool.close()

当应用程序运行时,调用多个映射器,reducer,它们可以在多台机器上运行。为了获得最佳性能,我认为每台机器应该有一个HTablePool,并且close()调用应该延迟到整个应用程序关闭为止。但是我们如何告诉这些机器关闭它们的池呢?

欢迎任何建议!

在Map/Reduce作业中,我认为使用HTablePool不会带来显著的改进。

HTablePool带给你的是:

  • 线程安全: HTablePool为您的表使用SynchronizedMap,因此在多线程应用程序的上下文中,这很方便。然而,在Map/Reduce作业的上下文中,你有多个节点,任务是独立的,所以这并不能真正帮助你。
  • 池化对象:由于它是一个池,这允许您避免每次实例化HTable的需要。如果你有连续访问HBase的并发请求,这是一个有效的语句,但对于Map/Reduce作业来说就不是那么多了,因为你每个任务实例化一次表。

所以我想这真的取决于你的用例,如果你正在使用Map/Reduce作业,那么它可能不值得用HTablePool,因为你仍然需要在setup中实例化,并在cleanup方法中关闭每个任务。

我考虑使用HTablePool的唯一用例是具有大量并发请求的高频多线程应用程序——在这种情况下,使用池绝对是一个合适的用例。

相关内容

  • 没有找到相关文章

最新更新