本文介绍Hive服务异常的排查方法和解决方案。

异常排查

如果客户端遇到异常或性能等问题,您可以按照如下步骤进行排查:
  • 排查异常时间段机器CPU、内存、网络以及磁盘是否有异常。
  • 排查组件是否正常:
    1. 检查访问集群的Hive组件中HiveMetaStoreHiveServer2巡检项是否有异常提示,如有则需要继续根据对应巡检项指标进行排查。例如GC指标提示内存使用率过高,则需要调整内存。具体操作,请参见Hive服务内存参数调整
    2. 如果服务正常则可查看HiveMetaStore或者HiveServer2在集群监控页Hive组件HiveMetaStoreHiveServer2关键指标监控项,根据指标项判断服务参数是否需要调整。具体操作,请参见Hive巡检项及服务关键指标说明
    3. 可继续对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参数主要防止异常客户端暴力破解数据库密码,建议您不要将该参数值设置过大。
    1. 登录数据库,执行如下命令,查看当前值。
      show global variables like '%max_connect_errors%'
    2. 执行如下命令,将当前值修改为大一点的数值。
      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.listenershive.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-env.sh hive_server2_opts参数,调大Compressed class memory,例如:hive_server2_opts=-XX:CompressedClassSpaceSize=512m(其他参数不变)。