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

我有以下数据管道:

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

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

【问题讨论】:

    标签: hive apache-kafka hdfs dashboard spark-structured-streaming


    【解决方案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
    猜你喜欢
    • 2020-07-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-06
    • 2021-11-15
    • 1970-01-01
    相关资源
    最近更新 更多