我应该何时在MapReduce作业中关闭HTablePool?

时间:2013-01-15 19:17:09

标签: hadoop mapreduce hbase

我正在尝试使用HTablePool来减少可创建的实例。但是我不知道我的映射器/缩减器应放在哪里HTablePool.close()

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

欢迎任何建议!

1 个答案:

答案 0 :(得分:1)

在Map / Reduce工作的背景下,我认为使用HTablePool不会给你带来显着的改善。

HTablePool为您带来的是:

  • 线程安全性HTablePool为您的表使用SynchronizedMap,因此在多线程应用程序的上下文中这很方便。但是,在Map / Reduce作业的上下文中,您有多个节点,并且任务是独立的,因此这对您没有任何帮助。
  • 池化对象:由于它是一个池,因此您可以避免每次都实例化HTable。这是一个有效的语句,以防你有连续访问HBase的并发请求,但对于Map / Reduce作业而言则不是那么多,因为每个任务都要对表进行一次实例化。

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

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