问题现象:在hive的分区表中删除了分区,命令执行返回成功,但是hdfs上对应的分区目录却没有删除。
执行删除分区的操作,命令返回成功,元数据中也不存在该分区。
hive> alter table default.logs drop partition (dt="2022",country="guangzhou") ;
OK
Time taken: 0.052 seconds
hive> show partitions default.logs ;
OK
dt=2022/country=beijing
dt=2022/country=wuhan
查看对应的目录,发现分区dt=2022/country=guangzhou并没有删除掉,正常情况下分区目录是会被删除的。
hadoop fs -ls /usr/hive/warehouse/logs/dt=2022/
Found 3 items
drwxr-xr-x - hadoop supergroup 0 2022-12-06 19:17 /usr/hive/warehouse/logs/dt=2022/country=beijing
drwxr-xr-x - hadoop supergroup 0 2022-12-06 20:02 /usr/hive/warehouse/logs/dt=2022/country=guangzhou
drwxr-xr-x - hadoop supergroup 0 2022-12-06 19:14 /usr/hive/warehouse/logs/dt=2022/country=wuhan
问题原因:要删除的分区目录不在元数据中。因为要删除的分区目录dt=2022/country=guangzhou是其他程序拉取数据生成的,正常情况下,生产数据后是要进行元数据同步(msck repair table 表名 ;),但是该分区目录生成后没有进行分区修复操作来同步元数据。导致元数据中并没有该目录的路径对应的分区,所以删除该分区时候无法删除掉该目录。
解决方案:修复分区同步元数据,再删除该目录。
hive> msck repair table default.logs ;
OK
Partitions not in metastore: logs:dt=2022/country=guangzhou
Repair: Added partition to metastore logs:dt=2022/country=guangzhou
Time taken: 0.07 seconds, Fetched: 2 row(s)
hive> alter table default.logs drop partition (dt="2022",country="guangzhou") ;
Dropped the partition dt=2022/country=guangzhou
OK
Time taken: 0.078 seconds
此时,对应的分区目录被删除
[hadoop@172 ~]$ hadoop fs -ls /usr/hive/warehouse/logs/dt=2022/
Found 2 items
drwxr-xr-x - hadoop supergroup 0 2022-12-06 19:17 /usr/hive/warehouse/logs/dt=2022/country=beijing
drwxr-xr-x - hadoop supergroup 0 2022-12-06 19:14 /usr/hive/warehouse/logs/dt=2022/country=wuhan
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有