本文介绍Hive服务异常的排查方法和解决方案。
异常排查
如果客户端遇到异常或性能等问题,您可以按照如下步骤进行排查:
排查异常时间段机器CPU、内存、网络以及磁盘是否有异常。
排查组件是否正常:
检查访问集群的Hive组件中HiveMetaStore和HiveServer2巡检项是否有异常提示,如有则需要继续根据对应巡检项指标进行排查。例如GC指标提示内存使用率过高,则需要调整内存。具体操作,请参见Hive内存参数调整。
如果服务正常,则可查看集群监控页中Hive组件HiveMetaStore和HiveServer2的关键指标监控项,根据指标判断服务参数是否需要调整。具体操作,请参见Hive巡检项及服务关键指标说明。
可继续对HiveMetaStore或者HiveServer2的日志进行排查,日志路径一般位于/mnt/disk1/log/hive/中,可逐步检查组件的.log、.err、.out及GC等日志,判断HiveMetastore或者HiveServer2出现异常的真实原因。
HiveMetaStore后端数据库问题
常见异常一:Host xxxx is blocked because of many connection errors; unblock with 'mysqladmin flush-hosts'
问题原因:客户端连接数据库出错次数太多,导致再次连接时被数据库拒绝。
解决方案:
方案1:可将数据库参数max_connect_errors稍微调大,调整后可立即生效。
重要max_connect_errors参数主要防止异常客户端暴力破解数据库密码,建议您不要将该参数值设置过大。
登录数据库,执行如下命令,查看当前值。
show global variables like '%max_connect_errors%'
执行如下命令,将当前值修改为大一点的数值。
set global max_connect_errors=[改成较大值]
方案2:执行如下命令,清除出错的Hosts缓存或者登录数据库执行flush hosts。
mysqladmin -u root -p flush-hosts
常见异常二:Metastore Connection Driver : com.mysql.jdbc.Driver Metastore connection User: xxx ,stderr=org.apache.hadoop.hive.metastore.HiveMetaException: Failed to get schema version. Underlying cause: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException : Communications link failure
问题原因:自建RDS未初始化Hive Meta数据库。
解决方案:需要手动初始化Hive Meta数据库。具体步骤,请参见Metastore初始化。
HiveMetaStore问题
常见异常:org.apache.hadoop.hive.ql.metadata.HiveException: MetaException(message:Could not connect to meta store using any of the URIs provided
问题原因1:可能是HiveMetastore中断或者HiveMetastore压力过大,例如长时间GC。
解决方案:
查看Metastore的GC日志,可以将HiveMetastore内存调大。具体操作,请参见Hive内存参数调整。
查看Metastore的日志,如果有
java.lang.OutOfMemoryError
相关报错,可以将HiveMetastore内存调大。具体操作,请参见Hive内存参数调整。查看是否有
hive.metastore.transactional.event.listeners
和hive.metastore.event.db.listener
等配置,部分Listener会导致HiveMetaStore内存使用率快速增长,可以去掉相关Listener之后重启HiveMetaStore。如果无明显原因,但客户端请求或并发较多,也可以将Metastore内存调大,默认内存为500 MiB。具体操作,请参见Hive内存参数调整。
查看Metastore的日志中的报错信息,如果HiveMetastore无法启动,需要核对数据库链接配置等是否正确。
问题原因2:可能是客户端与HiveMetastore之间网络不通,常见于自建ECS客户端场景。
解决方案:先查看两台机器能否连通,如果不能则需要解决机器网络互通的问题。
HiveServer2问题
常见异常一:HiveServer2突然重启,一段时间内恢复正常
问题原因:HiveServer2可能存在异常。查看执行的SQL或业务压力是否增大,如果是则通常通过调整服务内存可应对或缓解这种问题。
解决方案:推荐根据异常排查步骤分别排查机器环境以及组件自身的问题。
常见异常二:Unexpected end of file when reading from HS2 server. The root cause might be too many concurrent connections
问题原因:HiveServer2压力过大。
解决方案:排查是否有应用层(例如Flink作业等)持续调用Hive CLI,可以关闭持续调用Hive CLI的应用作业来解决问题。如果没有发现异常应用,可以调整内存及hive.server2.thrift.max.worker.threads参数。关于调整内存的具体操作,请参见Hive内存参数调整。
常见异常三:Could not connect to any of [xxx, 10000]
问题原因:HiveServer2可能存在异常。
解决方案:推荐根据异常排查步骤,分别排查机器环境或者组件自身的问题。
常见异常四:java.lang.OutOfMemoryError: Compressed class space
问题原因:HiveServer JVM Compressed class内存不足。
解决方案:在EMR控制台Hive服务配置页面的hive-env.sh
页签,修改 hive_server2_opts参数,调大Compressed class memory,例如:hive_server2_opts=-XX:CompressedClassSpaceSize=512m
(其他参数不变)。