如何在 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/ 下的非常大的文件

删除与分区相关的hdfs文件后无法联系hive表分区

hadoop上删除文件

如何在 Hadoop HDFS 目录中移动文件?

如何在ubuntu中将hadoop的hdfs进行格式化?我用hdfs namenode -format命令提示没有hdfs该命令。

怎样使用命令行将hdfs上面的目录删除