实时 Hive 数据转换?

Posted

技术标签:

【中文标题】实时 Hive 数据转换?【英文标题】:Hive data transformations in real time? 【发布时间】:2020-02-13 14:53:22 【问题描述】:

我有以下数据管道:

    一个进程向 Kafka 写入消息 Spark 结构化流应用程序正在侦听新的 Kafka 消息并将它们原样写入 HDFS 批处理 Hive 作业每小时运行一次,并从 HDFS 读取新摄取的消息,并通过一些中等复杂的 INSERT INTO 语句填充一些表(我没有可用的物化视图)。 编辑:基本上在我的 Hive 工作之后,我有 Table1 存储原始数据,然后是另一个表 Table2 = fun1(Table1),然后 Table1 em>Table3 = fun2(Table2),然后 Table4 = join(Table2, Table3) 等等。Fun 是选择或聚合。 Tableau 仪表板将我编写的数据可视化。

如您所见,第 3 步使我的管道不是实时的。 为了使我的管道完全实时,您有什么建议? 编辑:我想要 Table1,... TableN 实时更新!

【问题讨论】:

【参考方案1】: 完全不建议将 Hive 与 Spark Streaming 结合使用。由于 Spark 流式传输的目的是具有低延迟。 Hive 引入了可能的最高延迟 (OLAP),因为它在后端执行 MR/Tez 作业(取决于 hive.execution.engine)。

建议:将火花流与 HBASE、Phoenix 等低延迟数据库一起使用。

解决方案:开发一个以 Kafka 为源的 Spark 流式作业,并使用自定义接收器将数据写入 Hbase/Phoenix。

【讨论】:

谢谢。但是,我应该在哪里进行数据转换(table1,... tableN)?直接在 Spark 中并将每个结果写入不同的表?我认为有一种物化视图会实时更新自己……但也许我完全错了。 为什么选择 Spark Streaming?这对于结构化流媒体已弃用。 Kafka Connect 也存在 数据转换应该在 Spark 中使用 SQL/功能转换来完成。由于惰性、内存计算和优化的查询计划,它非常快。 Spark - DStreams 已被弃用。 Spark Streaming/Structured streaming 是一样的。【参考方案2】:

引入 HDFS 显然不是实时的。 MemSQL 或 Druid/Imply 提供更多来自 Kafka 的实时摄取

您需要历史数据来执行汇总和聚合。 Tableau 可以缓存数据集,但它本身不会持久存储。因此,您需要一些存储空间,并且您选择使用 HDFS 而不是数据库。

注意:Hive / Presto 可以直接从 Kafka 读取。因此,您甚至不需要 Spark。

如果您想从 Kafka 进行滚动聚合并使其可查询,则可以使用 KSQL,或者您可以编写自己的 Kafka Streams 解决方案

【讨论】:

你真的会使用 Kafka 来存储你的数据历史吗? :S

以上是关于实时 Hive 数据转换?的主要内容,如果未能解决你的问题,请参考以下文章

Hive 数据类型转换

Hive 学习总结

hive数据类型转换字符串函数条件判断

大数据之-HIVE入门(十六)

使用 Spark Scala 将 Sql Server 数据类型转换为 Hive 数据类型

Hive学习 第一课