#Hive常见故障 #大数据 #生产环境真实案例 #Hive #离线数据库 #整理 #经验总结

说明:此篇总结hive常见故障案例处理方案 结合自身经历 总结不易 +关注 +收藏 欢迎留言

更多Hive案例汇总方案 解决方案:请往下翻

Metastore连接数过高导致hive任务执行慢或任务失败

问题背景与现象

  1. Hive执行查询操作时查询过慢或者查询失败。

  2. 查询管理界面连接数如下:并发连接数在1000以上。

  3. 查看metastore日志存在如下报错:

    java.sql.SQLException: Timed out waiting for a free available connection.
    at com.jolbox.bonecp.DefaultConnectionStrategy.getConnectionInternal(DefaultConnectionStrategy.java:88)
    at com.jolbox.bonecp.AbstractConnectionStrategy.getConnection(AbstractConnectionStrategy.java:90)
    at com.jolbox.bonecp.BoneCP.getConnection(BoneCP.java:553)
    at com.jolbox.bonecp.BoneCPDataSource.getConnection(BoneCPDataSource.java:131)
    at org.datanucleus.store.rdbms.ConnectionProviderPriorityList.getConnection(ConnectionProviderPriorityList.java:57)
    at org.datanucleus.store.rdbms.ConnectionFactoryImpl$ManagedConnectionImpl.getConnection(ConnectionFactoryImpl.java:418)
    at org.datanucleus.store.rdbms.ConnectionFactoryImpl$ManagedConnectionImpl.getXAResource(ConnectionFactoryImpl.java:378)
    at org.datanucleus.store.connection.ConnectionManagerImpl.allocateConnection(ConnectionManagerImpl.java:328)
    at org.datanucleus.store.connection.AbstractConnectionFactory.getConnection(AbstractConnectionFactory.java:94)
    at org.datanucleus.store.AbstractStoreManager.getConnection(AbstractStoreManager.java:430)
    at org.datanucleus.store.AbstractStoreManager.getConnection(AbstractStoreManager.java:396)
    at org.datanucleus.store.rdbms.query.SQLQuery.performExecute(SQLQuery.java:262)
    at org.datanucleus.store.query.Query.executeQuery(Query.java:1786)
    at org.datanucleus.store.query.AbstractSQLQuery.executeWithArray(AbstractSQLQuery.java:339)
    at org.datanucleus.store.query.Query.execute(Query.java:1654)
    at org.datanucleus.api.jdo.JDOQuery.execute(JDOQuery.java:221)

原因分析

  1. metastore采用了线程池,若使用连接数达到上限,则会使新请求处于等待状态,待有空闲连接线程时才会进行连接。

  2. metastore在当前版本未加入负载均衡机制,会默认连接配置文件中的第一个IP所在节点的metastore实例,在连接数到达一定数量后会导致metastore连接数负载过高。

  3. 当Hive分区数目>5000时,会导致Hive在获取元数据时过慢,无法快速完成任务执行释放连接。

解决办法

  1. 请确认是否有第三方程序直接连接metastore,例如使用vertica/kettle等第三方软件或应用侧编写的直连metastore的应用。

  2. 进行如下操作:

    1. 调整metastore的METASTORE_GC_OPTS参数值中-Xms -Xmx -Xmn为合适值。

      推荐值如下(可根据以下三组推荐值进行调整):

      -Xms4G -Xmx8G -Xmn1G
      
      -Xms8G -Xmx16G -Xmn2G
      
      -Xms16G -Xmx32G -Xmn4G
    2. 在Hive服务参数中适当调整maxConnectionsPerPartition,默认为10,可适当调大,建议调整至25。不推荐调整至最大值。

      在Hive服务参数中适当调整partitionCount的参数值,建议调整到3。

      原则:partitionCount乘maxConnectionsPerPartition小于DBService最大连接数。

    3. 在DBService服务参数中调整dbservice.database.max.connections参数值,建议调整至800。

  3. 删除无用分区。

  4. 从业务侧降低metastore连接数至1000以下。

更多Hive案例汇总方案 (点击跳转) :

Hive常见故障多案例维护宝典 --项目总结(宝典一)

Hive常见故障多案例维护宝典 --项目总结(宝典二)

目录内容如下:

架构概述
【1】参数及配置类常见故障

【2】任务运行类常见故障

【3】SQL使用类常见故障

最后

谢谢大家 @500佰

更多推荐