通过在配置单元中启用事务,我们可以更新记录。假设我的配置单元表使用avro格式。
https://hortonworks.com/hadoop-tutorial/using-hive-acid-transactions-insert-update-delete-data/
hive如何更新avro文件并在不同的服务器上再次复制它们(因为复制因子是3)。
我找不到一篇好文章来解释这一点,以及在Hive中使用酸的后果。由于hdfs被推荐用于不更新或只追加文件,所以在两者之间更新记录是如何工作的。
请告知。
1条答案
按热度按时间q3aa05251#
表的数据存储在一组基本文件中。新记录、更新和删除存储在增量文件中。为改变表的每个事务(或者在流代理(如flume或storm)的情况下,为每批事务)创建一组新的增量文件。在读取时,读取器合并基本文件和增量文件,在读取时应用任何更新和删除。
随后,主压缩以周期性的时间间隔将较大的增量文件和/或基文件合并到另一个基文件中,这将加快进一步的表扫描操作。
插入/更新/删除的数据会定期压缩以节省空间并优化数据访问。
acid事务功能目前有以下限制:
它只适用于orc文件。开源中有一个jira来添加对parquet表的支持。
它只适用于未排序的带扣表。
事务不支持插入覆盖。
它不支持begin、commit或rollback事务。
不建议用于oltp。
acid不支持avro文件,hdfs块替换策略对acid表也是一样的。
下面的链接有助于理解配置单元中的acid表。
http://docs.qubole.com/en/latest/user-guide/hive/use-hive-acid.html
https://cwiki.apache.org/confluence/display/hive/hive+transactions