分享

使用Spark实现ETL系统

本帖最后由 Oner 于 2017-6-29 16:50 编辑
问题导读:
1.  什么是ETL?
2.  使用Spark开发ETL系统有哪些优势?
3.  如何使用Spark实现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存储中间数据的首选。
20170113135610094.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方式查询及邮件通知。
相关组件、模块介绍:
20170113140914829.png


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写入目标数据源中。

来源:http://blog.csdn.net/zbc1090549839/article/details/54407876
作者:大愚若智_

本帖被以下淘专辑推荐:

已有(3)人评论

跳转到指定楼层
yuntian0215 发表于 2017-7-13 15:39:18
可以详细的说明
回复

使用道具 举报

a530491093 发表于 2017-9-8 10:20:58
个的德国的
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条