百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

Spark快速开发框架(spark框架支持哪些二次开发语言)

ccwgpt 2024-10-09 08:26 26 浏览 0 评论

1. 概述

本人从 2014 年开始使用 Apache Spark,基于以往项目经验,为了降低项目开发复杂度,减少开发成本,开发了 light-spark 框架。 本框架屏蔽了底层技术细节,让开发人员面向 SQL 编程,更专注于业务逻辑,减少开发过程中 Debug 工作,让 Apache Spark 更方便使用。

2. 适用场景

项目业务大部分功能可以用 SQL 实现,符合以下情况,建议使用本框架:

  • 逻辑链条较长,开发周期较长
  • 逻辑较复杂,开发时需要反复调试,从而反复修改 Debug 代码
  • 业务不稳定,功能频繁迭代
  • 开发人员对大数据技术细节不太熟悉

3. 设计思想

  • 大数据项目中整个处理流程如下:
    开始 -> 加载数据 -> 业务计算 -> 结果存储 -> 结束
  • 面向配置编程
    核心思想是面向 Spark DataFrame(SQL) 编程,通过 DataFrame 串联起数据处理流程各个环节,使用 SparkSQL 处理业务逻辑,并定义到配置文件,以便于开发和后期维护,业务调整时避免修改代码。 同时,暴露接口支持开发人员自定义硬编码,实现不能使用 SQL 处理的复杂逻辑,通过配置,把这些逻辑纳入整个处理流程。
    • 使用样例 该样例背景为一个指标计算,需要加载 hive 表数据并关联 jdbc 中的表数据,经过 SQL 计算处理后,结果数据存储到 jdbc 表中,整个处理逻辑定义到一个配置文件中

    4. 使用

    启动脚本样例

    #!/usr/bin/env bash
    set -e
    umask 0000
    
    APP_HOME="$(cd $(dirname $0)/..; pwd -P)"
    ROOT_PATH="$(cd $APP_HOME/..; pwd -P)"
    currentTime=`date '+%Y-%m-%d_%H-%M-%S'`
    
    if [ $# -eq 1 ];then
      params="-c qujia_prd.yaml -d $1"
    elif [ $# -eq 2 ];then
      params="-c $2 -d $1"
    # debug 
    # params="-c $2 -d $1 --debug"
    else
      echo "useage: $0 <date-yyyyMMdd> <conf>"
      exit 1
    fi
    STREAM_APP="com.hellowzk.light.spark.App" # 程序入口
    echo "__________________________ light-spark start __________________________"
    
    CLASSPATH="$APP_HOME/conf"
    
    confList=`find $APP_HOME/conf/ -type f|sed ':a;N;s/\n/,/;ta;'` # 扫描目录下所有配置信息
    APP_JAR="light-spark-assembly.jar" # 指定 jar 包名称
    cmd="spark-submit"
    cmd="$cmd --master yarn --deploy-mode cluster"
    cmd="$cmd --files $confList"
    cmd="$cmd --conf spark.app.name=light-spark-$1" # 指定 hadoop 应用名称
    cmd="$cmd --conf spark.driver.extraClassPath=$CLASSPATH"
    cmd="$cmd --conf spark.yarn.submit.waitAppCompletion=false"
    cmd="$cmd --class $STREAM_APP $APP_HOME/lib/$APP_JAR $params"
    
    echo "command to execute $0: $cmd" # > $APP_HOME/log/light-spark-$1.log
    $cmd

    4.2 组件

    4.2.1 debug 开发工具

    开发过程中,可以通过配置,自动把指定步骤的结果持久化存储,支持 hdfs csv、hive 表

    4.2.2 input - 数据加载

    1. 支持读取 hive 数据;
    2. 支持读取 hdfs 数据,配置中定义好字段信息后自动加载成表;
    3. 支持读取 classpath 数据,配置中定义好字段信息后自动加载成表;
    4. 支持数据源类型比较复杂时,支持 自定义 处理源数据为表;
    5. 支持读取 JDBC 的源数据,jdbcOpts 中参数请看 SparkSQL官方文档;

    4.2.3 process - 业务计算

    1. 支持 SparkSQL 处理。
    2. 处理逻辑较复杂,SQL 较难实现时,支持硬编码实现业务需求。

    4.2.4 output - 结果保存

    1. 存储到 HDFS ,格式可以选择为 txt / lzo 。
    2. 存储到 HIVE 。
    3. 存储到支持 JDBC 的数据库。

    4.2.5 变量

    4.2.5.1 定义及使用

    本框架支持在配置中自定义及使用变量,支持变量嵌套使用

    • 灵活的定义位置 自定义变量可以在 yaml 配置中,也可以定义在 class 类中,定义的变量名称必须唯一。 定义在 class 中,例子 MyConstants
    • 变量使用 在 yaml 中使用,可以直接通过 ${variable} 使用预定义的变量 在类中使用,如下 import com.hellowzk.light.spark.constants.AppConstants AppConstants.variables("mysql_url") // 类型 variables: Map[String, String] 所有可用变量存放在 AppConstants.variables 中

    4.2.5.2 日期表达式

    支持通过日期表达式定义日期,表达式格式为

    DATE([yyyy-MM-dd, 20200722, yyyyMMdd][+3d][-1m][+1y]...)
    • DATE() 为日期表达式声明符
    • 第一个 [ ] 中, 有三个参数 第一个为表达式最终计算结果格式 第二个参数为基准时间,后续的日期计算是基于该时间的,可以省略,代表当前日期 第三个参数为第二个参数的时间格式,基于该格式解析第二个参数,第二个参数没有时,该参数同样不能定义
    • 后面的 [ ] 中,代表时间计算表达式,大小写不敏感 ±nd 加/减 n 天 ±nm 加/减 n 月 ±ny 加/减 n 年
    • 例子
    ...
    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. 配置文件

    完整样例请看 full-batch.yaml

    5.1 整体结构

    配置项 默认值 是否必填 说明 name 是 定义当前 yaml 文件流程名称 constansMap 否,Map 类型 自定义常量,可以在当前 yaml 中通过 ${variable} 使用;在自定义代码中通过 AppConstants.variables("variable" 使用) persistType 否 使用 debug 组件,配置中间数据持久化的地址 hive/hdfs;开启条件,启动脚本中传入 --debug 参数启用 debug 组件 persistDir 否 持久化到 hdfs 的位置,需要启用 debug 组件 persistHiveDb 否 持久化到 hive 的库,需要启用 debug 组件 udaf 否 自定义 UDAF,Map类型, key 为 udaf 命名,value 为止 inputs 是 定义的输入数据 processes 是 处理逻辑 outputs 否 输出 envs 否 环境参数,暂时只支持 Spark 相关参数

    # 流程名称
    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 hdfs
    persistDir: /tmp/spark/app/full-batch
    persistHiveDb: "${outputDB}"
    
    # 输入定义,支持 3 种数据源
    inputs:
      - ...
        
    # 逻辑处理,支持SQL 与 自定义处理, 有 3 种
    processes:
      - ...
    
    # 结果输出, 支持 3 种
    outputs:
      - ...
    
    # 环境设置
    envs:
      # 暂时只支持 spark 相关参数,如下
      spark:
        - ...

    代码克隆

    https://gitee.com/hellowzk/light-spark

    相关推荐

    谷歌正在为Play商店进行Material Design改造

    谷歌最近一直忙于在其应用程序中完成MaterialDesign风格的改造,而Play商店似乎是接下来的一个。9to5Google网站报道,有用户在Play商店的最新版本中发现了新界面,暗示该应用和网...

    企业网站免费搭建,定制化建站CMS系统

    科腾软件企业网站CMS管理系统已完成开发工作,首次开源(全部源码)发布。开发工具:VisualStudioEnterprise2022数据库:SQLite(零配置,跨平台,嵌入式)开发...

    您需要的 11 个免费 Chrome 扩展程序

    来源:SEO_SEM营销顾问大师Chrome扩展程序是SEO的无名英雄,他们在幕后默默工作,使您的策略脱颖而出并提高您的努力效率。从竞争对手研究到审核您的网站,速度比您说“元描述”还快,这些小工具发...

    户外便携设备抗干扰困境如何破局?CMS-160925-078S-67给出答案

      在户外复杂的电磁环境中,便携式设备中的扬声器需具备出色抗干扰能力,CUID的CMS-160925-078S-67在这方面表现突出。  从其结构设计来看,矩形框架虽主要为适配紧凑空...

    一个基于NetCore开发的前后端分离CMS系统

    今天给大家推荐一个开源的前后端分离架构的CMS建站系统。项目简介这是一个基于.Net3构建的简单、跨平台、模块化建站系统。系统业务简单、代码清晰、层级分明、全新架构便于二次扩展开发。支持多种数据库,...

    本地Docker部署ZFile网盘打造个人云存储

    前言本文主要介绍如何在LinuxUbuntu系统使用Docker本地部署ZFile文件管理系统,并结合cpolar内网穿透工具实现远程访问本地服务器上的ZFile传输与备份文件,轻松搭建个人网盘,无...

    pcfcms企业建站系统 免费+开源的企业内容管理系统

    项目介绍pcfcms是基于TP6.0框架为核心开发的免费+开源的企业内容管理系统,专注企业建站用户需求提供海量各行业模板,降低中小企业网站建设、网络营销成本,致力于打造用户舒适的建站体验。演示站...

    【推荐】一个高颜值且功能强大的 Vue3 后台管理系统框架

    如果您对源码&技术感兴趣,请点赞+收藏+转发+关注,大家的支持是我分享最大的动力!!!项目介绍SnowAdmin是一款基于Vue3、TypeScript、Vite5、Pinia、Arco-Desi...

    java开源cms管理系统框架PublicCMS后台管理系统

    一款使用Java语言开发的CMS,提供文章发布,图片展示,文件下载,用户权限、站点模块,内容管理、分类等功能。可免费用于商业用途maven工程数据库脚本在工程中database文件夹下代码结构:效果...

    一定要大量读书:当我问Deepseek,它给出的高效阅读方法厉害了!

    一年一度的世界读书日,总该写点什么。于是,我去问Deepseek给我推荐人生破局必读的10本书,结果它给了我回复,竟然10本推荐的书籍里,我都曾经浏览过,同时还给出破局关键。而说浏览过,不是读过,是因...

    《搜神札记》:不应磨灭的惊奇(小说《搜神记》)

    □黄勃志怪传说的书写一直是文人墨客的后花园,晚近尤盛,从张岱到袁枚到纪昀,收集那些或阴森或吊诡的行状故事,遂成一类,到民国年间,周作人挟此遗传,捋袖子拿希腊神话动刀,乃兄鲁迅不甘其后,《故事新编》虎...

    《如何构建金字塔》之第三章总结(构建金字塔结构的方法有)

    “没有什么比一套好理论更有用了。”——库尔特.勒温这篇读后感依然引用了这句库尔特.勒温名言,这句话也是我读芭芭拉.明托这本书的初衷。今天就“如何构建金字塔”,我来谈谈我的读后心得。我热爱写作,但是写...

    《助人技术》第一章助人引论内容框架

    第一章内容基本呈现如何成为助人者(心理咨询师)以及一些相关基础知识,对于进入这个行业有兴趣以及希望通过心理咨询寻求帮助但存有疑虑的当事人,都值得一读。心理咨询的三个阶段(不是说严格的三个阶段,而是广义...

    AI助手重构读后感写作流程:从提纲到完整性思考的转换

    大家好!你有没有遇到过读完一本书,想要写读后感,却不知道从何下手的情况呢?今天我们要来探讨一下如何利用稿见AI助手来重构读后感写作流程,从提纲到完整性思考的转换。让我们一起来看看这个全新而又实用的方法...

    图解用思维导图做读书笔记技巧(图解用思维导图做读书笔记技巧视频)

    做阅读笔记非常有利于读后进行有效的深入思考,而思维导图这一强大的工具其最大的特点就是架构清晰,在阅读过程中对文章的分析、总结、分类起着很大的辅助作用。思维导图读书笔记步骤:1、阅读大纲。首先要快速浏览...

    取消回复欢迎 发表评论: