【问题标题】:Hive and schema evolutionHive 和模式演变
【发布时间】:2017-09-27 00:37:11
【问题描述】:

我们有一个要求,我们要在其中创建用户个人资料数据。该配置文件数据/模式将随着时间的推移不断演变,越来越多的属性将添加到配置文件中。一些数据可以被删除、更新和扩展。

我想知道 Hive+Avro 是否适合此类用例(我认为 hive 不是无模式且不支持模式演变 - 更适合不可变数据)。 HBase/Cassandra 会是一个不错的选择吗?

【问题讨论】:

    标签: cassandra hive hbase


    【解决方案1】:

    使用 Hive/Avro 进行架构演化是很有可能的 - 可以在 here 找到一个很好的解释,但是目前它似乎不支持 Avro 数据集上的 ACID 插入/更新/删除(虽然支持 ORC 文件格式) HBase/Cassandra 可用于此用例。这些技术之间的主要区别在于您如何处理不断变化的数据(读/写性能、底层存储、CAP 属性、用于数据查询摘要的底层框架(map-reduce 或本机)等)以及每种技术提供的其他特定功能这些技术。您可以查看这三个here的并排比较

    【讨论】:

    • 感谢您的链接。我对现有记录的更新和删除有疑问。例如,在上面的链接中,让我们说“natalia”我想将国家更改为“意大利”并想删除“tofi”的记录,我可以通过 Hive 做到这一点吗?这会在 Avro 文件中发生变化吗?由于 Avro 文件是不可变的(就像在 HDFS 中一样),它是否会创建一个新的 Avro 文件?我了解这个(删除/更新)在 HBase 中是如何工作的(它通过维护不同的 HFile(不可变)自动处理这个问题,然后进行次要/主要压缩以仅保留最新版本的数据)
    • 如果我没听错 - 我认为 Hive 尚不支持 Avro 格式的事务性插入/更新/删除,似乎目前仅支持 ORC 文件格式。所以这将在您的用例中排除 Avro。
    • 那么 ORC 文件格式是否支持模式演变,即为新记录或现有记录动态添加新列?我需要所有这些支持新记录或现有记录的插入/更新/删除/扩展模式。你认为 HBase/Cassandra 会是更好的选择吗?
    • 我没有研究过以 ORC 格式发展模式,但快速浏览一下 JIRA (issues.apache.org/jira/browse/ORC-54) 表明他们最近添加了这种支持,但可能没有你想要的那么广泛。在 Hbase/Cassadra 的情况下,可以将数据可视化为 map 的排序映射,其中内部键是列名,因此您可以在新数据中添加或删除列。但是为什么要更改旧数据的架构。通常,数据和架构是齐头并进的,一旦插入一条数据,您就不需要更改架构。
    • 正如我所说,我正在构建一个配置文件存储,新属性将不断添加到配置文件中(属性值可以是嵌套结构)。对于某些具有唯一 ID 的现有记录,我可能会更新其中一个属性的值和/或添加新列。
    猜你喜欢
    • 2013-02-27
    • 2018-01-26
    • 1970-01-01
    • 1970-01-01
    • 2017-12-31
    • 1970-01-01
    • 2021-07-18
    • 2019-09-24
    • 2016-10-05
    相关资源
    最近更新 更多