搜索 | 会员  
使用Spark集群进行ETL的架构介绍
来源: CSDN博客   作者:Forever-守望  日期:2017/4/12  类别:大数据  主题:Spark  编辑:混世大魔王
ETL(extract提取、transform转换、load加载)。ETL负责将分散的、异构数据源中的数据如关系数据、平面数据文件等抽取到临时中间层后,进行清洗、转换、集成,最后加载到数据仓库或数据集市中,

什么是ETL:

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

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

1、由于海量的日志记录、交易记录,单机进行ETL变得越来越困难。搭建一套具备大规模数据处理能力的ETL系统成为大数据分析系统中不可或缺的环节。由于Spark在大数据处理能力上的高效率、及其简单易用的API、同时对各种数据库的访问都实现了良好的支持,使用Spark来开发搭建ETL成为一个不错的选择。

2、另外Spark DataFrame提供了详细的数据结构信息(即schema),使得Spark SQL可以清楚地知道该数据集中包含哪些列,每列的名称和类型各是什么。同时SPark DataFrame提供了丰富的操作API且可以直接基于DataFrame进行SQL操作,成为了ETL存储中间数据的首选。

blob.png

3、部署简单,只需要使用spark-submit命令提交worker即可。

相关架构和功能实现:

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


数据清洗、转换

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

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

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

数据加载

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

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

异常处理

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

1、对于网络中断等外部原因造成的异常,设定尝试次数,

2、日志输出,记录ETL错误过程、执行的错误信息,Web方式查询及邮件通知。

相关组件、模块介绍:

blob.png


ETL_ON_SPARKEngine作为整个ETL的核心,主要承担一下几方面的职责:

1、负责从Hbase中读取配置库的配置数据,并制定任务调度计划。

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

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

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


德仔网尊重行业规范,每篇文章都注明有明确的作者和来源;德仔网的原创文章,请转载时务必注明文章作者和来源:德仔网;
头条那些事
大家在关注
广告那些事
我们的推荐
也许感兴趣的
干货