Hive server2慢启动问题排查与解决

1、问题描述

在Hive升级到2.3.6版本后,启动Hive server2需要花费15分钟左右的时间,这对于平时调试和紧急重启影响很大。因此查看启动log,发现两处疑点:
Hive server2慢启动问题排查与解决Hive server2慢启动问题排查与解决
发现主要耗时就在这两处,第一次6分多钟第二次刚好5分钟。

2、问题排查

不多不少的5分钟让我想到了配置metastore连接的超时时间(hive.metastore.client.socket.timeout)刚好也是300s,于是去看这部分代码,并增加了些日志来排查。
org/apache/hadoop/hive/metastore/RetryingMetaStoreClient.java
Hive server2慢启动问题排查与解决
这两部分的作用是在启动Hive server2时,连接metastore按库缓存所有表的元数据信息,来给之后的query加速。
通过添加日志,计算出每缓存100张表的元数据信息大约需要花费1s。我们tmp库下至少有5万张表,也就是需要向metastore连接500s左右的时间,而在300s的时候,Hive server2向metastore的连接就中断了,并抛出异常java.net.SocketTimeoutException: Read timed out

3、问题解决

调小hive.metastore.client.socket.timeout可能会影响一些正常的query读取metastore,因此增加参数hive.server2.init.load.table.limit来限制Hive server2启动时向metastore的单次请求加载表的最大数量。
具体代码参考PR:[HIVE-23710],欢迎review!