更新hive事务表中的数据如何导致HDFS中文件的创建/更新

时间:2017-05-23 14:48:43

标签: hive avro

通过在Hive中启用事务,我们可以更新记录。假设我正在为我的hive表使用AVRO格式。

https://hortonworks.com/hadoop-tutorial/using-hive-acid-transactions-insert-update-delete-data/

hive如何处理更新AVRO文件并在不同服务器上再次复制它们(coz复制因子为3)。

我找不到一篇解释这个问题的好文章,以及在Hive中使用ACID的结果。由于建议将HDFS用于非更新或仅附加文件,因此如何在两者之间更新记录。

请告知。

1 个答案:

答案 0 :(得分:3)

表的数据存储在一组基本文件中。新记录,更新和删除存储在增量文件中。为每个事务(或者在诸如Flume或Storm的流代理,每批事务的流量代理的情况下)创建一组新的增量文件来改变表。在读取时,读取器合并基本文件和增量文件,在读取时应用任何更新和删除。

随后,主要压缩将周期性的时间间隔将较大的增量文件和/或基本文件合并到另一个基本文件中,这将加速进一步的表扫描操作。

定期压缩插入/更新/删除的数据,以节省空间并优化数据访问。

ACID交易功能目前存在以下限制:

  1. 仅适用于 ORC文件。开源中有一个JIRA可以添加对Parquet表的支持。
  2. 仅适用于未排序的分段表格。
  3. 交易不支持INSERT OVERWRITE。
  4. 它不支持BEGIN,COMMIT或ROLLBACK事务。
  5. 建议不要使用OLTP。
  6. ACID不支持AVRO文件,并且AFSD表的HDFS块替换策略也相同。

    下面的链接可以更有助于理解Hive中的ACID表。

    http://docs.qubole.com/en/latest/user-guide/hive/use-hive-acid.html

    https://cwiki.apache.org/confluence/display/Hive/Hive+Transactions