hive - 实时 Hive 数据转换?
问题描述
我有以下数据管道:
- 一个进程向 Kafka 写入消息
- Spark 结构化流应用程序正在侦听新的 Kafka 消息并将它们按原样写入 HDFS
- 批处理 Hive 作业每小时运行一次,并从 HDFS 读取新摄取的消息,并通过一些中等复杂的 INSERT INTO 语句填充一些表(我没有可用的物化视图)。编辑:基本上在我的 Hive 工作之后,我将结果Table1存储为原始数据,然后是另一个表Table2 = fun1(Table1),然后是Table3 = fun2(Table2),然后是Table4 = join(Table2, Table3)等等。Fun是一个选择或聚合。
- Tableau 仪表板将我编写的数据可视化。
如您所见,第 3 步使我的管道不是实时的。为了使我的管道完全实时,您有什么建议?编辑:我想要 Table1,... TableN 实时更新!
解决方案
- 完全不建议将 Hive 与 Spark Streaming 一起使用。由于 Spark 流式传输的目的是具有低延迟。Hive 引入了可能的最高延迟 (OLAP),因为它在后端执行 MR/Tez 作业(取决于 hive.execution.engine)。
建议:将火花流与 HBASE、Phoenix 等低延迟数据库一起使用。
解决方案: 开发一个以 Kafka 为源的 Spark 流式作业,并使用自定义接收器将数据写入 Hbase/Phoenix。
推荐阅读
- android - 多次设置实时数据值仅在最后一次触发观察者
- css - 带有 WebSecurity 的 Spring Boot 应用程序看不到 css
- mysql - 如何创建一个新列来保存具有相同值的所有行的所有主键值?
- python - 测试数据集的标准化
- java - Play 2.6 with Java - 添加环境依赖注入
- html - 为什么下拉列表位于粘性元素下方?
- swift - 点击 NavigationLink 后隐藏导航栏但保留后退按钮
- r - 可变长度不同
- scala - 如何从一个序列中创建两个序列,将一个自定义对象与该序列中的另一个进行比较?
- docker - 如何通过 docker 让 bash shell 访问 vernemq 映像?