spark 动态预加载数据_spark便捷开发总体流程介绍

在公司做大数据开发已经四五年了,因此也积累了一些心得体会,便趁着这次机会大体描述下。

spark 动态预加载数据_spark便捷开发总体流程介绍_第1张图片

首先:数据开发的前提肯定是需要数据的,而数据从哪里来,大部分的数据都存储在Oracle中,而spark的计算 数据来源基本上都是hdfs。虽然oracle也可以与spark进行直接交互,但是如果oracle的表的数据量高达千万、亿 级别,每次的spark的查询都会对oracle数据库产生极大的影响,因此不建议直接让spark读取oracle的表。

因此,我这边是通过Apache Nifi 作为ETL工具,将oracle中的数据 以分钟级别的运行频率将数据同步到hdfs中,为何要这么频繁的分钟级别,而不是天级别,因为这样保证了以极低的价格实现了小时级别的数据任务的可能,而且分钟级别的量的查询对oracle数据库的压力也是可以略微不计。

给大家上一张 Nifi同步数据的总体图

spark 动态预加载数据_spark便捷开发总体流程介绍_第2张图片

大致的逻辑是:

一:生成每一张表的开始时间和结束时间
二:实现时间的自增,保证查询的sql的不重复。
三:生成sql后通过ExecuteSQL 生成结果
四:将步骤三生成的结果进行数据分区
五:将已经分区后的文件写入hdfs中,格式为parquet。

这样数据落盘到hdfs这一步算是完成了。

之前就是spark的运行计算了,正常的流程是编译自己的代码,生成jar包,然后在yarn集群上运行。

但是每次业务修改逻辑后,开发同学需要每次重新编译自己的代码,因为逻辑调整了。

那有没有办法不需要重新编译代码生成jar包呢。

我在阅读spark2的源码的时候意外的发现了spark中如何实现动态编码的那部分代码,就是

WholeStageCodegenExec

有兴趣的小伙伴可以自己去看下。

既然spark有办法将一些文本的代码动态加载然后去处理。

那么我们自己的业务代码能否也做到这样呢,说干就干,就自己申请了服务器,开始编写前台、后台代码,用于实现这个 网页式代码修改 方案。

经过好几个月的时间,从构想到雏形,再到成品,中间不停地修修改改,索性是不负所望了。

先给大家看下效果:

spark 动态预加载数据_spark便捷开发总体流程介绍_第3张图片
spark 动态预加载数据_spark便捷开发总体流程介绍_第4张图片

大家可以看到,可以在网站上编写代码,而这个代码 后台会存储在数据库中。

而之前的编译的jar包可以在代码里设置,去读取oracle中的文本代码。

这样就可以实现在不重新编译jar包的形式下修改逻辑。

当然这中间的实现 说起来简单,但是实现是复杂的,后面我会开篇章为大家一一介绍,如何从零开始实现 spark 代码开发 网页化这个流程。

你可能感兴趣的:(spark,动态预加载数据)