使用適用於 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 (Community 版本是免費的。) 。
SSH 用戶端。 如需詳細資訊,請參閱使用 SSH 連線至 HDInsight (Apache Hadoop)。
建立 Spark Scala 應用程式
啟動 IntelliJ IDEA,然後選取 [建立新專案] 來開啟 [新增專案] 視窗。
選取左窗格中的 [Apache Spark/HDInsight]。
選取主視窗中的 [Spark 專案與範例 (Scala)]。
從 [建置工具] 下拉式清單中,選取下列其中一項:
- Maven:建立 Scala 專案精靈支援。
- SBT:可供管理相依性並建置 Scala 專案。
選取 [下一步]。
在下一個 [新增專案] 視窗中,提供下列資訊:
屬性 說明 專案名稱 輸入名稱。 此逐步解說會使用 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)。 選取 [完成]。 可能需要幾分鐘的時間,專案才會變成可用。 觀看右下角的進度。
展開您的專案,然後導覽至 src>[主要]>Scala>[範例]。 按兩下 SparkCore_WasbIOTest。
執行本機執行
在 SparkCore_WasbIOTest 指令碼,以滑鼠右鍵按一下指令碼編輯器,然後選取 [執行 SparkCore_WasbIOTest] 選項以執行本機執行。
一旦本機執行完成,您會看到輸出檔案儲存至目前的專案總管資料>預設。
我們的工具已在您執行本機執行和本機偵錯時自動設定預設本機執行設定。 開啟右上角的設定 [[HDInsight 上的 Spark] XXX],您可以看到 [HDInsight 上的 Apache Spark] 下已建立的 [[HDInsight 上的 Spark] XXX]。 切換至 [本機執行] 索引標籤。
- 環境變數:如果您已將系統環境變數 HADOOP_HOME 設定為 C:\WinUtils,它可以自動偵測,不需要手動新增。
- WinUtils.exe 位置:如果您尚未設定系統環境變數,您可以按一下此按鈕以找到位置。
- 只要選擇兩個選項之一,macOS 和 Linux 上就不需要它們。
您也可以在執行本機執行和本機偵錯之前手動設定。 在上述螢幕擷取畫面中,選取加號 (+)。 然後,選取 [Apache Spark on HDInsight] \(HDInsight 上的 Apache Spark\) 選項。 輸入 [名稱] 的資訊、要儲存的主要類別名稱,然後按一下本機執行按鈕。
執行本機偵錯
開啟 SparkCore_wasbloTest 指令碼,設定中斷點。
以滑鼠右鍵按一下指令碼編輯器,然後選取 [偵錯 '[Spark 作業]XXX'] 選項以執行本機偵錯。
執行遠端執行
瀏覽至 [執行] > [編輯組態...]。從這個功能表中,您可以建立或編輯遠端偵錯的設定。
在 [執行/偵錯組態] 對話方塊中,選取加號 (+)。 然後,選取 [Apache Spark on HDInsight] \(HDInsight 上的 Apache Spark\) 選項。
切換至 [在叢集中遠端執行] 索引標籤。輸入 [Name] \(名稱\)、[Spark cluster] \(Spark 叢集\) 和 [Main class name] \(主要類別名稱\)。 然後按一下 [進階設定 (遠端偵錯)]。 我們的工具支援使用執行程式進行偵錯。 numExecutors,預設值為 5。 您最好不要設定高於 3。
在 [進階設定 (遠端偵錯)] 元件中,選取 [啟用 Spark 遠端偵錯]。 輸入 SSH 使用者名稱,然後輸入密碼或使用私密金鑰檔案。 如果您想要執行遠端偵錯,您需要設定它。 如果您只想要使用遠端執行,則不需要設定它。
設定現在會使用您提供的名稱儲存。 若要檢視設定詳細資訊,請選取設定名稱。 若要進行變更,請選取 [Edit Configurations] \(編輯設定\)。
完成組態設定之後,您可以針對遠端叢集執行專案,或執行遠端偵錯。
按一下送出記錄未出現在左面板中的 [中斷連線] 按鈕。 不過,它仍在後端執行。
執行遠端偵錯
設定一個中斷點,然後按一下 [遠端偵錯] 圖示。 與遠端提交的差異是,必須設定 SSH 使用者名稱/密碼。
當程式執行觸及中斷點時,您會在 [偵錯工具] 窗格中看到一個 [驅動程式] 索引標籤和兩個 [執行程式] 索引標籤。 選取繼續程式圖示以繼續執行程式碼,然後到達下一個中斷點。 您必須切換到正確的 [執行程式] 索引標籤,才能尋找要偵錯的目標執行程式。 您可以在對應的 [主控台] 索引標籤中檢視執行記錄。
執行遠端偵錯和錯誤修正
設定兩個中斷點,然後選取偵錯圖示以啟動遠端偵錯程序。
程式碼會在第一個中斷點停止,然後在 [變數] 窗格中顯示參數和變數資訊。
選取繼續程式圖示以繼續。 程式碼會在第二個點停止。 正如預期,會攔截到例外狀況。
再次選取繼續程式圖示。 [HDInsight Spark Submission] \(HDInsight Spark 提交) 視窗會顯示「作業執行失敗」錯誤。
若要使用 IntelliJ 偵錯功能動態更新變數值,請再次選取 [偵錯]。 [變數] 窗格會再次出現。
以滑鼠右鍵按一下 [Debug] \(偵錯\) 索引標籤上的目標,然後選取 [Set Value] \(設定值\)。 接下來,輸入變數的新值。 然後選取 Enter 儲存值。
選取繼續程式圖示以繼續執行程式。 此時,不會攔截到任何例外狀況。 您可以看到專案成功執行而未發生任何例外狀況。
下一步
案例
- Apache Spark 和 BI:在 HDInsight 中搭配 BI 工具使用 Spark 執行互動式資料分析
- Apache Spark 和機器學習服務:在 HDInsight 中利用 HVAC 資料使用 Spark 分析建築物溫度
- Apache Spark 和機器學習服務:在 HDInsight 中使用 Spark 預測食品檢查結果
- 在 HDInsight 中使用 Apache Spark 進行網站記錄分析
建立及執行應用程式
工具和延伸模組
- 使用 Azure Toolkit for IntelliJ 為 HDInsight 叢集建立 Apache Spark 應用程式
- 使用 Azure Toolkit for IntelliJ 透過 VPN 遠端偵錯 Apache Spark 應用程式
- 使用 Azure Toolkit for Eclipse 中的 HDInsight 工具建立 Apache Spark 應用程式
- 在 HDInsight 上搭配使用 Apache Zeppelin Notebook 和 Apache Spark 叢集
- HDInsight 的 Apache Spark 叢集中 Jupyter Notebook 可用的核心
- 搭配 Jupyter Notebook 使用外部套件
- 在電腦上安裝 Jupyter 並連接到 HDInsight Spark 叢集