问题
Apachespark重运行时取消当前运行作业时发生下列错误:
错误: achespark.sql.解析例外:无法创建受控表The associated location ('dbfs:/user/hive/warehouse/testdb.db/metastore_cache_ testtable) already exists.;
因果
问题出自Spark2.4版本默认行为变化
问题发生时 :
- 集群终止时写操作正在进行
- 临时网络问题出现
- 作业中断
元存储器数据失密后,很难恢复,除非人工投放文件到该位置基本问题在于元数据目录调用starteddatabricks试图覆盖时不自动删除
可依次复制问题 :
- 创建数据Frame
valdf=spark.range(1000) - 写DataFrame重写模式
df.write.mode(SaveMode.Overwrite).saveAsTable("testdb.testtable") - 执行时取消命令
- 重运行写入命令
求解
设置标志spark.sql.legacy.allowCreatingManagedTableUsingNonemptyLocation至真实性.本标志删除started目录并返回进程原状举例说,你可以设置笔记本中:
%python spark.conf.set("spark.sql.legacy.allowCreatingManagedTableUsingNonemptyLocation","true")
或你可以设置集群级spark配置高山市AWS系统|休眠|GCP:
spark.sql.legacy.allowCreatingManagedTableUsingNonemptyLocation true
另一种选择是人工清理报错中指定的数据目录你可以用它做丁基尔s.fs.rm.
scaladbutils.fs.rm真实性