设计一条完整离线etl线路

ETL:抽取(extract)、转换(transform)、加载(load)

下面是etl 数据流:

    蓝色的框框代表的是数据来源,红色的框框主要是数据计算平台,绿色的 HDFS 是我们一种主要的数据存储,Hive、Hbase、ES这些就不再列出来了。

设计一条完整离线etl线路_第1张图片

我们常说的数据流主要分两种:1离线数据 2.实时数据

         其中离线数据一般都是 T+1 的模式,即每天的凌晨开始处理前一天的数据,有时候可能也是小时级的,技术方案的话可以用 Sqoop、Flume、MR 这些。实时数据一般就是指实时接入的数据,一般是分钟级别以下的数据,常用的技术方案有 Spark Streaming 和 Flink。

场景举例:

场景一:

  1. 数据源主要为 Mysql,希望实时同步 Mysql 数据到大数据集群中(肯定是越快越好)。
  2. 目前每日 20 亿数据,可遇见的一段时间后的规模是 100 亿每日以上。
  3. 能快速地查到最新的数据,这里包含两部分含义:从 Mysql 到大数据集群的速度快、从大数据集群中查询的速度要快。

设计一条完整离线etl线路_第2张图片

我们最终选定一下方案:

设计一条完整离线etl线路_第3张图片

注意:

  1. 小文件,分钟级别的文件落地,肯定会有小文件的问题,这里要考虑的是,小文件的处理尽量不要和数据接入流程耦合太重,可以考虑每天、每周、甚至每月合并一次小文件。
  2. 数据流的逻辑复杂度问题,比如从 Kafka 落地 HDFS 会有一个取舍的考虑,比如说,我可以在一个 SS 程序中就分别落地 HDFS 和 ES,但是这样的话两条流就会有大的耦合,如果 ES 集群卡住,HDFS 的落地也会受到影响。但是如果两个隔开的话,就会重复消费同一份数据两次,会有一定网络和计算资源的浪费。

你可能感兴趣的:(v,etl,大数据)