Spark 离线开发框架设计与实现
一、背景
随着 Spark 及其社区的持续演进,技术架构和性能优势日益凸显,目前已成为大数据处理的主流选择。Spark 支持 Scala、Java、SQL、Python 等多种语言开发。
Spark SQL 兼容 Hive,易于整合,上手快,适合简单数据处理。但在面对复杂逻辑或深度分析时,纯 SQL 方案往往显得力不从心,维护成本也较高,此时使用高级语言编写代码会更高效。
在日常数据仓库开发中,除了常规任务,还涉及大量数据回溯工作。对于创新型业务,口径变化频繁,数据回溯几个月甚至一年很常见。传统方式效率低,且需人力密切关注各任务状态。
针对上述痛点,我们设计了一套 Spark 离线开发框架。该框架不仅让开发变得简单高效,还能在无需额外开发的情况下,快速完成大规模数据回溯。
(注:此处展示框架解决的问题及解决方案对比)
二、框架设计
框架旨在封装重复性工作,降低开发门槛。整体架构分为基础框架、可扩展工具及应用程序三部分,开发者只需关注应用程序层即可快速实现代码。
(注:此处展示框架架构图)
2.1 基础框架
基础框架实现了代码与配置的分离机制。资源配置统一以 XML 文件形式保存,由框架解析处理。框架会根据配置自动创建 SparkSession、SparkContext 和 SparkConf,加载常用环境变量,并提供通用 UDF 函数(如 URL 参数解析等)。
所有应用继承自 Application 父类,开发者只需关注核心业务逻辑部分。
(注:此处展示 Application 处理流程图)
目前,离线框架支持的常用环境变量如下表所示。
(注:此处展示环境变量列表)
2.2 可扩展工具
可扩展工具包含大量服务于应用程序及基础框架的工具类,例如配置文件解析类、数据库读写工具类、日期工具类等。这些通用模块统称为可扩展工具,不再赘述。
2.3 应用程序
2.3.1 SQL 应用
对于 SQL 应用,只需编写 SQL 代码及资源配置。应用类为唯一类(已实现),供所有 SQL 应用复用,开发者无需关心具体实现。
配置示例如下,class 为固定类名,开发者主要关注 path 中的 SQL 路径及 conf 中的资源大小。
<?xml version="1.0" encoding="UTF-8"?>
<project name="test">
<class>com.way.app.instance.SqlExecutor</class>
<path>sql 文件路径</path>
<!-- sparksession conf -->
<conf>
<spark.executor.memory>1G</spark.executor.memory>
<>2
1G
20


