当sparkSql作业在同一张表上写入新分区时,是否可以删除Hive分区?

时间:2019-10-30 09:15:21

标签: scala hadoop hive

我有一个外部分区(按:source,execution_id,entity_name)Hive表,名称为business_views。

我想知道同时启动这两个动作是否有问题:

  • ALTER TABLE business_views DROP IF EXISTS PARTITION (entity_name = 'XXXX')

  • 运行在分区表business_views内编写的spark scala程序:
    DbUtils.scala:

    spark.catalog.refreshTable(s"$DATABASE_NAME.$tableName")
    df
    .select(XXXXXXXXXXXXXXXXXXXXXXXXXXX)
    .repartition($"source", $"execution_id", $"entity_name")
    .write
    .format("parquet")
    .insertInto(business_views)
    

实际上,我们需要在编写Spark作业时在表中清理一些表分区。

当我在spark sql作业期间启动回滚(分区清理)时,出现以下错误:

  

org.apache.spark.SparkException:作业中止。在   com.socgen.drhg.dhr.utils.DbUtils $ .writeToTableBv(DbUtils.scala:92)

  

由以下原因引起:org.apache.hadoop.security.AccessControlException:   权限被拒绝:用户= XXXXXX,访问权限=执行,   inode =“ / XXXXXX / XXXXXX / XXXXXX / XXXXXX / business-views / source = XXXXXX / execution_id = XXXXXX / entity_name = XXXXXX”:hdfs:hdfs:drwx ----

但是放置分区可以正常工作(回滚)。

我不确定这两个动作之间是否存在真正的联系。

我们的配置单元配置:

ACID未激活 hive.support.concurrency = false

我认为,如果没有启用并发,则表上没有锁,因此唯一的问题应该是数据上的不一致问题,但没有真正的错误。

所以我的问题是:如果在sparkSql作业创建/丰富新分区的同时删除分区,会不会有问题?

0 个答案:

没有答案