1 问题描述

Spark 运行时出错: 表元数据删除后,数据仍在 hdfs 上,所以导致无法创建同名的新表

org.apache.spark.sql.AnalysisException: Can not create the managed table.
The associated location('hdfs://nameservice1/user/hive/warehouse/tmp.db/tmp_iot') already exists;

2 解决办法

解决办法就是删除 hdfs 文件

-- 查看文件
hadoop fs -ls hdfs://nameservice1/user/hive/warehouse/tmp.db/tmp_iot
-- 删除文件
hadoop fs -rm -r  hdfs://nameservice1/user/hive/warehouse/tmp.db/tmp_iot

再重新执行 Spark 程序即可

3 补充知识

$$ hadoop fs -rm -r hdfs://nameservice1/user/hive/warehouse/tmp.db/tmp_iot
>>> 22/03/31 17:34:07 INFO fs.TrashPolicyDefault: Moved: 'hdfs://nameservice1/user/hive/warehouse/tmp.db/tmp_iot' to trash at: hdfs://nameservice1/user/hadoop/.Trash/Current/user/hive/warehouse/tmp.db/tmp_iot

从上面执行记录可以看到, 从hdfs上删除的文件,并没有直接被删除,而是移动到了回收站。
如果需要跳过回收站,直接删除,可以使用-skipTrash参数(生产环境中慎用)

-- 跳过回收站  直接进行删除
hadoop fs -rm -r -skipTrash hdfs://nameservice1/user/hive/warehouse/tmp.db/tmp_iot

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐