背景:由于历史问题,之前有些业务使用hive表数据,直接通过脚本将表数据目录整体移走,导致元数据一直存在,随着时间增长,impala每次写入数据后,刷新元数据,随着元数据越来越多,加载catalog的内存就会oom,之前历史任务都是连接在同一台的impala上,连接impala执行刷新分区的连接线程一直closdwait,链接不中断,导致连接数越来越多,不释放,任务资源不释放,集群资源占满,任务都在pending,通过执行drop partition命令会报错分区目录不存在,针对这些历史表,在之前移动完分区后,同时执行下面删除元数据脚本可以避免元数据过大的问题
查看所有表分区总数命令
select count(*) sum ,TBL_NAME FROM PARTITION_PARAMS par_params join
(
select
par.PART_ID,
TBL_NAME
FROM
TBLS tbl join PARTITIONS par on tbl.tbl_id = par.tbl_id
) t on par_params.PART_ID=t.PART_ID group by TBL_NAME order by sum desc
#!/bin/bash
set -e # 开启“出错即退出”模式(可选,增强安全性)
# -------------------------- 1. 交互式输入 --------------------------
# 静默输入MySQL密码(安全,不显示在终端)
read -s -p "请输入Hive元数据库(hive)的密码: " MYSQL_PASS
echo # 换行
# 输入要删除的分区day值(如:20231218,对应PART_NAME中的day=20231218)
read -p "请输入要删除的分区day值(会删除PART_NAME包含'day=$DAY'的记录): " DAY
[ -z "$DAY" ] && {
echo "错误:DAY不能为空!"; exit 1; }
# 输入目标表名(如:ads.dec_g_cdr )
read -p "请输入要操作的Hive表名(格式:库名.表名): " TABLE_NAME
[ -z

最低0.47元/天 解锁文章
909

被折叠的 条评论
为什么被折叠?



