如何在 Hadoop HDFS 中删除多级分区
Posted
技术标签:
【中文标题】如何在 Hadoop HDFS 中删除多级分区【英文标题】:How to delete multi level partition in Hadoop HDFS 【发布时间】:2019-12-13 06:52:26 【问题描述】:有一个多级分区的 Hive 表,现在需要删除旧的分区文件夹 超过某些年份。
多级分区如下所示。
/data/warehouse/suite/catalyst/site/company=abc/year=2019/month=08
/data/warehouse/suite/catalyst/site/company=cde/year=2018/month=05
/data/warehouse/suite/catalyst/site/company=cde/year=2017/month=11
/data/warehouse/suite/catalyst/site/company=cde/year=2016/month=11
如果要删除超过 2 年的分区,即需要删除 /year=2017/month=11 和 year=2016/month=11 怎么做。
请帮忙,在此先感谢。
【问题讨论】:
看到这个答案:***.com/a/56646879/2700344 - 几乎完全一样 这能回答你的问题吗? hive drop all partitions keep recent 4 days paritions @leftjoin 感谢您的回复..通过您的回答。它看起来很好。我找到了不同的解决方案。 【参考方案1】:ALTER TABLE mytable drop if exists partition (year<='2017')
您无法按预期控制分区删除
你可以用unix方式试试,比较靠谱。
hive -S -e "show partitions test" > tmp.txt
curr_year=`expr "$(date +'%Y')" - "2"`
curr_mon=`expr "$(date +'%m')" - "1"`
cur_part=$curr_year$curr_mon
cur_part=201812
echo $cur_part
#echo "year=2016/month=12" | cut -d '=' -f 2 | grep -o -E '[0-9]+'
#echo "year=2016/month=12" | cut -d '=' -f 4 | grep -o -E '[0-9]+'
while read -r line
do
part_year=`echo $line | cut -d '=' -f 2 | grep -o -E '[0-9]+'`
part_mon=`echo $line | cut -d '=' -f 3 | grep -o -E '[0-9]+'`
part_part=$part_year$part_mon
echo $part_part
if [[ $part_part -lt $cur_part ]]
then
echo "$part_year , $part_mon"
hive --hivevar year="$part_year" --hivevar month="$part_mon" -e 'ALTER TABLE test DROP IF EXISTS PARTITION (year="$hivevar:year", month="$hivevar:month")'
fi
done < tmp.txt
> show partitions test;
OK
year=2016/month=12
year=2017/month=11
year=2017/month=12
year=2018/month=12
> show partitions test;
OK
year=2017/month=12
year=2018/month=12
我已经测试过它工作正常
【讨论】:
Strick 感谢您的回复,我们还需要考虑月份,这意味着如果我们今天运行,我们需要保留 year=2017 和 month =12 分区。而且这里的公司还有更高级别的分区库 感谢您的宝贵回答,它给了我更多选择。谢谢! @GirishHM 如果对您有帮助,请点赞并将其标记为答案以上是关于如何在 Hadoop HDFS 中删除多级分区的主要内容,如果未能解决你的问题,请参考以下文章
如何删除 /hadoop/hdfs/journal/hdfsha/current/ 下的非常大的文件
如何在ubuntu中将hadoop的hdfs进行格式化?我用hdfs namenode -format命令提示没有hdfs该命令。