知识库 : HBase Thrift Server性能优化笔记

1.     性能问题背景介绍

在舆情系统中,负责内容采集工作的爬虫系统以分布式列式存储数据库HBase作为核心存储系统,爬虫在抓取数据时会大量的向HBase中插入数据,在爬虫运行过程中发现多个爬虫同时启动后会出现数据写入阻塞的现象。在一个爬虫插入数据,另一个程序读取数据时也会出现阻塞现象。

爬虫系统的默认设置为每个爬虫针对同一个域名的抓取线程数最大为8个,同一个爬虫的最大线程数为16个。

针对这一现象进行了多种测试,阻塞现象会反复出现,基本能确定瓶颈是HBase的问题,具体原因待查。

2.     问题原因

在查阅HBase文档(http://hbase.apache.org/book.html#config.files)后发现,负责外部系统与HBase通信的Thrift Server服务具有三个参数用来控制同时启动的线程数量。

这三个参数分别是:

l hbase.thrift.minWorkerThreads

l hbase.thrift.maxWorkerThreads

l hbase.thrift.maxQueuedRequests

 

hbase.thrift.minWorkerThreads是thrift server的最小线程数,默认值为16个。hbase.thrift.maxWorkerThreads是thrift server的最大线程数,默认值为1000个。hbase.thrift.maxQueuedRequests是在队列中等待的链接数量,默认值为1000个。

当程序访问HBase Thrift Server时,每当有一个新的连接就会创建一个新的线程,直到线程数量达到最小线程数。当线程池中没有空闲的线程时,新的连接会被加入队列。只有当队列中的等待连接数量超过队列的最大值时,才会为这些等待中的连接创建新的线程,直到线程数量达到最大线程数。当线程数量超过最大线程数时,Thrift Server就会开始丢弃连接。

3.     解决办法

在HBase中加入上述三个参数并设置合适的线程数后,启动HBase Thrift Server服务,之前出现的阻塞问题即可解决。