覆盖式创建表中断时失效

学习故障解答失败时发生 通过取消当前运行作业重开Apachespark写操作

写由亚当巴夫拉卡

2022年5月10日

问题

Apachespark重运行时取消当前运行作业时发生下列错误:

错误: achespark.sql.解析例外:无法创建受控表The associated location ('dbfs:/user/hive/warehouse/testdb.db/metastore_cache_ testtable) already exists.;

因果

问题出自Spark2.4版本默认行为变化

问题发生时 :

  • 集群终止时写操作正在进行
  • 临时网络问题出现
  • 作业中断

元存储器数据失密后,很难恢复,除非人工投放文件到该位置基本问题在于元数据目录调用starteddatabricks试图覆盖时不自动删除

可依次复制问题 :

  1. 创建数据Frame
    valdf=spark.range(1000)
  2. 写DataFrame重写模式
    df.write.mode(SaveMode.Overwrite).saveAsTable("testdb.testtable")
  3. 执行时取消命令
  4. 重运行写入命令

求解

设置标志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
          
           真实性
          


文章有帮助吗