在 Visual Studio Code 中的 SQL Server 大数据群集上提交 Spark 作业

重要

Microsoft SQL Server 2019 大数据群集附加产品将停用。 对 SQL Server 2019 大数据群集的支持将于 2025 年 2 月 28 日结束。 具有软件保障的 SQL Server 2019 的所有现有用户都将在平台上获得完全支持,在此之前,该软件将继续通过 SQL Server 累积更新进行维护。 有关详细信息,请参阅公告博客文章Microsoft SQL Server 平台上的大数据选项

了解如何使用适用于 Visual Studio Code 的 Spark & Hive Tools 来创建和提交 Apache Spark 的 PySpark 脚本,首先我们将介绍如何在 Visual Studio Code 中安装 Spark & Hive Tools,然后演示如何将作业提交到 Spark。

Spark & Hive Tools 可以安装在 Visual Studio Code 支持的平台上,包括 Windows、Linux 和 macOS。 下面介绍了不同平台的必备条件。

先决条件

完成本文中的步骤需要以下各项:

安装 Spark & Hive Tools

完成必备条件后,可以安装适用于 Visual Studio Code 的 Spark & Hive Tools。 完成以下步骤以安装 Spark & Hive Tools:

  1. 打开 Visual Studio Code。

  2. 从菜单栏中,导航到“查看”>“扩展” 。

  3. 在搜索框中,输入“Spark & Hive”

  4. 从搜索结果中选择“Spark & Hive Tools”(由 Microsoft 发布),然后选择“安装”

    Install Extension

  5. 需要时重新加载。

打开工作文件夹

完成以下步骤以打开工作文件夹,并在 Visual Studio Code 中创建一个文件:

  1. 从菜单栏中,导航到“文件”>“打开文件夹...”>“C:\SQLBDC\SQLBDCexample”,然后选择“选择文件夹”按钮 。 该文件夹显示在左侧的“资源管理器”视图中。

  2. 在“资源管理器”视图中,选择文件夹“SQLBDCexample”,然后选择工作文件夹旁边的“新建文件”图标

    New file

  3. 使用 .py(Spark 脚本)文件扩展名命名新文件。 此示例使用 HelloWorld.py

  4. 将以下代码复制并粘贴到脚本文件中:

    import sys
    from operator import add
    from pyspark.sql import SparkSession, Row
    
    spark = SparkSession\
       .builder\
       .appName("PythonWordCount")\
       .getOrCreate()
    
    data = [Row(col1='pyspark and spark', col2=1), Row(col1='pyspark', col2=2), Row(col1='spark vs hadoop', col2=2), Row(col1='spark', col2=2), Row(col1='hadoop', col2=2)]
    df = spark.createDataFrame(data)
    lines = df.rdd.map(lambda r: r[0])
    
    counters = lines.flatMap(lambda x: x.split(' ')) \
       .map(lambda x: (x, 1)) \
       .reduceByKey(add)
    
    output = counters.collect()
    sortedCollection = sorted(output, key = lambda r: r[1], reverse = True)
    
    for (word, count) in sortedCollection:
       print("%s: %i" % (word, count))
    

在从 Visual Studio Code 将脚本提交到群集之前,需要链接 SQL Server 大数据群集。

  1. 在菜单栏中,导航到“视图”>“命令面板...”,然后输入“Spark/Hive: Link a Cluster” 。

    link cluster command

  2. 选择链接群集类型“SQL Server 大数据”

  3. 输入 SQL Server 大数据终结点。

  4. 输入 SQL Server 大数据群集用户名。

  5. 输入用户管理员的密码。

  6. 设置大数据群集的显示名称(可选)。

  7. 列出群集,查看“输出”视图以进行验证

列出群集

  1. 在菜单栏中,导航到“视图”>“命令面板...”,然后输入“Spark/Hive: List Cluster” 。

  2. 检查“输出”视图。 该视图将显示链接群集。

    Set a default cluster configuration

设置默认群集

  1. 如果已关闭,请重新打开之前创建的文件夹“SQLBDCexample”。

  2. 选择之前创建的文件“HelloWorld.py”,它将在脚本编辑器中打开

  3. 如果尚未链接群集,请将其链接。

  4. 右键单击脚本编辑器,然后选择“Spark / Hive: 设置默认群集”。

  5. 选择一个群集作为当前脚本文件的默认群集。 这些工具会自动更新配置文件“.VSCode \ settings.json”

    Set default cluster configuration

提交交互式 PySpark 查询

可以按照以下步骤提交交互式 PySpark 查询:

  1. 如果已关闭,请重新打开之前创建的文件夹“SQLBDCexample”

  2. 选择之前创建的文件“HelloWorld.py”,它将在脚本编辑器中打开

  3. 如果尚未链接群集,请将其链接。

  4. 选择所有代码并右键单击脚本编辑器,选择“Spark: PySpark Interactive”以提交查询,或使用快捷方式“Ctrl + Alt + I” 。

    pyspark interactive context menu

  5. 如果尚未指定默认群集,请选择群集。 片刻之后,Python Interactive 结果将显示在新的选项卡中。还可通过这些工具使用上下文菜单提交代码块而不是整个脚本文件。

    pyspark interactive python interactive window

  6. 输入“%%info”,然后按 Shift+Enter 查看作业信息。 (可选)

    view job information

    注意

    如果在设置中取消选中“Python 扩展已启用”(选中默认设置),则提交的 pyspark 交互结果将使用旧窗口

    pyspark interactive python extension disabled

提交 PySpark 批处理作业

  1. 如果已关闭,请重新打开之前创建的文件夹“SQLBDCexample”

  2. 选择之前创建的文件“HelloWorld.py”,它将在脚本编辑器中打开

  3. 如果尚未链接群集,请将其链接。

  4. 右键单击脚本编辑器,并选择“Spark: PySpark Batch”,或使用快捷键“Ctrl + Alt + H” 。

  5. 如果尚未指定默认群集,请选择群集。 提交 Python 作业后,提交日志将显示在 Visual Studio Code 的“输出”窗口中。 还会显示“Spark UI URL”和“Yarn UI URL”。 你可以在 Web 浏览器中打开 URL 以跟踪作业状态。

    Submit Python job result

Apache Livy 配置

支持 Apache Livy 配置,在工作空间文件夹中的 .VSCode\settings.json 中可以设置该配置。 目前,Livy 配置仅支持 Python 脚本。 更多详细信息,请参阅 Livy 自述文件

如何触发 Livy 配置

方法 1

  1. 从菜单栏中,导航到“文件”>“首选项”>“设置” 。
  2. 在“搜索设置”文本框中输入“HDInsight Job Submission: Livy Conf”。
  3. 选择“在 settings.json 中编辑”以获取相关搜索结果。

方法 2

提交文件,注意 .vscode 文件夹会自动添加到工作文件夹中。 可以通过选择 .vscode 下的 settings.json 找到 Livy 配置。

项目设置:

Livy configuration

注意

对于设置“driverMemory”和“executorMemory”,请使用单位设置值,例如 1gb 或 1024mb。

支持的 Livy 配置

POST /批处理

请求正文

name description type
file 包含要执行的应用程序的文件 路径(必需)
proxyUser 运行作业时要模拟的用户 字符串
className 应用程序 Java/Spark 主类 字符串
args 应用程序的命令行参数 字符串列表
jars 将在本次会话中使用的 jars 字符串列表
pyFiles 将在本次会话中使用的 Python 文件 字符串列表
files 将在本次会话中使用的文件 字符串列表
driverMemory 用于驱动程序进程的内存量 字符串
driverCores 用于驱动程序进程的内核数 int
executorMemory 每个执行程序进程使用的内存量 字符串
executorCores 每个执行程序使用的内核数 int
numExecutors 为此会话启动的执行程序数 int
archives 将在本次会话中使用的存档 字符串列表
queue 提交到的 YARN 队列的名称 字符串
name 会话的名称 字符串
conf Spark 配置属性 key=val 的映射
:" :" :"

响应正文

创建的批处理对象。

name description type
id 会话 ID int
appId 此会话的应用程序 ID String
appInfo 详细的应用程序信息 key=val 的映射
log 日志行 字符串列表
state 批处理状态 字符串
:" :" :"

备注

提交脚本时,分配的 Livy 配置将显示在输出窗格中。

其他功能

适用于 Visual Studio Code 的 Spark & Hive 支持以下功能:

  • IntelliSense 自动完成。 弹出关键字、方法、变量等的建议。 不同的图标代表不同类型的对象。

    Spark & Hive Tools for Visual Studio Code IntelliSense object types

  • IntelliSense 错误标记。 语言服务强调了 Hive 脚本的编辑错误。

  • 语法突出显示。 语言服务使用不同的颜色来区分变量、关键字、数据类型、函数等。

    Spark & Hive Tools for Visual Studio Code syntax highlights

  1. 在菜单栏中,转到“视图”>“命令面板”,然后输入“Spark / Hive: Unlink a Cluster” 。

  2. 选择要取消链接的群集。

  3. 查看“输出”视图以进行验证。

后续步骤

有关 SQL Server 大数据群集和相关方案的详细信息,请参阅 SQL Server 大数据群集