记一次hive drop table 卡死的事故

事故总述

这次事故是可以避免的,责任在于Hive的管理团队未把hive的使用规范告知使用者。

现象

A同事在测试程序时,首先发现Hive-metastore的连接非常缓慢。
B同事在测试程序时,在HUE发现有一个表drop不掉(卡死,直到timeout)。
查询资料发现:https://blog.csdn.net/u010689354/article/details/79844513 论述要改字符集,但是我们比较特殊:
1.之前使用均正常
2. 系统有将近140TB数据,不可能直接drop元数据。

排查

但是,按照字符编码这个思路排查下去,我们直接看mysql的元数据,

1在TBLS表中根据表名字找到TBL_ID

根据drop不掉的表格的名字,找到TBL_ID

2在PARTITIONS表格中根据TBL_ID找到分区信息PART_ID

在PARTITIONS表格中,发现了下图的样子:
在这里插入图片描述
可以看出PART_ID为359201的分区是有问题的,根据与B同事的对话,可以确定,此次metastore的问题大致上是由中文分区字段造成。
在这里插入图片描述

修复

  1. 在如下的表:PARTITION_PARAMS,PARTITION_KEY_VALS删除分区字段(根据PART_ID检索)
  2. 在如下的表:PARTITIONS删除分区(根据PART_ID检索)
  3. 在如下的表:TBLS中删除表格(根据上一个表的TBL_ID检索)【这一步可以不做,使用”drop表“更好】

测试

A同事反应:hive-metastore连接正常
B同事反应:此表格删除正常

连接数正常:(如下 60不多)

十一月 20, 2018 5:29:08 下午 base.config.HiveStatus getNumsHiveNode
警告: node=192.168.1.190,port1#num1=9083#60,port2#num2=10000#4
十一月 20, 2018 5:29:18 下午 base.config.HiveStatus getNumsHiveNode
警告: node=192.168.1.191,port1#num1=9083#11,port2#num2=10000#20
十一月 20, 2018 5:29:18 下午 base.config.HiveStatus getHiveNodesStatus
信息: bestHiveNode:192.168.1.191

防范

这次是因为一个表格生成的脚本,使得分区为中文,因此让使用者加上,加强过滤【至少保护hive】

flag=`echo ${project_name} | awk '{if($0~/^([0-9a-zA-Z])+$/) print $0}'`
if [ -z ${flag} ]; then
    echo "[ERROR]the input project_name ${project_name} is incorrect, please check it. "
    exit 1
fi
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值