我正在尝试使用HTablePool
来减少 HTable 实例的创建。但是我不知道应该在我的映射器/减速器中的哪个位置放置HTablePool.close()
.
当应用程序运行时,会调用多个映射器、减速器,它们可以在多台机器上运行。为了获得最佳性能增益,我认为HTablePool
每台机器都应该有一个,并且close()
调用应该延迟到整个应用程序关闭为止。但是我们怎么能告诉那些机器关闭它们的池呢?
欢迎任何建议!
在 Map/Reduce 工作的上下文中,我不认为 usingHTablePool
会给你带来显着的改进。
anHTablePool
带给你的是:
HTablePool
使用 a SynchronizedMap
,因此在多线程应用程序的上下文中这很方便。但是,在 Map/Reduce 作业的上下文中,您有多个节点并且任务是独立的,因此这并不能真正帮助您。HTable
每次都实例化 s 的需要。如果您有例如连续访问 HBase 的并发请求,这是一个有效的声明,但对于 Map/Reduce 作业来说不是那么多,因为您为每个任务实例化一次表。所以我想这真的取决于你的用例,如果你像你说的那样使用 Map/Reduce 作业,那么它可能不值得去做,HTablePool
因为你仍然需要在每个任务setup
的方法中实例化和关闭cleanup
.
我会考虑使用的唯一用例HTablePool
是具有大量并发请求的高频多线程应用程序 - 在这种情况下,使用池绝对是一个合适的用例。