-
离线数仓
刚入库的业务数据,大致分为两种,一种是 MySQL 的 binlog,另外一种是业务系统中的业务打点,这个日志打点信息可以通过 Flume 等工具去采集,再离线入库到数仓中。
然后随着业务越来越多,业务中的各个表可以做一些抽象,抽象的好处是更好的管理和更高效的数据复用和计算复用。所以数仓就分成了多层 (明细层、中间层、服务层等等),每一层存的是数据表,数据表之间通过 HiveSQL 的计算来实现 ETL 转换。
流程如下:
Flume 把数据导入 Hive 数仓调度工具,
调度 ETL 作业进行数据处理在 Hive 数仓的表上,
可以进行灵活的 Ad-hoc 查询调度工具,
调度聚合作业输出到BI层的数据库中
问题:
导入过程不够灵活,这应该是一个灵活 SQL 流计算的过程
基于调度作业的级联计算,实时性太差
ETL 不能有流式的增量计算
使用 Flume 来入库,但存在一定的问题,首先,它的容错可能无法保证 Exactly-Once 效果,需要下游再次进行去重操作。其次,自定义逻辑需要通过一些手段,比如脚本来控制。第三,离线数仓并不具备良好的扩展能力,当数据剧增时,增加原本的并发数就比较困难了。 -
实时数仓
基于 Kafka + Flink streaming,定义全流程的流计算作业,有着秒级甚至毫秒的实时性。此时就不存在调度和血缘管理的问题了,通过实时不断的增量更新,最终输出到业务的 DB 中。
问题:
历史数据只有 3-15 天,无法在其上做 Ad-hoc 的查询。
成本相对较高,实时计算的成本要大于离线计算。
如果搭建 Lambda 的离线+实时的架构,维护成本、计算存储成本、一致性保证、重复的开发会带来很大的负担。
-
Hive 实时化
统一元数据。简单来说就是把 Kafka 表的元数据信息存储到 HiveMetaStore 中,做到离线和实时的表 Meta 的统一。
统一数据
-
Hive streaming sink
实时数据导入 Hive 数仓,以前有Flume、Spark Streaming 还是 Flink Datastream
通过实时链路可以加速离线链路的数据准备,批计算可以把调度换成流输入。Flink Hive/File Streaming Sink 即为解决这个问题,实时 Kafka 表可以实时的同步到对于的离线表中: 离线表作为实时的历史数据,填补了实时数仓不存在历史数据的空缺。数据批量准实时摄入为 Ad-hoc 查询离线表提供了准实时输入。
Kafka 中的表和 Hive 中的表能否就共用一张表呢:在数仓中定义一张表,分别对应着 Kafka 和 Hive+HDFS 两种物理存储:
用户在进行 insert 操作时,就自然插入到了 Kafka 的实时 table 当中,同时生成另外一条链路,自动同步到 Hive Table 当中。这样这一张表就非常的完整,不仅满足实时的需求,而且拥有历史的数据。
一个 SQL 读取这样的一个 Hybrid Source ,根据你的查询语句后面的 where 条件,自动路由到 Hive 的历史数据,**或者是 Kafka 的实时数据。**根据一定的规则先读 Hive 历史数据,再读 Kafka 实时数据。
特点:
带来 Flink streaming 的实时/准实时的能力
支持 Filesystem connector 的全部 formats(csv,json,avro,parquet,orc)
支持 Hive table 的所有 formats
继承 Datastream StreamingFileSink 的所有特性:Exactly-once、支持HDFS, S3
-
Hive streaming source
传统的 Hive Table 只支持按照批的方式进行读取计算,但是我们现在可以使用流的方式来监控 Hive 里面的分区 / 文件生成,也就是每一条数据过来,都可以实时的进行消费计算,它也是完全复用 Flink Streaming SQL 的方式,可以和 HBase、MySQL、Hive Table 进行 Join 操作,最后再通过 FileWriter 实时写入到 Hive Table 中。
Hive 数仓中存在大量的 ETL 任务,这些任务往往是通过调度工具来周期性的运行,这样做主要有两个问题:
实时性不强,往往调度最小是小时级。
流程复杂,组件多,容易出现问题。
针对这些离线的 ETL 作业,Flink 1.11 为此开发了实时化的 Hive 流读,支持:
Partition 表,监控 Partition 的生成,增量读取新的 Partition。
非 Partition 表,监控文件夹内新文件的生成,增量读取新的文件。
你甚至可以使用10分钟级别的分区策略,使用 Flink 的 Hive streaming source 和Hive streaming sink 可以大大提高 Hive 数仓的实时性到准实时分钟级,在实时化的同时,也支持针对 Table 全量的 Ad-hoc 查询,提高灵活性。 -
待实现例子
https://blog.csdn.net/weixin_44904816/article/details/106416913
https://www.cnblogs.com/qiu-hua/p/14181624.html
【flink】flink1.1:流批一体hive数仓
最新推荐文章于 2024-02-27 17:34:07 发布