Spark 集群进行 ETL 的架构介绍

一 什么是ETL

ETL(extract提取、transform转换、load加载)。ETL负责将分散的、异构数据源中的数据如关系数据、平面数据文件等抽取到临时中间层后,进行清洗、转换、集成,最后加载到数据仓库或数据集市中,成为联机分析处理、数据挖掘提供决策支持的数据。

二 使用Spark开发ETL系统的优势

  • 由于海量的日志记录、交易记录,单机进行ETL变得越来越困难。搭建一套具备大规模数据处理能力的ETL系统成为大数据分析系统中不可或缺的环节。由于Spark在大数据处理能力上的高效率、及其简单易用的API、同时对各种数据库的访问都实现了良好的支持,使用Spark来开发搭建ETL成为一个不错的选择。
  • 另外Spark DataFrame提供了详细的数据结构信息(即schema),使得Spark SQL可以清楚地知道该数据集中包含哪些列,每列的名称和类型各是什么。同时SPark DataFrame提供了丰富的操作API且可以直接基于DataFrame进行SQL操作,成为了ETL存储中间数据的首选。
  • 部署简单,只需要使用spark-submit命令提交worker即可。

三 相关架构和功能实现

在此只介绍一些常用且使用spark开发容易实现的功能。

3.1 数据清洗、转换:

  • 数据合并:多表关联合并,字段合并

  • 数据拆分:按一定规则进行数据拆分

  • 数据解析提取:利用Spark的UDF、UDAF、UDTF等特性,自定义数据语义解析函数。

3.2 数据加载

增量ETL:

  1. 使用时间戳作为增量字段,减小每次ETL的数据规模、提高数据ETL的效率。
  2. 使用自增序列值做增量ETL,系统自动记录上次ETL过程的截至序列值作为下一次ETL的增量序列值进行ETL。

全量ETL:

删除目标表数据,将源数据全部插入,同时对原始目标表数据备份。

3.3 异常处理

在ETL的过程中,必不可少的要面临数据异常而导致的ETL过程失败的问题,处理办法:

  1. 对于网络中断等外部原因造成的异常,设定尝试次数,
  2. 日志输出,记录ETL错误过程、执行的错误信息,Web方式查询及邮件通知。

四 相关组件、模块介绍

这里写图片描述

ETL_ON_SPARKEngine作为整个ETL的核心,主要承担一下几方面的职责:
1、负责从Hbase中读取配置库的配置数据,并制定任务调度计划。

2、解析数据获取语句,从数据源读取数据,以Spark DataFrame的形式暂存在Spark集群的内存中。从MySQL、Hive等结构化的数据库中读取数据比较好理解,就是一条Sql语句,最多在使用几个自定义函数。从hbase,MongoDB等半结构化的数据库中获取数据时,由于原始数据的字段具有层次关系、或者以Json等格式存在,需要进行字段的拆分、Json数据展平等过程。

3、对源Spark DataFrame进行字段转换与字段映射,生成一个新的Spark DataFrame。在这一步主要进行字段名称转换、字段类型转换、字段合并重组等操作。

4、将新的Spark DataFrame写入目标数据源中。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大数据AI

你的鼓励将是我创作的最大动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值