【flink】flink1.1:流批一体hive数仓

  1. 离线数仓

    刚入库的业务数据,大致分为两种,一种是 MySQL 的 binlog,另外一种是业务系统中的业务打点,这个日志打点信息可以通过 Flume 等工具去采集,再离线入库到数仓中。
    然后随着业务越来越多,业务中的各个表可以做一些抽象,抽象的好处是更好的管理和更高效的数据复用和计算复用。所以数仓就分成了多层 (明细层、中间层、服务层等等),每一层存的是数据表,数据表之间通过 HiveSQL 的计算来实现 ETL 转换。
    流程如下:
    Flume 把数据导入 Hive 数仓调度工具,
    调度 ETL 作业进行数据处理在 Hive 数仓的表上,
    可以进行灵活的 Ad-hoc 查询调度工具,
    调度聚合作业输出到BI层的数据库中
    问题
    导入过程不够灵活,这应该是一个灵活 SQL 流计算的过程
    基于调度作业的级联计算,实时性太差
    ETL 不能有流式的增量计算
    使用 Flume 来入库,但存在一定的问题,首先,它的容错可能无法保证 Exactly-Once 效果,需要下游再次进行去重操作。其次,自定义逻辑需要通过一些手段,比如脚本来控制。第三,离线数仓并不具备良好的扩展能力,当数据剧增时,增加原本的并发数就比较困难了。

  2. 实时数仓
    基于 Kafka + Flink streaming,定义全流程的流计算作业,有着秒级甚至毫秒的实时性。此时就不存在调度和血缘管理的问题了,通过实时不断的增量更新,最终输出到业务的 DB 中。
    问题
    历史数据只有 3-15 天,无法在其上做 Ad-hoc 的查询。
    成本相对较高,实时计算的成本要大于离线计算。
    如果搭建 Lambda 的离线+实时的架构,维护成本、计算存储成本、一致性保证、重复的开发会带来很大的负担。

  3. Hive 实时化
    统一元数据。简单来说就是把 Kafka 表的元数据信息存储到 HiveMetaStore 中,做到离线和实时的表 Meta 的统一。
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2zfhiG3w-1642833494399)(en-resource://database/942:1)]
    统一数据
    在这里插入图片描述

  4. 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
    在这里插入图片描述

  5. 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 查询,提高灵活性。

  6. 待实现例子
    https://blog.csdn.net/weixin_44904816/article/details/106416913
    https://www.cnblogs.com/qiu-hua/p/14181624.html

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值