我使用TThreadPoolServer
Thrift服务器写信给HBase,我对最大工作线程有以下HBase设置:
HBase的-site.xml中
<property>
<name>hbase.thrift.maxWorkerThreads</name>
<value>50000</value>
<source>hbase-site.xml</source>
</property>
这是我用来执行并发写入的脚本:
test.py
import happybase
from random import randint
connection = happybase.Connection('ec2-xx-xx-xx-xx.compute-1.amazonaws.com', timeout=50000)
table_name = 'test' + str(randint(0,1000000))
families = {
'cf1': dict(max_versions=1),
}
connection.create_table(table_name, families)
table = connection.table(name=table_name)
x = 0
while x < 1000000:
table.put('row-key' + str(x), {b'cf1:qual1': b'testtesttest', b'cf1:qual2': b'testestest'})
x += 1
现在如果我同时运行25个test.py实例,在创建18-20个连接之后所有其他连接都因为超时错误而无法连接,我检查了hbase服务器,thrift只能创建300个线程达到该限制时,不接受新连接并超时。
即使有300个线程,系统也没有压力,CPU和内存消耗非常低,因此我认为这是因为某些配置。
有人可以指导我为什么thrift没有创建更多的线程,在我的HBase配置中,thrift最大线程数是多少?