使用VS Code+通义灵码提交任务至Serverless Spark

通过VS Code、通义灵码以及Serverless Spark提供的spark-submit工具,用户能够快速生成Spark任务代码并将其提交至Serverless Spark进行执行。本文将为您详细介绍如何使用上述工具提交Serverless Spark任务。

前提条件

步骤一:准备环境

安装VS Code与通义灵码插件

  1. 下载并安装 Visual Studio Code(推荐 v1.68 及以上版本)。

  2. 打开 VS Code,进入左侧扩展面板(Extensions),搜索并安装。有关安装的详细教程,请参见Visual Studio Code 中安装通义灵码

    • Python(由 Microsoft 提供)—— 支持语法高亮与调试

    • 通义灵码(Tongyi Lingma)—— 阿里云官方 AI 编程插件

  3. 安装完成后,使用您的阿里云账号登录通义灵码。

  4. 在状态栏点击“通义灵码”图标,将对话框中模式切换为 Agent 模式

  5. 配置 VSCode 支持的 Shell。

    1. 按下 Cmd + Shift + P(Mac)或 Ctrl + Shift + P(Windows/Linux)。

    2. 输入 Terminal: Select Default Profile,然后选择它。

    3. 选择一个受支持的 Shell。

      • Linux/macOS: bash, fish, pwsh, zsh

      • Windows: Git Bash, pwsh

    4. 完全退出 VSCode,然后重新打开 VSCode。

安装ossutil工具和spark-submit工具

  1. 下载并安装ossutil工具。有关安装的详细教程,请参见安装ossutil

  2. 单击emr-serverless-spark-tool-0.9.0-SNAPSHOT-bin.zip,下载spark-submit工具并解压。

  3. 进入 conf/ 目录,用 VS Code 打开 connection.properties 文件,填写以下信息。

    accessKeyId=<ALIBABA_CLOUD_ACCESS_KEY_ID>
    accessKeySecret=<ALIBABA_CLOUD_ACCESS_KEY_SECRET>
    regionId=cn-hangzhou
    endpoint=emr-serverless-spark.cn-hangzhou.aliyuncs.com
    workspaceId=w-xxxxxxxxxxxx
    重要

    AccessKey对应的RAM用户/角色账号需要进行RAM授权并添加至对应的Serverless Spark工作空间中。

    涉及参数说明如下表所示。

    参数

    是否必填

    说明

    accessKeyId

    执行Spark任务使用的阿里云账号或RAM用户的AccessKey IDAccessKey Secret。

    重要

    在配置accessKeyIdaccessKeySecret参数时,请确保所使用的AccessKey所对应的用户具有对工作空间绑定的OSS Bucket的读写权限。工作空间绑定的OSS Bucket,您可以在Spark页面,单击工作空间操作列的详情进行查看。

    accessKeySecret

    regionId

    地域ID。本文以杭州地域为例。

    endpoint

    EMR Serverless SparkEndpoint。地址详情参见服务接入点

    本文以杭州地域公网访问地址为例,参数值为emr-serverless-spark.cn-hangzhou.aliyuncs.com

    说明

    如果ECS实例没有公网访问能力,需要使用VPC地址。

    workspaceId

    EMR Serverless Spark工作空间ID。

步骤二:生成示例数据和任务代码

生成示例数据

  1. 在本地创建一个新项目文件夹(例如:spark-with-lingma),并在 VS Code 中打开该目录。

  2. 启动通义灵码输入框,输入以下提示语:

    创建一个新文件employees.csv,文件生成包括20行数据的csv格式。包含人员名称,部门名,薪资。名称使用常见英文名,部门为Engineering, Marketing, Sales, HR, Finance,薪资范围在5000-30000之间。
  3. 通义灵码将自动生成如下内容,点击“接受”,自动保存为employees.csv 至当前项目目录。image

  4. 在通义灵码输入框,输入以下提示语:

    employees.csv文件上传至oss://spark-demo
  5. 通义灵码将employees.csv 上传至oss://spark-demo路径下。image

生成任务代码

生成一个 PySpark 代码,用于计算各部门平均薪资。

  1. 在通义灵码输入框中输入以下自然语言指令:

    帮我生成一个avg_salary_by_dept.py 文件,文件包含下述内容:
    1. 使用pyspark读取oss路径oss://spark-demo/employees.csv 的 CSV 文件,包含表头并推断数据类型,定义明确的数据结构。(数据内容和刚刚生成的employees.csv一致)
    2. 展示几个示例数据。
    3. 计算每个部分的平均薪资,计算平均工资时需要去掉表头数据(列名为deparment)。
    4. 将聚合后的结果打印出来。
    5. 添加必要的import语句。
  2. 通义灵码将生成类似以下代码,点击“接受”,自动保存为avg_salary_by_dept.py 至当前项目目录。image

  3. 通过通义灵码将avg_salary_by_dept.py 上传至oss://spark-demo路径下。

步骤三:使用spark-submit提交任务

通过 spark-submit 工具将任务提交至 Serverless Spark 集群。

构建提交命令

使用通义灵码,构建spark-submit命令。

  1. 使用通义灵码输入以下提示:

    以下是spark-submit示例,参考示例给我一个提交任务的代码: 
    ./bin/spark-submit  --name SparkPi \
    --queue dev_queue  \
    --num-executors 5 \
    --driver-memory 1g \
    --executor-cores 2 \
    --executor-memory 2g \
    --class org.apache.spark.examples.SparkPi \
     oss://<yourBucket>/path/to/spark-examples_2.12-3.3.1.jar \
    10000
    
    我的工具在/yourPath下,任务名AvgSalaryJob,使用root_queue队列,任务文件路径:oss://spark-demo/avg_salary_by_dept.py。
  2. 通义灵码将输出:image

执行任务提交

使用通义灵码,执行任务提交命令。

  1. 使用通义灵码输入以下提示。

    执行命令/yourPath/emr-serverless-spark-tool-0.9.0-SNAPSHOT/bin/spark-submit
    --name AvgSalaryJob
    --queue root_queue
    --num-executors 5
    --driver-memory 1g
    --executor-cores 2
    --executor-memory 2g
    oss://spark-demo/avg_salary_by_dept.py
  2. 通义灵码将输出以下内容,单击“运行”。image

  3. 查看运行结果。image

步骤四:监控任务执行状态

您可以通过spark-submit工具+通义灵码查看任务状态。

  • 查看任务状态:/yourPath/emr-serverless-spark-tool-0.9.0-SNAPSHOT/bin/spark-submit --status <jr-xxxxxxxxxxxx>image

  • 查看任务详情:/yourPath/emr-serverless-spark-tool-0.9.0-SNAPSHOT/bin/spark-submit --detail <jr-xxxxxxxxxxxx>image

  • (可选)终止任务:/yourPath/emr-serverless-spark-tool-0.9.0-SNAPSHOT/bin/spark-submit --kill <jr-xxxxxxxxxxxx>

您也可以登录Serverless Spark工作空间,在任务历史列表中查看该任务的详细运行日志及运行状态。

相关文档