分享方式:


使用 Spark 和 Hive Tools for Visual Studio Code

瞭解如何使用 Apache Spark 和 Hive Tools for Visual Studio Code。 使用工具來建立和提交 Apache Hive 批次作業、互動式 Hive 查詢和適用於 Apache Spark 的 PySpark 腳本。 首先,我們將說明如何在Visual StudioCode中安裝Spark和Hive Tools。 然後我們將逐步解說如何將作業提交至 Spark 和 Hive Tools。

Spark 和 Hive 工具可以安裝在 Visual Studio Code 支援的平臺上。 請注意下列不同平臺的必要條件。

必要條件

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

  • Azure HDInsight 叢集。 若要建立叢集,請參閱 開始使用 HDInsight。 或使用支援 Apache Livy 端點的 Spark 和 Hive 叢集。
  • Visual Studio Code \(英文\)。
  • Mono \(英文\)。 只有 Linux 和 macOS 才需要 Mono。
  • Visual Studio Code 的 PySpark 互動式環境。
  • 本機目錄。 本文使用 C:\HD\HDexample

安裝 Spark 與 Hive 工具

符合必要條件之後,您可以遵循下列步驟來安裝 Spark 和 Hive Tools for Visual Studio Code:

  1. 開啟 Visual Studio Code。

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

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

  4. 從搜尋結果中選取 [Spark 和 Hive 工具 ],然後選取 [ 安裝]:

    Spark & Hive for Visual Studio Code Python install.

  5. 視需要選取 [ 重載 ]。

開啟工作資料夾

若要開啟工作資料夾,並在 Visual Studio Code 中建立檔案,請遵循下列步驟:

  1. 從功能表列,流覽至 [檔案>開啟資料夾...>C:\HD\HDexample,然後選取 [選取資料夾] 按鈕。 該資料夾會出現在左側的 [檔案總管] 檢視中。

  2. [總管] 檢視中 ,選取 [HDexample ] 資料夾,然後選取工作資料夾旁邊的 [ 新增檔案 ] 圖示:

    visual studio code new file icon.

  3. 使用 .hql [Hive 查詢] 或 .py [Spark 腳本] 擴展名,為新檔案命名。 此範例使用 HelloWorld.hql

設定 Azure 環境

針對國家雲端使用者,請先遵循下列步驟來設定 Azure 環境,然後使用 Azure:登入 命令登入 Azure:

  1. 流覽至 [檔案>喜好設定> 設定]。

  2. 搜尋下列字串: Azure:雲端

  3. 從清單中選取國家雲端:

    Set default login entry configuration.

連線到 Azure 帳戶

您必須先登入 Azure 訂用帳戶或連結 HDInsight 叢集, 才能從 Visual Studio Code 將腳本提交至叢集。 使用 ESP 叢集的 Ambari 使用者名稱/密碼或已加入網域的認證來連線到您的 HDInsight 叢集。 請遵循下列步驟來連線到 Azure:

  1. 從功能表欄流覽至 [ 檢視>命令選擇區...],然後輸入 Azure:登入

    Spark & Hive Tools for Visual Studio Code login.

  2. 請遵循登入指示來登入 Azure。 連線之後,您的 Azure 帳戶名稱會顯示在 Visual Studio Code 視窗底部的狀態列上。

您可以使用 Apache Ambari 管理的使用者名稱連結一般叢集,或使用網域使用者名稱連結 Enterprise Security Pack secure Hadoop 叢集(例如:)。 user1@contoso.com

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

    Command Palette link cluster command.

  2. 選取連結的叢集類型 Azure HDInsight

  3. 輸入 HDInsight 叢集 URL。

  4. 輸入您的Ambari用戶名稱;預設值為 admin

  5. 輸入您的Ambari密碼。

  6. 選取叢集類型。

  7. 設定叢集的顯示名稱(選擇性)。

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

    注意

    如果叢集同時登入 Azure 訂用帳戶和連結叢集,則會使用連結的使用者名稱和密碼。

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

  2. 選取連結的叢集類型 [一般 Livy 端點]。

  3. 輸入一般 Livy 端點。 例如:http://10.172.41.42:18080.

  4. 選取 [基本] 或 [無] 授權類型。 如果您選取 [ 基本]:

    1. 輸入您的Ambari用戶名稱;預設值為 admin

    2. 輸入您的Ambari密碼。

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

列出叢集

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

  2. 選取您想要的訂用帳戶。

  3. 檢閱 [輸出] 檢視。 此檢視會顯示連結的叢集(或叢集)和 Azure 訂用帳戶下的所有叢集:

    Set a default cluster configuration.

設定預設叢集

  1. 如果已關閉,請重新開啟稍早討論的 HDexample 資料夾。

  2. 選取稍早建立的 HelloWorld.hql 檔案。 它會在文稿編輯器中開啟。

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

  4. 連線 至您的 Azure 帳戶,或如果您尚未這麼做,請連結叢集。

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

    Set default cluster configuration.

提交互動式Hive查詢和Hive批次腳本

使用適用於 Visual Studio Code 的 Spark 和 Hive 工具,您可以將互動式 Hive 查詢和 Hive 批次腳本提交至叢集。

  1. 如果已關閉,請重新開啟稍早討論的 HDexample 資料夾。

  2. 選取稍早建立的 HelloWorld.hql 檔案。 它會在文稿編輯器中開啟。

  3. 將下列程式代碼複製並貼到 Hive 檔案中,然後儲存:

    SELECT * FROM hivesampletable;
    
  4. 連線 至您的 Azure 帳戶,或如果您尚未這麼做,請連結叢集。

  5. 以滑鼠右鍵按兩下腳本編輯器,然後選取 [Hive:互動式 ] 以提交查詢,或使用 Ctrl+Alt+I 鍵盤快捷方式。 選取 [Hive:Batch ] 以提交腳本,或使用 Ctrl+Alt+H 鍵盤快捷方式。

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

    Interactive Apache Hive query result.

    • 結果 面板:您可以將整個結果儲存為 CSV、JSON 或 Excel 檔案到本機路徑,或只選取多行。

    • 訊息 面板:當您選取 號時,它會跳至執行中腳本的第一行。

提交互動式 PySpark 查詢

Pyspark 互動式的必要條件

請注意,Jupyter 擴充功能版本 (ms-jupyter): v2022.1.1001614873 和 Python 延伸模組版本 (ms-python): v2021.12.1559732655、Python 3.6.x 和 3.7.x 是 HDInsight 交互式 PySpark 查詢的必要專案。

用戶可以以下列方式執行 PySpark 互動式。

在 PY 檔案中使用 PySpark 互動式命令

使用 PySpark 互動式命令來提交查詢,請遵循下列步驟:

  1. 如果已關閉,請重新開啟稍早討論的 HDexample 資料夾。

  2. 遵循先前的步驟,建立新的 HelloWorld.py 檔案。

  3. 將下列程式碼複製並貼到該指令檔:

    from operator import add
    from pyspark.sql import SparkSession 
    spark = SparkSession.builder \ 
          .appName('hdisample') \ 
          .getOrCreate() 
    lines = spark.read.text("/HdiSamples/HdiSamples/FoodInspectionData/README").rdd.map(lambda r: r[0])
    counters = lines.flatMap(lambda x: x.split(' ')) \
                 .map(lambda x: (x, 1)) \
                 .reduceByKey(add)
    
    coll = counters.collect()
    sortedCollection = sorted(coll, key = lambda r: r[1], reverse = True)
    
    for i in range(0, 5):
         print(sortedCollection[i])
    
  4. 視窗右下角會顯示安裝 PySpark/Synapse Pyspark 核心的提示。 您可以按下 [ 安裝] 按鈕,繼續進行 PySpark/Synapse Pyspark 安裝;或按兩下 [ 略過 ] 按鈕以略過此步驟。

    Screenshot shows an option to skip the PySpark installation.

  5. 如果您需要稍後進行安裝,您可以流覽至 [檔案>喜好>設定]設定,然後取消核取 [HDInsight:在設定中啟用 Skip Pyspark 安裝]。

    Screenshot shows the option to Enable Skip Pyspark Installation.

  6. 如果步驟 4 中的安裝成功,視窗右下角會顯示 [已成功安裝 PySpark] 消息框。 按兩下 [重 ] 按鈕以重載視窗。

    pyspark installed successfully.

  7. 從功能表欄流覽至 [檢視>命令選擇區...],或使用Shift + Ctrl + P 鍵盤快捷方式,然後輸入 Python:選取解釋器以啟動 Jupyter 伺服器。

    select interpreter to start jupyter server.

  8. 選取下方的 [Python] 選項。

    choose the below option.

  9. 從功能表欄流覽至 [檢視>命令選擇區...],或使用Shift + Ctrl + P 鍵盤快捷方式,然後輸入開發人員:重載視窗。

    reload window.

  10. 連線 至您的 Azure 帳戶,或如果您尚未這麼做,請連結叢集。

  11. 選取所有程序代碼,以滑鼠右鍵按下腳本編輯器,然後選取 Spark:PySpark Interactive / Synapse:Pyspark Interactive 以提交查詢。

    pyspark interactive context menu.

  12. 如果您尚未指定預設叢集,請選取叢集。 幾分鐘后, Python 互動式 結果會出現在新索引標籤中。按兩下 PySpark,將核心切換至 PySpark / Synapse Pyspark,程式代碼將會順利執行。 如果您想要切換至 Synapse Pyspark 核心,建議您停用 Azure 入口網站 中的自動設定。 否則,可能需要很長的時間才能喚醒叢集,並在第一次使用時設定 synapse 核心。 如果工具也可讓您提交程式代碼區塊,而不是使用操作功能表來提交整個腳本檔案:

    pyspark interactive python interactive window.

  13. 輸入 %%info,然後按 Shift+Enter 以檢視作業資訊(選擇性):

    pyspark interactive view job information.

此工具也支援 Spark SQL 查詢:

pyspark interactive view result.

使用 #%% 批注在 PY 檔案中執行互動式查詢

  1. 在 Py 程式代碼之前新增 #%% ,以取得筆記本體驗。

    add #%%.

  2. 按兩下 [ 執行儲存格]。 幾分鐘后,Python 互動式結果會出現在新索引標籤中。單擊 PySpark,將核心切換至 PySpark/Synapse PySpark,然後按兩下 [ 再次執行數據格 ],程式代碼將會順利執行。

    run cell results.

利用 Python 延伸模組的 IPYNB 支援

  1. 您可以從命令選擇區建立 Jupyter Notebook,或在工作區中建立新的 .ipynb 檔案。 如需詳細資訊,請參閱 在Visual StudioCode中使用 Jupyter Notebook

  2. 按兩下 [ 執行數據格 ] 按鈕,依照提示設定 預設Spark集 區(強烈建議在每次開啟筆記本之前設定預設叢集/集區),然後重 視窗。

    set the default spark pool and reload.

  3. 按兩下 [PySpark] 將核心切換至 PySpark / Synapse Pyspark,然後按兩下 [ 執行數據格],一段時間後會顯示結果。

    run ipynb results.

注意

針對 Synapse PySpark 安裝錯誤,因為其他小組不會再維護其相依性,因此也不會再維護。 如果您嘗試使用 Synapse Pyspark 互動式,請改用 Azure Synapse Analytics 。 這是一個長期的變化。

提交 PySpark 批次工作

  1. 如果已關閉,請重新開啟您稍早討論的 HDexample 資料夾。

  2. 依照先前的步驟建立新的 BatchFile.py 檔案。

  3. 將下列程式碼複製並貼到該指令檔:

    from __future__ import print_function
    import sys
    from operator import add
    from pyspark.sql import SparkSession
    if __name__ == "__main__":
        spark = SparkSession\
            .builder\
            .appName("PythonWordCount")\
            .getOrCreate()
    
        lines = spark.read.text('/HdiSamples/HdiSamples/SensorSampleData/hvac/HVAC.csv').rdd.map(lambda r: r[0])
        counts = lines.flatMap(lambda x: x.split(' '))\
                   .map(lambda x: (x, 1))\
                    .reduceByKey(add)
        output = counts.collect()
        for (word, count) in output:
            print("%s: %i" % (word, count))
        spark.stop()
    
  4. 連線 至您的 Azure 帳戶,或如果您尚未這麼做,請連結叢集。

  5. 以滑鼠右鍵按兩下腳本編輯器,然後選取 [Spark:PySpark Batch] 或 [Synapse:PySpark Batch*]。

  6. 選取叢集/Spark 集區,將您的 PySpark 作業提交至:

    Submit Python job result output.

在您提交 Python 作業之後,提交記錄便會出現在 Visual Studio Code 的 [輸出] 視窗中。 也會顯示 Spark UI URL 和 Yarn UI URL。 如果您將批次作業提交至 Apache Spark 集區,也會顯示 Spark 歷程記錄 UI URL 和 Spark 作業應用程式 UI URL。 您可以在網頁瀏覽器中開啟該 URL 來追蹤作業狀態。

與 HDInsight Identity Broker 整合 (HIB)

使用 ID Broker 連線 HDInsight ESP 叢集 (HIB)

您可以遵循一般步驟來登入 Azure 訂用帳戶,以使用 ID Broker (HIB) 連線到 HDInsight ESP 叢集。 登入之後,您會在 Azure Explorer 中看到叢集清單。 如需更多指示,請參閱 連線 HDInsight 叢集

在具有 ID Broker 的 HDInsight ESP 叢集上執行 Hive/PySpark 作業 (HIB)

若要執行 Hive 作業,您可以遵循一般步驟,使用 ID Broker (HIB) 將作業提交至 HDInsight ESP 叢集。 如需 更多指示,請參閱提交互動式 Hive 查詢和 Hive 批次腳本

若要執行互動式 PySpark 作業,您可以遵循一般步驟,使用 ID Broker (HIB) 將作業提交至 HDInsight ESP 叢集。 請參閱提交互動式 PySpark 查詢。

若要執行 PySpark 批次作業,您可以遵循一般步驟,使用 ID Broker (HIB) 將作業提交至 HDInsight ESP 叢集。 如需更多指示, 請參閱提交 PySpark 批次作業

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 組態。

  • 專案設定:

    HDInsight Apache Livy configuration.

    注意

    針對 driverMemory 和 executorMemory 設定,設定值和單位。 例如:1g 或 1024m。

  • 支援的 Livy 組態:

    POST /batches

    要求本文

    名稱 description 類型
    file 包含要執行之應用程式的檔案 路徑(必要)
    proxyUser 執行作業時要模擬的使用者 String
    className 應用程式 Java/Spark 主要類別 String
    args 應用程式的命令行自變數 字串清單
    jars 要在此會話中使用的 Jar 字串清單
    pyFiles 要用於此工作階段的 Python 檔案 字串清單
    files 要在此會話中使用的檔案 字串清單
    driverMemory 要用於驅動程式程序的記憶體數量 String
    driverCores 要用於驅動程式程序的核心數目 int
    executorMemory 要用於每個執行程式程序的記憶體數量 String
    executorCores 要用於每個執行程式的核心數目 int
    numExecutors 要針對此工作階段啟動的執行程式數目 int
    archives 要用於此工作階段的封存 字串清單
    queue 要提交至的 YARN 佇列名稱 String
    NAME 此工作階段名稱 String
    conf Spark 設定屬性 key=val 的對應

    回應本文 建立的 Batch 物件。

    NAME description 類型
    識別碼 工作階段識別碼 int
    appId 此工作階段的應用程式識別碼 String
    appInfo 詳細的應用程式資訊 key=val 的對應
    log Log lines 字串清單
    state 批次狀態 String

    注意

    當您提交文本時,指派的 Livy 組態會顯示在輸出窗格中。

從總管與 Azure HDInsight 整合

您可以透過 Azure HDInsight 總管直接預覽叢集中的 Hive 資料表:

  1. 如果您尚未這麼做,請 連線 至您的 Azure 帳戶。

  2. 從最左邊的數據行選取 Azure 圖示。

  3. 從左窗格中,展開 [AZURE:HDINSIGHT]。 列出可用的訂用帳戶和叢集。

  4. 展開叢集以檢視Hive元數據資料庫和數據表架構。

  5. 以滑鼠右鍵按兩下Hive資料表。 例如: hivesampletable。 選取預覽

    Spark & Hive for Visual Studio Code preview hive table.

  6. [ 預覽結果] 視窗隨即開啟:

    Spark & Hive for Visual Studio Code preview results window.

  • 結果面板

    您可以將整個結果儲存為 CSV、JSON 或 Excel 檔案至本機路徑,或只選取多行。

  • MESSAGES 面板

    1. 當數據表中的數據列數目大於 100 時,您會看到下列訊息:「Hive 數據表會顯示前 100 個數據列。」

    2. 當數據表中的數據列數目小於或等於 100 時,您會看到下列訊息:「Hive 數據表會顯示 60 個數據列」。

    3. 當數據表中沒有內容時,您會看到下列訊息:「0 rows are displayed for Hive table.

      注意

      在Linux中,安裝 xclip 以啟用複製資料表數據。

      Spark & Hive for Visual Studio code in Linux.

其他功能

Spark 和 Hive for Visual Studio Code 也支援下列功能:

  • IntelliSense 自動完成。 關鍵詞、方法、變數和其他程序設計元素的建議快顯。 不同的圖示代表不同類型的物件:

    Spark & Hive Tools for Visual Studio Code IntelliSense objects.

  • IntelliSense 錯誤標記。 語言服務會在Hive腳本中加上編輯錯誤底線。

  • 語法醒目提示。 語言服務會使用不同的色彩來區分變數、關鍵詞、數據類型、函式和其他程式設計元素:

    Spark & Hive Tools for Visual Studio Code syntax highlights.

僅限讀者角色

獲指派叢集只讀角色的用戶無法將作業提交至 HDInsight 叢集,也無法檢視 Hive 資料庫。 請連絡叢集管理員,將您的角色升級至 Azure 入口網站 中的 HDInsight 叢集操作員。 如果您有有效的 Ambari 認證,您可以使用下列指引手動連結叢集。

流覽 HDInsight 叢集

當您選取 Azure HDInsight 總管展開 HDInsight 叢集時,如果您有叢集的唯讀角色,系統會提示您連結叢集。 使用下列方法來連結至叢集,方法是使用您的Ambari認證。

將作業提交至 HDInsight 叢集

將作業提交至 HDInsight 叢集時,如果您在叢集的唯讀角色中,系統會提示您連結叢集。 使用下列步驟,使用Ambari認證連結至叢集。

  1. 輸入有效的Ambari用戶名稱。

  2. 輸入有效的密碼。

    Spark & Hive Tools for Visual Studio Code Username.

    Spark & Hive Tools for Visual Studio Code Password.

    注意

    您可以使用 Spark / Hive: List Cluster 檢查連結的叢集:

    Spark & Hive Tools for Visual Studio Code Reader Linked.

Azure Data Lake Storage Gen2

流覽 Data Lake 儲存體 Gen2 帳戶

選取 Azure HDInsight 總管以展開 Data Lake 儲存體 Gen2 帳戶。 如果您的 Azure 帳戶無法存取 Gen2 記憶體,系統會提示您輸入記憶體存取金鑰。 驗證存取金鑰之後,Data Lake 儲存體 Gen2 帳戶會自動展開。

使用 Data Lake 儲存體 Gen2 將作業提交至 HDInsight 叢集

使用 Data Lake 儲存體 Gen2 將作業提交至 HDInsight 叢集。 如果您的 Azure 帳戶沒有 Gen2 記憶體的寫入許可權,系統會提示您輸入記憶體存取金鑰。 驗證存取金鑰之後,作業將會成功提交。

Spark & Hive Tools for Visual Studio Code AccessKey.

注意

您可以從 Azure 入口網站 取得記憶體帳戶的存取金鑰。 如需詳細資訊,請參閱管理儲存體帳戶存取金鑰

  1. 從功能表欄,移至 [檢視>命令選擇區],然後輸入Spark / Hive:取消連結叢集。

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

  3. 請參閱輸出檢視以進行驗證。

登出

從功能表列移至 [檢視>命令選擇區],然後輸入 Azure:註銷。

已知問題

Synapse PySpark 安裝錯誤。

針對 Synapse PySpark 安裝錯誤,因為其他小組將不再維護其相依性,因此不會再維護它。 如果您嘗試使用 Synapse Pyspark 互動式,請改用 Azure Synapse Analytics 。 這是一個長期的變化。

synapse pyspark installation error.

下一步

如需示範使用 Spark 和 Hive for Visual Studio Code 的影片,請參閱 Spark 和 Hive for Visual Studio Code