Hive连接session优化
HS2会话/操作超时的检查间隔:
hive.server2.session.check.interval 15min->5m
HS2会话持续时间未访问超时时间:
hive.server2.idle.session.timeout 12h->5m
HS2从会话空闲时间中排除实时操作,没有活动、没有挂起操作的会话才会被认为是空闲的:
hive.server2.idle.session.check.operation 默认为启用
HS2持续时间内未访问,则操作将关闭:
hive.server2.idle.operation.timeout 默认为6h
设置为正值,仅检查终端状态下的操作(FINISHED、CANCELED、CLOSED、ERROR)。
设置为负值,检查所有操作而不考虑状态。例如-7200000的值表示正在运行的查询/操作如果仍在运行,将在2小时后超时。
hiveserver2排查连接问题:
1、netstat -antlp|grep 10000
2、lsof -i:10000
3、ls -lrt /proc/12933/fd/
4、cd /proc/12933/fd/
5、lsof -i:10000 | grep “ESTABLISHED” |awk ‘{print $4}’ |awk -F “u” ‘{print $1}’ |xargs ls -all
每隔30min执行一次,覆盖写入hdfs
/30 * * * * hdfs dfs -copyFromLocal -f //.log /tmp/**.log01
Hive工作线程逻辑
1、hiveserver2 可以建立连接数1000,但同时发出请求数受等待队列控制
Thrift工作线程数:hive.server2.thrift.max.worker.threads=1000
2、Client与HS2建立连接,,HiveServer2收到请求后,先放到等待队列里(如果队列已满,则抛出异常)
等待队列的长度:hive.server2.async.exec.wait.queue.size=1000
3、计算线程从等待队列中取请求,进行处理(请求不一定都提交到集群上,如show databases)
计算线程的数量:hive.server2.async.exec.threads 1000
metastore可以建立连接数1200,并且每个连接都可以发出请求。
连接池中的最大连接数:datanucleus.connectionPool.maxPoolSize(默认10)100,有3个HMS实例,每个服务器有4个池,则可以容纳1200个连接。
mysql /etc/my.conf max_connections(默认151)3000,最大用户连接数
hivemetastore排查连接问题:
1、netstat -antlp|grep 9083
2、lsof -i:9083
3、ls -lrt /proc/43743/fd/
4、cd /proc/43743/fd/
5、lsof -i:9083 | grep “ESTABLISHED” |awk ‘{print $4}’ |awk -F “u” ‘{print $1}’ |xargs ls -all
metastore连接池数量配置:
datanucleus.connectionPool.maxPoolSize 缺省值为10,如果poolSize=100,有3个HMS实例,每个服务器有4个池,则可以容纳1200个连接。
mysql /etc/my.conf max_connections = 3000 默认151,最大用户连接数建议3000
其他优化线程数配置:
hive.metastore.fshandler.threads 缺省值为15,用于在MSCK阶段中扫描分区的线程数。
hive.compactor.worker.threads 默认值为0,在这个metastore实例上运行多少个合并工作线程。支持事务时至少在一个Metastore实例上大于0。
版权归原作者 sunxunyong 所有, 如有侵权,请联系我们删除。