我正在浏览许多hbase连接池的示例和博客。我试过使用htablepool,编译器会显示它的折旧(使用clouderacdh5.4.0,hbase版本-1.0.0-cdh5.4.0)而且htable类不是线程安全的,所以我没有直接示例化htable,而是尝试通过从hconnectionmanager获取连接来使用htableinterface,但是这也被贬低了。上面说使用连接工厂。我可以得到一个完整的优化和最好的方式来做连接池池有表池替代htablepool
iyr7buue1#
甚至hconnectionmanager现在也被弃用了。新方法是使用connectionfactory。我还感到困惑的是,与旧API中的htablepool相比,新客户机中没有连接池。但是新的方法是将executor服务传递给第二个参数中的connectionfactory.createconnection。请参阅此代码以获取更多参考https://hbase.apache.org/xref/org/apache/hadoop/hbase/client/example/multithreadedclientexample.html如果不传递executor服务,它将创建一个默认池,最终将创建与区域服务器数量相同的线程数。我做了一个perf测试,看看传递不同大小的executor服务与不显式传递任何executor服务有什么区别,相信我,默认方法(不传递executor服务)的效果和传递线程池超过20的服务一样好(我有10个区域服务器)。所以在我看来,您可以在不显式传递executor服务的情况下使用它。
1条答案
按热度按时间iyr7buue1#
甚至hconnectionmanager现在也被弃用了。新方法是使用connectionfactory。
我还感到困惑的是,与旧API中的htablepool相比,新客户机中没有连接池。但是新的方法是将executor服务传递给第二个参数中的connectionfactory.createconnection。请参阅此代码以获取更多参考https://hbase.apache.org/xref/org/apache/hadoop/hbase/client/example/multithreadedclientexample.html
如果不传递executor服务,它将创建一个默认池,最终将创建与区域服务器数量相同的线程数。
我做了一个perf测试,看看传递不同大小的executor服务与不显式传递任何executor服务有什么区别,相信我,默认方法(不传递executor服务)的效果和传递线程池超过20的服务一样好(我有10个区域服务器)。所以在我看来,您可以在不显式传递executor服务的情况下使用它。