使用適用於 IntelliJ 的 Azure 工具組透過 SSH 對 HDInsight 叢集上的 Apache Spark 應用程式進行偵錯

本文提供如何在 Azure Toolkit for IntelliJ 中使用 HDInsight 工具,在 HDInsight 叢集上遠端偵錯應用程式的逐步指引。

必要條件

  • HDInsight 上的 Apache Spark 叢集。 請參閱 建立 Apache Spark 叢集

  • 針對 Windows 使用者:當您在 Windows 電腦上執行本機 Spark Scala 應用程式時,可能會發生例外狀況,如 SPARK-2356 中所述。 發生例外狀況的原因是 Windows 上遺漏WinUtils.exe。

    若要解決此錯誤,請將Winutils.exe下載到 C:\WinUtils\bin 之類的位置。 然後,將環境變數 新增HADOOP_HOME,並將變數的值設定為 C:\WinUtils

  • IntelliJ IDEA (社群版本是免費的。

  • 適用於 IntelliJ 的 Azure 工具組。

  • IntelliJ 的 Scala 外掛程式。

  • SSH 用戶端。 如需詳細資訊,請參閱使用 SSH 連線至 HDInsight (Apache Hadoop)

建立Spark Scala 應用程式

  1. 啟動 IntelliJ IDEA,然後選取 [ 建立新專案 ] 以開啟 [ 新增專案 ] 視窗。

  2. 從左窗格中選取 [Apache Spark/HDInsight ]。

  3. 從主視窗中選取 [Spark 專案與範例][Scala ]。

  4. 從 [ 建置工具 ] 下拉式清單中,選取下列其中一項:

    • 適用於 Scala 專案建立精靈的 Maven 支援。
    • 用於管理 Scala 專案的相依性和建置的 SBT

    Intellij Create New Project Spark.

  5. 選取 [下一步]。

  6. 在下一個 [新增專案] 視窗中,提供下列資訊:

    屬性 說明
    專案名稱 輸入名稱。 此逐步解說會使用 myApp
    專案位置 輸入儲存專案所需的位置。
    專案 SDK 如果空白,請選取 [ 新增... ],然後流覽至您的 JDK。
    Spark 版本 建立精靈會整合 Spark SDK 和 Scala SDK 的適當版本。 如果 Spark 叢集版本早於 2.0,請選取 [Spark 1.x] 。 否則,請選取 [Spark 2.x.]。 此範例使用Spark 2.3.0 (Scala 2.11.8)。

    Intellij New Project select Spark version.

  7. 選取 [完成]。 可能需要幾分鐘的時間,專案才會可供使用。 觀看右下角的進度。

  8. 展開您的專案,然後流覽至 src> 主要> Scala> 範例。 按兩下 SparkCore_WasbIOTest

執行本機執行

  1. 從SparkCore_WasbIOTest腳本中,以滑鼠右鍵按下腳本編輯器,然後選取 [執行 'SparkCore_WasbIOTest' 選項來執行本機執行。

  2. 在本機執行完成之後,您可以看到輸出檔儲存到您目前的專案總管數據>預設值。

    Intellij Project local run result.

  3. 當您執行本機執行和本機偵錯時,我們的工具會自動設定預設的本機執行組態。 開啟右上角的 [HDInsight 上的 Spark] XXX 組態,您可以看到 [HDInsight 上的 Spark] XXX 已在 HDInsight 上的 Apache Spark 下建立。 切換至 [ 本機執行] 索引標籤。

    Intellij Run debug configurations local run.

    • 環境變數:如果您已經將系統環境變數 HADOOP_HOME 設定為 C:\WinUtils,它可以自動偵測不需要手動新增。
    • WinUtils.exe位置:如果您尚未設定系統環境變數,您可以按下其按鈕來尋找位置。
    • 只要選擇兩個選項之一,在 MacOS 和 Linux 上就不需要它們。
  4. 您也可以在執行本機執行和本機偵錯之前手動設定組態。 在上述螢幕快照中,選取加號 (+)。 然後選取 [HDInsight 上的 Apache Spark] 選項。 輸入 [ 名稱][主要類別名稱 ] 以儲存的信息,然後按兩下 [本機執行] 按鈕。

執行本機偵錯

  1. 開啟SparkCore_wasbloTest腳本,設定斷點。

  2. 以滑鼠右鍵按下腳本編輯器,然後選取 [偵錯 HDInsight 上的 Spark]XXX] 選項來執行本機偵錯。

執行遠端執行

  1. 流覽至 [執行>編輯組態...]。在此功能表中,您可以建立或編輯遠端偵錯的組態。

  2. 在 [ 執行/偵錯組態 ] 對話框中,選取加號 (+)。 然後選取 [HDInsight 上的 Apache Spark] 選項。

    Intellij Add new configuration.

  3. 切換至 [在叢集中遠端執行] 索引標籤。輸入 [名稱]、[Spark 叢集] 和 [主要類別名稱] 的資訊。 然後按下 [進階設定] [遠端偵錯]。 我們的工具支援使用執行程序進行偵錯。 numExectors,預設值為 5。 您最好不要設定高於 3。

    Intellij Run debug configurations.

  4. 在 [ 進階設定][遠端偵錯] 元件中 ,選取 [ 啟用Spark 遠端偵錯]。 輸入 SSH 使用者名稱,然後輸入密碼或使用私鑰檔案。 如果您想要執行遠端偵錯,您必須加以設定。 如果您只想使用遠端執行,就不需要設定它。

    Intellij Advanced Configuration enable spark remote debug.

  5. 設定現在會以您提供的名稱儲存。 若要檢視組態詳細數據,請選取組態名稱。 若要進行變更,請選取 [ 編輯組態]。

  6. 完成組態設定之後,您可以對遠端叢集執行專案,或執行遠端偵錯。

    Intellij Debug Remote Spark Job Remote run button.

  7. 按兩下提交記錄未出現在左面板中的 [ 中斷連線 ] 按鈕。 不過,它仍在後端執行。

    Intellij Debug Remote Spark Job Remote run result.

執行遠端偵錯

  1. 設定斷點,然後按兩下 [遠端偵錯] 圖示。 遠端提交的差異在於必須設定SSH使用者名稱/密碼。

    Intellij Debug Remote Spark Job debug icon.

  2. 當程式執行到達斷點時,您會在 [調試程式] 窗格中看到 [驅動程式] 索引卷標和兩執行程式索引標籤。 選取 [ 繼續程式 ] 圖示以繼續執行程式碼,然後到達下一個斷點。 您必須切換至正確的 執行程式 索引標籤,才能尋找要偵錯的目標執行程式。 您可以在對應的 [主控台 ] 索引標籤上檢視執行記錄。

    Intellij Debug Remote Spark Job Debugging tab.

執行遠端偵錯和錯誤修正

  1. 設定兩個斷點,然後選取 [ 錯] 圖示以啟動遠端偵錯程式。

  2. 程序代碼會在第一個斷點停止,參數和變數資訊會顯示在 [變數 ] 窗格中。

  3. 選取繼續 程序 圖示以繼續。 程序代碼會在第二個點停止。 例外狀況會如預期般攔截。

    Intellij Debug Remote Spark Job throw error.

  4. 再次選取 [ 繼續程式] 圖示。 HDInsight Spark 提交 視窗會顯示「作業執行失敗」錯誤。

    Intellij Debug Remote Spark Job Error submission.

  5. 若要使用 IntelliJ 偵錯功能動態更新變數值,請再次選取 [ 錯]。 [ 變數] 窗格會再次出現。

  6. 以滑鼠右鍵按兩下 [偵錯] 索引標籤上的目標,然後選取 [設定值]。 接下來,輸入變數的新值。 然後選取 Enter 以儲存值。

    Intellij Debug Remote Spark Job set value.

  7. 選取繼續 程序 圖示以繼續執行程式。 這次,不會攔截任何例外狀況。 您可以看到專案順利執行,而不會有任何例外狀況。

    Intellij Debug Remote Spark Job without exception.

下一步

案例

建立及執行應用程式

工具和延伸模組

管理資源