Skip to content

Spark Jar 作业

场景 已经有一个写好、编译好的 Spark 程序(Java/Scala 打成的 fat jar),不想为了跑它专门学一套新工具,只想把 jar 扔进调度系统里定时跑。典型如自定义的机器学习训练/打分任务、用 SQL 表达不方便的复杂多阶段计算逻辑。

能干什么

你想做的事配置成 Spark Jar 长这样(示意)
跑一个自带 Main-Class 的 jarJar 路径填 s3a://warehouse/jars/app.jar,主类留空
跑官方/第三方示例 jarJar 路径填 local:///opt/spark/examples/jars/...,主类填 org.apache.spark.examples.SparkPi
给程序传参数程序参数按空格分隔填,如 100
jar 里要读写湖表选一个「读写 catalog」,拿到本空间小账号的 S3 凭证

亮点

  • 不挑语言,只要是 Spark 程序——Java/Scala 写的、打成 fat jar 的 Spark 程序,不用改代码就能接入调度,不用绑定 SQL。
  • jar 从资源中心统一管理——先把 jar 传到「数据管理 → 资源中心」,以后新建作业直接下拉选,不用每次抄一遍绝对路径;也支持手填 local://(镜像内置)或 s3a://(对象存储)路径。
  • 零上传也能验证环境——不用先编译上传自己的 jar,Spark 官方镜像自带 spark-examples 示例 jar(比如估算 Pi 值的 SparkPi),local:// 路径直接引用,新空间/新集群先跑通这个最快。
  • 按需读写 catalog,权限收在小账号里——jar 要读写 Iceberg 就选一个 catalog 授权,拿到的是本空间小账号(sub-account)的 S3 凭证,不是有全局权限的大账号——存储层前缀策略兜底,读写出不了本空间。
  • 执行身份跟 SQL 类作业不同——Spark SQL 作业引擎层会做逐表逐列鉴权,Spark Jar 里跑的是自己的代码,平台管不到 jar 内部逻辑,安全边界只能收在"能不能碰这个 S3 前缀"这一层;能用 SQL 表达的逻辑,优先用 Spark SQL 作业,受控程度更高。
  • 跟批作业共用资源池——底层也是提交到本空间的 Spark k8s Job,和 Spark SQL / DATA_SYNC 共用同一份「批作业资源」配额。

完整操作示例:跑通 SparkPi 示例作业

下面是一次真实的最小可行验证:不用编译上传任何东西,直接引用平台镜像里自带的 Spark 官方示例 jar,跑一次估算 Pi 值的计算。

1. 配置作业:jar 路径 + 主类 + 参数

新建「Spark Jar」作业,Jar 路径填镜像内置路径,主类填 org.apache.spark.examples.SparkPi,程序参数填 100(迭代次数,值越大估算越精确、耗时也越长)。这次不涉及读写湖表,「读写 catalog」留空即可。

Spark Jar 作业的完整配置

2. 运行并查看结果

保存后「运行一次」,几十秒内跑完(包含拉起 Spark driver/executor pod 的时间)。运行日志里能直接看到程序的标准输出:

Pi is roughly 3.1416311141631112

Spark Jar 作业运行成功,日志里能看到程序输出

想直接写 SQL 而不是打 jar 包,看Spark SQL 作业;想批量同步外部数据库,看离线集成(DATA_SYNC)作业

看全部作业类型 →