【问题标题】:possible to do upsert in hive acid enabled orc table可以在启用蜂巢酸的兽人表中进行 upsert
【发布时间】:2018-04-05 13:59:50
【问题描述】:

在 hive 上启用酸支持后。我可以从 hive 表(基于 ORC 文件的表)中插入/更新/删除行,想知道是否可以进行 upsert?因为当用户提供数据时,他们没有指定它是插入还是更新,如果我们需要在插入之前删除每一行以模拟 upsert,它可能会很慢但还不确定性能,我们的更新/插入率低,低于 5%。对我们来说,延迟并不重要,但吞吐量肯定很重要。如果 hive 目前不支持 upsert,有没有计划支持它?谢谢

【问题讨论】:

    标签: hive


    【解决方案1】:

    工作正在进行中:https://issues.apache.org/jira/browse/HIVE-10924 在 ACID 模式下,吞吐量可能会受到限制。

    目前您可以使用完全连接模拟非 ACID 模式的 upsert 并进行完全分区/表重写。延迟相当大,吞吐量几乎是无限的。见这里:https://stackoverflow.com/a/37744071/2700344

    【讨论】:

    • 也许可以更深入地了解为什么在 ACID 模式下吞吐量会受到限制?我的理解是它是 mirco 批量到 delta 文件并定期进行压缩。我看到文档甚至提到了 kafka/flume 流,你能澄清一下吞吐量吗?谢谢
    • 当然需要更仔细地测试这个功能。在读取时,读取器会合并基本文件和增量文件,并在读取时应用任何更新。所以每个读者都会产生额外的负担。阅读器越多,负载就越多,从而降低性能。这在非 ACID 模式下不会发生。影响取决于更新的数量。 Hive ACID 应该用于低并发 50 或更少并发用户。见这里:hortonworks.com/blog/apache-hive-acid-transactions-hdp-2-2 他们说 ACID 是为高吞吐量而设计的,但您的读者可能会消耗所有可用资源。
    【解决方案2】:

    一种方法是使用 Hive JDBC 连接在 Hive 表中执行删除插入或合并。然后在 Hive ORC table 上执行 full compaction 即可。在 Compaction 结束后,数据可以通过 Spark 获得。

    【讨论】:

      猜你喜欢
      • 2020-09-23
      • 2016-02-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-10
      • 1970-01-01
      • 1970-01-01
      • 2021-10-23
      相关资源
      最近更新 更多