在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
开源软件名称:light-spark开源软件地址:https://gitee.com/hellowzk/light-spark开源软件介绍:Light-Spark 开发脚架[toc] 1. 概述本人从 2014 年开始使用 Apache Spark,基于以往项目经验,为了降低项目开发复杂度,减少开发成本,开发了 light-spark 框架。本框架屏蔽了底层技术细节,让开发人员面向 SQL 编程,更专注于业务逻辑,减少开发过程中 Debug 工作,让 Apache Spark 更方便使用。 2. 适用场景项目业务大部分功能可以用 SQL 实现,符合以下情况,建议使用本框架:
3. 设计思想
4. 使用4.1 maven 引用本项目已发布到 maven 中央仓库,暂时支持 Spark 2.2.x、Spark 2.3.x、Spark 2.4.x 针对 Spark 2.2.x<dependency> <groupId>com.github.hellowzk</groupId> <artifactId>light-spark-core_2.2</artifactId> <version>1.0.4-release</version></dependency> 针对 Spark 2.3.x<dependency> <groupId>com.github.hellowzk</groupId> <artifactId>light-spark-core_2.3</artifactId> <version>1.0.4-release</version></dependency> 针对 Spark 2.4.x<dependency> <groupId>com.github.hellowzk</groupId> <artifactId>light-spark-core_2.4</artifactId> <version>1.0.4-release</version></dependency> 4.2 依赖配置参考 pom 文件 4.3 启动脚本样例参考 run 4.4 组件4.4.1 debug 开发工具开发过程中,可以通过配置,自动把指定步骤的结果持久化存储,支持 hdfs csv、hive 表 4.4.2 input - 数据加载
4.4.3 process - 业务计算
4.4.4 output - 结果保存
4.4.5 变量4.4.5.1 定义及使用本框架支持在配置中自定义及使用变量,支持变量嵌套使用
4.4.5.2 日期表达式支持通过日期表达式定义日期,表达式格式为 DATE([yyyy-MM-dd, 20200722, yyyyMMdd][+3d][-1m][+1y]...)
...constansMap: today: "${DATE([yyyy-MM-dd])}" # 当前日期 today2: "${DATE([yyyy-MM, 2020-08-05, yyyy-MM-dd])}" # 2020-08-05 所在月份,2020-08 date1: "${DATE([yyyy-MM-dd, 2020-08-05][-1d])}" # 2020-08-05 减一天,2020-08-04 date2: "${DATE([yyyy-MM-dd, ${date1}][-1d])}" # 2020-08-04 减 1 天,2020-08-03 date3: "${DATE([yyyy-MM-dd, ${date2}][-1d])}" # 2020-08-03 减 1 天,2020-08-02 date4: "${DATE([yyyy-MM, ${date3}, yyyy-MM-dd][-1m])}" # 2020-08-02 减 1 月月份,2020-07 date5: "${DATE([yyyy-MM-dd, ${date4}, yyyy-MM][-1d])}" # 2020-07 月初减 1 天, 2020-06-30... 5. 配置文件
5.1 整体结构
# 流程名称name: "xxx" # 自定义常量,可以在sql/文件路径中使用 ${variable},常量名称不可重复constansMap: hive_out_db: xxx mysql_url: xxx mysql_username: xxx mysql_passwd: xxx# 启用 debug 工具,SQL处理时,如果 store=true , 结果会缓存到 $baseDir/{{EVENT_DATE}}/$tableName 目录,启动脚本必须传入参数 --debug, 否则该配置不生效persistType: hive # hive hdfspersistDir: /tmp/spark/app/full-batchpersistHiveDb: "${outputDB}"# 输入定义,支持 3 种数据源inputs: - ... # 逻辑处理,支持SQL 与 自定义处理, 有 3 种processes: - ...# 结果输出, 支持 3 种outputs: - ...# 环境设置envs: # 暂时只支持 spark 相关参数,如下 spark: - ... 5.2 数据加载支持类型
5.2.1. 加载 classpathFile 数据配置说明
demo...inputs: - name: person type: classpathFile columns: name, gen, age path: person.txt fs: ","... 5.2.2. 加载 customClasspath 数据配置说明自定义加载 classpath 的数据,生成表
demo...inputs: - name: custompersonClass type: customClasspath path: person2.txt clazz: com.hellowzk.light.spark.stages.Process1... 5.2.3. 加载 hdfsfile 数据配置说明
demo...inputs: - name: person_hdfs type: hdfsfile columns: name,gen,age path: /tmp/zhaokui/testdata/test/20200706/ fs: ","... 5.2.4. 加载 customHdfs 数据自定义加载 customHdfs 的数据,生成表
配置说明
demo...inputs: - name: customPersonHdfs type: customHdfs path: /tmp/zhaokui/testdata/test/20200706/ clazz: com.hellowzk.light.spark.stages.Process1... 5.2.5 加载 jdbc 数据自定义加载 customHdfs 的数据,生成表 配置说明
demo...inputs: - name: mysql1 type: jdbc driver: "com.mysql.jdbc.Driver" url: "${jdbcurl}" # 在 constansMap 中定义的该值 user: root password: 123456 dbtable: b_osp_app_event_detail: b_osp_app_event_detail b_osp_app_area_analyze_total: b_osp_app_area_analyze_total... 5.2.6 加载 clickhouse 数据使用 BalancedClickhouseDataSource 加载 clickhouse 数据,生成 spark 表,如果 clickhouse 为单机版或集群做了 SLB,请使用使用 jdbc 方式 配置说明
demo...inputs: - name: clickhouse1 type: clickhouseBalance url: "${jdbcurl}" # 在 constansMap 中定义的该值 user: root password: 123456 dbtable: preson_all: all_data... 5.2.7 加载 hive 数据配置说明
demo...inputs: - name: hive1 type: hive database: "${inputDB}" dbtable: dm_road_trackset_di: dm_road_trackset_di dm_trackset_di: dm_trackset_di... 5.3 数据处理支持类型
5.3.1 使用 SQL 处理配置说明
demo...processes: - name: table1 sql: "select name,gen,age, '${DATE([yyyy-MM-dd, 2020-08-05][-3d])}' from person" cache: true # 出发action操作,缓存执行SQL后的表 store: true # 是否保存到本地,debug用,保存目录 $baseDir/{{EVENT_DATE}}/table show: 20 # 在控制台打印表中数据,不打印则删除该节点,df.show(20) partations: 3 # reparation 个数,不reparation则删除节点 # 多维度数据处理 - name: table1_1 dimKey: "gen, age" # 两个维度 allPlaceholder: "ALL" sql: |- # |- :yaml 语法,支持字符串换行,适合格式化写 SQL select name, ${DIM_FIELDS}, count(1) as count from person group by name ${DIM_GROUP} cache: true # 出发action操作,缓存执行SQL后的表 store: true # 是否保存到本地,debug用,保存目录 $baseDir/{{EVENT_DATE}}/table show: 20 # 在控制台打印表中数据,不打印则删除该节点,df.show(20) partations: 3 # reparation 个数,多维度数据处理,建议使用该功能,否则 task 数量会根据维度个数爆炸膨胀,严重降低后续计算过程... 5.3.2 自定义编码处理自定义处理类,必须继承 com.hellowzk.light.spark.stages.custom.CustomBaseTransform 类,实现 doProcess 方法,如 Process2 配置说明
demo...processes: - name: customProcessShow clazz: "com.hellowzk.light.spark.stages.Process2" cache: true store: true show: 20 partations: 1... 5.4 结果输出支持类型
5.4.1 输出到 jdbc通过此配置把数据保存到支持 jdbc 的持久化工具 配置说明
demo...outputs: - name: mysql1 type: jdbc driver: "com.mysql.jdbc.Driver" url: "${jdbcurl}" user: root password: 123456 opts: isolationLevel: NONE # 关闭事务 numPartitions: 1 # 设置并发 batchsize: 50000 preSQL: - delete from b_osp_app_event_detail - delete from b_osp_app_area_analyze_total tables: table3: b_osp_app_event_detail b_osp_app_area_analyze_total: b_osp_app_area_analyze_total... 5.4.2 输出到 clickhouse 表如果 clickhouse 为单机版或集群做了 SLB,请使用使用 jdbc 配置说明
demo...outputs: - name: clickhouse1 type: clickhouseBalance url: "${jdbcurl}" user: root password: 123456 opts: isolationLevel: NONE # 关闭事务 numPartitions: 1 # 设置并发 batchsize: 50000 # clickhouse 分布式表的操作语句 preSQL: - alter table b_osp_app_event_detail on cluster test_cluster delete where dt = '${event_date}' tables: table3: b_osp_app_event_detail... 5.4.3 输出到 HIVE配置说明
demo...outputs: - name: mysql1 type: hive database: test tables: table3: b_osp_app_event_detail b_osp_app_area_analyze_total: b_osp_app_area_analyze_total... 5.4.4 输出到 HDFS配置说明
demo...outputs: - name: out1 type: hdfsfile srcName: table1 format: csv # 保存为 csv path: /user/osp/data/out1/${EVENT_DATE} - name: out2 type: hdfsfile srcName: table2 format: txt # 保存为 txt,字段用逗号分隔 fs: "," path: /user/osp/data/out2/${EVENT_DATE} - name: out3 type: hdfsfile srcName: table3 format: lzo # 保存为 lzo,字段用逗号分隔 fs: "," path: /user/osp/data/out3/${EVENT_DATE} - name: out4 type: hdfsfile srcName: table4
|
请发表评论