实时 Hive 数据转换?

Hive data transformations in real time?

我有以下数据管道:

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

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

引入 HDFS 显然不是实时的。 MemSQL 或 Druid/Imply 从 Kafka

提供更多的实时摄取

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

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

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

  • 完全不推荐将 Hive 与 Spark Streaming 一起使用。由于 Spark 流的目的是具有低延迟。 Hive 引入了可能的最高延迟 (OLAP),因为它在后端执行 MR/Tez 作业(取决于 hive.execution.engine)。

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

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