在 Visual Studio Code 中於 SQL Server 巨量資料叢集上提交 Spark 作業

重要

Microsoft SQL Server 2019 巨量資料叢集附加元件將會淘汰。 SQL Server 2019 巨量資料叢集的支援將于 2025 年 2 月 28 日結束。 如需詳細資訊,請參閱Microsoft SQL Server 平臺上的巨量資料選項

瞭解如何使用 Spark & Hive Tools for Visual Studio Code建立和提交 Apache Spark 的 PySpark 腳本,首先我們將說明如何在 Visual Studio Code中安裝 Spark & Hive 工具,然後逐步解說如何將作業提交至 Spark。

Spark & Hive 工具可以安裝在Visual Studio Code支援的平臺上,包括 Windows、Linux 和 macOS。 您可以在下面找到不同平台的先決條件。

必要條件

若要完成此文章中的步驟,將會需要下列項目:

安裝 Spark & Hive Tools

完成必要條件之後,您可以安裝 Spark & Hive Tools for Visual Studio Code。 完成下列步驟以安裝 Spark & Hive 工具:

  1. 開啟 Visual Studio Code。

  2. 從功能表列,瀏覽至 [檢視]>[擴充功能]。

  3. 在搜尋方塊中,輸入 [Spark & Hive] 。

  4. 從搜尋結果中選取 Microsoft 發佈的 Spark & Hive 工具,然後選取 [ 安裝]。

    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 cluster command

  2. 針對已連結的叢集類型選取 [SQL Server 巨量資料]

  3. 輸入 SQL Server 巨量資料端點。

  4. 輸入SQL Server巨量資料叢集使用者名稱。

  5. 輸入使用者管理員的密碼。

  6. 設定巨量資料叢集的顯示名稱, (選擇性) 。

  7. 列出叢集,檢閱 [輸出] 檢視以確認。

列出叢集

  1. 從功能表列流覽至 [檢視>命令選擇區...],然後輸入Spark /Hive:清單叢集

  2. 檢閱 [輸出] 檢視。 該檢視將會顯示已連結的叢集。

    Set a default cluster configuration

設定預設叢集

  1. 如果關閉,Re-Open稍早建立的SQLBDCexample資料夾。

  2. 選取先前所建立的 HelloWorld.py 檔案,它將會在指令碼編輯器中開啟。

  3. 如果您尚未連結叢集,請先這麼做。

  4. 以滑鼠右鍵按一下腳本編輯器,然後選取 [Spark / Hive:設定預設叢集]。

  5. 選取某個叢集作為目前指令檔的預設叢集。 工具會自動更新設定檔 .VSCode\settings.json

    Set default cluster configuration

提交互動式 PySpark 查詢

您可以遵循下列步驟來提交互動式 PySpark 查詢:

  1. 如果您已經將先前所建立的 SQLBDCexampl 資料夾關閉,請重新開啟該資料夾。

  2. 選取先前所建立的 HelloWorld.py 檔案,它將會在指令碼編輯器中開啟。

  3. 如果您尚未連結叢集,請先這麼做。

  4. 選擇所有程式碼,並以滑鼠右鍵按一下腳本編輯器,選取 [Spark:PySpark Interactive ] 以提交查詢,或使用快速鍵 Ctrl + Alt + I

    pyspark interactive context menu

  5. 如果您尚未指定預設叢集,請選取叢集。 幾分鐘後, Python 互動式 結果會出現在新索引標籤中。這些工具也可讓您使用操作功能表提交程式碼區塊,而不是整個腳本檔案。

    pyspark interactive python interactive window

  6. 輸入 "%%info",然後按 Shift + Enter 以檢視作業資訊。 (選用)

    view job information

    注意

    在設定中取消選取 [已啟用 Python 擴充功能] (預設為選取) 時,已提交的 [PySpark 互動式] 結果將會使用舊的視窗。

    pyspark interactive python extension disabled

提交 PySpark 批次工作

  1. 如果您已經將先前所建立的 SQLBDCexampl 資料夾關閉,請重新開啟該資料夾。

  2. 選取先前所建立的 HelloWorld.py 檔案,它將會在指令碼編輯器中開啟。

  3. 如果您尚未連結叢集,請先這麼做。

  4. 以滑鼠右鍵按一下腳本編輯器,然後選取[Spark:PySpark] Batch,或使用快捷方式Ctrl + Alt + H

  5. 如果您尚未指定預設叢集,請選取叢集。 在您提交 Python 作業之後,提交記錄便會出現在 Visual Studio Code 的 [輸出] 視窗中。 同時也會顯示 Spark UI URLYarn UI URL。 您可以在網頁瀏覽器中開啟該 URL 來追蹤作業狀態。

    Submit Python job result

Apache Livy 設定

支援 Apache Livy \(英文\) 設定,且可以在工作區資料夾中的 .VSCode\settings.json 設定它。 目前 Livy 設定僅支援 Python 指令碼。 如需詳細資料,請參閱 Livy 讀我檔案

如何觸發 Livy 設定

方法 1

  1. 從功能表列,瀏覽至 [檔案]>[喜好設定]>[設定]。
  2. 在 [ 搜尋設定] 文字方塊中,輸入 HDInsight 工作提交:Livy Conf
  3. 選取 [在 settings.json 中編輯] 以取得相關的搜尋結果。

方法 2

提交檔案。請注意,系統會自動將 .vscode 資料夾加入工作資料夾。 您可以在 下 .vscode 選取 settings.json 來尋找 Livy 設定。

專案設定:

Livy configuration

注意

針對 settings driverMemoryexecutorMemory,請使用單位設定值,例如 1gb 或 1024mb。

支援的 Livy 設定

POST /batches

要求本文

名稱 description 類型
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 的對應
:- :- :-

回應本文

建立的批次物件。

名稱 description 類型
id 工作階段識別碼 int
appId 此工作階段的應用程式識別碼 String
appInfo 詳細的應用程式資訊 key=val 的對應
log 記錄行 字串清單
狀態 批次狀態 字串
:- :- :-

注意

提交指令碼時,已指派的 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:取消連結叢集

  2. 選取要取消連結的叢集。

  3. 檢閱 [輸出] 檢視以確認。

下一步

如需SQL Server巨量資料叢集和相關案例的詳細資訊,請參閱SQL Server 巨量資料叢集