Hive日志持续输出'interrupted waiting to send rpc request to server'告警排查
Hive集群日志被"interrupted waiting to send rpc request to server"告警占满的问题分析
我们运行中的Hive集群,单线程每秒都会输出告警信息:
interrupted waiting to send rpc request to server
但Hive查询执行一切正常。日志被该信息占满的原因是什么?我们已通过重启HiveServer解决问题,但未找到根本原因及预防方案。为避免此类问题,尝试在hive-log4j2.properties中添加以下两种过滤配置,均未生效:
尝试方案一
appender.DRFA.filter.burst.type = BurstFilter appender.DRFA.filter.burst.onMatch = DENY appender.DRFA.filter.burst.onMisMatch = NEUTRAL appender.DRFA.filter.burst.level = WARN appender.DRFA.filter.burst.rate = 2 appender.DRFA.filter.burst.maxBurst = 5
尝试方案二
appender.DRFA.filter.myfilter.type = RegexFilter appender.DRFA.filter.myfilter.regex = .*Database does not exist: databases.* appender.DRFA.filter.myfilter.onMatch = DENY appender.DRFA.filter.myfilter.onMisMatch = ACCEPT
问题根源分析
这个告警通常是HiveServer2的后台线程(比如元数据心跳线程、会话清理线程)向Hive Metastore发送RPC请求时被中断导致的,常见触发原因:
- Metastore临时出现网络抖动或短暂不可用,线程RPC请求超时被中断,但后续自动恢复,因此查询不受影响
- HiveServer2内部线程池资源耗尽,部分线程被强制中断
- Metastore客户端重试机制配置不合理,中断后反复触发告警
过滤配置未生效的原因
- 方案一(BurstFilter):可能是告警日志级别并非WARN,或者过滤器未正确添加到对应Appender节点下,也可能Hive的log4j2配置加载顺序异常,导致该配置被其他规则覆盖。
- 方案二(RegexFilter):正则表达式匹配的是
.*Database does not exist: databases.*,和实际告警内容完全不匹配,自然无法过滤目标日志。
解决与预防方案
- 正确的日志过滤配置:修改RegexFilter的正则表达式为匹配实际告警内容:
appender.DRFA.filter.myfilter.type = RegexFilter appender.DRFA.filter.myfilter.regex = .*interrupted waiting to send rpc request to server.* appender.DRFA.filter.myfilter.onMatch = DENY appender.DRFA.filter.myfilter.onMisMatch = ACCEPT
修改后需重启HiveServer2让配置生效,若Hive支持动态加载log4j2配置,也可触发重载。
- 根源预防措施:
- 检查Metastore与HiveServer2之间的网络稳定性,排查是否存在间歇性丢包或延迟
- 调整HiveServer2线程池参数(如
hive.server2.worker.threads),避免线程资源耗尽 - 优化Metastore客户端配置,例如调整
hive.metastore.client.socket.timeout、hive.metastore.client.connect.retry.delay等参数,减少RPC请求被中断的概率 - 开启Metastore心跳机制监控,及时发现Metastore异常状态
内容的提问来源于stack exchange,提问作者natarajan k
相关产品推荐
相关产品推荐

