概要说明
Inceptor 组件经常遇到连接数相关问题,本文简单介绍一下 Inceptor 相关的各种连接的说明,以及对应的参数;
详细说明
主要包含如下几种连接的说明:
- beeline 或者 waterdrop 的 session 连接
- thrift 10000 端口的连接
- metastore 9083 端口的连接,以及连接池
- metastore -> txsql 的连接
- txsql MasterWorkerThread * MasterIORoutineCnt 连接数
Session 连接数量
一般翻译成会话,一个 session 里面可以有很多操作,一般来说 session 的连接数量是受端口连接数的限制。
在 Inceptor 中 10000 端口连接数的限制是通过参数 hive.server2.thrift.max.worker.threads
控制的,参数说明 Maximum number of worker threads when in TCP mode。而这个参数控制的是在 TCP 状态下ESTABLISHED 状态的数量,对其他状态的并不会检测,所以会出现 session 数量大于这个限制值的,只能说明这个参数限制了可用的 session 数量;
一般的我们说调整 Inceptor 连接数,也是调整这个参数;可以理解为调整可用 session 连接数
Thrift 连接数量
10000 端口的连接,通过参数hive.server2.thrift.max.worker.threads
控制;
Inceptor -> Metastore 连接数量
没有限制 9083 端口的连接数,但是限制了连接 metastore 的数量,hive.metastore.server.max.threads
这个参数是 metastore 最大允许连接数量;
Metastore -> TxSQL
metastore 是通过连接池去连接 txsql 的,使用的 bonecp 库实现的,可以通过 datanucleus.connection.max
控制,默认连接池只有 30 个可用 connection;
TxSQL 连接数
TxSQL 的最大连接数是通过计算得到的,是 MasterWorkerThread
和 MasterIORoutineCnt
的乘积。
这里需要了解一下 TxSQL 的一个特点,TxSQL 对外提供服务的是 proxy, 每个节点上都有一个 proxy, 每个 proxy 会把消息发送到 master, 而 master 是可能变化的,master 的数量只能是 1个,所以希望修改 txsql 连接数的时候,是修改 /usr/bin/txsql/etc/phxsqlproxy.conf
里的 MasterWorkerThread
数和 MasterIORoutineCnt
数。
前者为处理连接的线程池里的最大线程数量,而后者为每个线程管理的协程数量,由于对 CPU 的要求比较高,这两个值不宜设置过大。
说明
- 整个流程就是通过 Thrift 10000 端口与 Inceptor server 建立 Session 连接;
- 与 Inceptor Server 建立连接的同时,需要 inceptor-sever 与 Metastore 建立连接;
- 同时 metastore 与 txsql 连接时会有可用连接池限制;
- 最后 txsql server 本身也有最大连接数限制。
整体的连接数限制是由这几个参数共同作用的。单纯修改某个参数,只能提高某个组件的限制,并不能为整体性能带来很大的提升。