【问题标题】:What happens when a hive insert is failed halfway?当蜂巢插入中途失败时会发生什么?
【发布时间】:2020-11-30 23:45:16
【问题描述】:

假设一次插入预计会在 hive 中加载 100 条记录,并且已插入 40 条记录,但由于某种原因插入失败。事务会完全回滚,撤消插入的 40 条记录吗? 或者即使插入查询失败,我们是否会在 hive 表中看到 40 条记录?

【问题讨论】:

  • 请提供有关您如何加载数据的更多详细信息。是否处于 ACID 模式?是 100 个插入语句还是 select 中的单个插入?
  • 没有。表不是事务/ACID 表。它是一个单独的 Insert-Select 语句。

标签: hive hiveql atomic acid


【解决方案1】:

操作是原子的(即使对于非 ACID 表):如果您使用 HiveQL 插入或重写数据,它会将数据写入临时位置,并且仅当命令成功时才会将文件移动到表位置(旧文件在INSERT OVERWRITE 的情况)。如果 SQL 语句失败,数据将保持语句执行前的状态。

关于 S3 直接写入的注意事项:应禁用直接写入 S3 功能,以允许 Hive 写入临时位置并仅在操作成功时重写目标文件夹:

-- Disable AWS S3 direct writes:
set hive.allow.move.on.s3=true; 

另请阅读此文档以了解有关并发模式下支持哪些 ACID 功能和限制的更多详细信息:What is ACID and why should you use it?

在 Hive 0.13 之前,在分区级别提供原子性、一致性和持久性。可以通过打开一种可用的锁定机制(ZooKeeper 或内存中)来提供隔离。通过在 Hive 0.13 中添加事务,现在可以在行级别提供完整的 ACID 语义,以便一个应用程序可以添加行,而另一个应用程序可以从同一分区读取而不会相互干扰。

另请阅读有关Hive locks with ACID enabled (transactional and non-transactional tables)的文章

更新:Since DEC 2020 Amazon S3 is strongly consistent at no extra charge. 因此,删除了有关 S3 最终一致性的部分。

【讨论】:

  • 赞@leftjoin,+1
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-07-21
  • 1970-01-01
  • 1970-01-01
  • 2012-08-03
  • 1970-01-01
  • 1970-01-01
  • 2011-03-13
相关资源
最近更新 更多