使用 Azure Toolkit for Eclipse 為 HDInsight 叢集建立 Apache Spark 應用程式
使用 Azure Toolkit for Eclipse 中的 HDInsight 工具來開發以 Scala 撰寫的 Apache Spark 應用程式,並直接從 Eclipse IDE 將它們提交到 Azure HDInsight Spark 叢集。 您能以數種不同的方式使用 HDInsight 工具外掛程式:
- 在 HDInsight Spark 叢集上開發並提交 Scala Spark 應用程式。
- 存取您的 Azure HDInsight Spark 叢集資源。
- 在本機開發並執行 Scala Spark 應用程式。
必要條件
HDInsight 上的 Apache Spark 叢集。 如需指示,請參閱在 Azure HDInsight 中建立 Apache Spark 叢集。
Eclipse IDE (英文)。 本文使用適用於 JAVA 開發人員的 Eclipse 整合式開發環境 (IDE)。
安裝必要的外掛程式
安裝 Azure Toolkit for Eclipse
如需安裝指示,請參閱安裝適用於 Eclipse 的 Azure 工具組。
安裝 Scala 外掛程式
當您開啟 Eclipse 時,HDInsight 工具會自動偵測您是否已安裝 Scala 外掛程式。 選取 [確定] 以繼續,然後遵循指示從 Eclipse Marketplace 安裝外掛程式。 安裝完成後請重新啟動 IDE。
確認外掛程式
瀏覽至 [幫助]> [Eclipse Marketplace]。
選取 [已安裝] 索引標籤。
您應該至少看到:
- Azure Toolkit for Eclipse <版本>。
- Scala IDE <版本>。
登入您的 Azure 訂用帳戶:
啟動 Eclipse IDE。
瀏覽至 [視窗]> [顯示檢視]>[其他]> [登入]。
從 [顯示檢視] 對話中,瀏覽至 [Azure]> [Azure Explorer] 然後點選 [開啟]。
在 [Azure Explorer] 中,以滑鼠右鍵按一下 [Azure] 節點,然後選取 [登入]。
在 [Azure 登入] 對話方塊中,選擇驗證方法,再選取 [登入] 完成登入流程。
登入之後,[您的訂閱] 對話方塊會列出與認證相關聯的所有 Azure 訂閱。 按一下 [選取] 關閉對話方塊。
在 [Azure Explorer] 中,瀏覽至 [Azure]> [HDInsight],查看您訂閱下的 HDInsight Spark 叢集。
您可以進一步展開叢集名稱節點,查看與叢集相關聯的資源 (例如,儲存體帳戶)。
連結叢集
您可以使用 Ambari 受控使用者名稱來連結一般的叢集。 同樣地,對於已加入網域的 HDInsight 叢集,您可以使用網域和使用者名稱進行連結,例如 user1@contoso.com
。
在 [Azure Explorer] 中,以滑鼠右鍵按一下 [HDInsight],然後選取 [連結叢集]。
輸入 [叢集名稱]、[使用者名稱] 和 [密碼],然後選取 [OK]。 您也可以選擇輸入 [儲存體帳戶]、[儲存體金鑰],然後選取 [儲存體容器],讓儲存體總管在左側樹狀檢視中工作
注意
如果叢集已登入 Azure 訂用帳戶並連結叢集,我們會使用連結的儲存體金鑰、使用者名稱和密碼。
針對只有鍵盤的使用者,當目前焦點位於 [儲存體金鑰] 時,請使用 [Ctrl+TAB] 將焦點移至對話的下一個欄位。
您可以在 [HDInsight] 底下看到連結的叢集。 您現在可以將應用程式提交至此連結的叢集。
您也可以從 [Azure 總管] 取消連結叢集。
設定 HDInsight Spark 叢集的 Spark Scala 專案
從 Eclipse IDE 工作區中,選取 [檔案]> [新增]> [專案]。
在 [新增專案] 精靈中,選取 [HDInsight 專案]> [HDInsight 上的 Spark (Scala)]。 然後選取 [下一步]。
在 [新增 HDInsight Scala 專案] 對話方塊中,提供下列值,然後選取 [下一步]:
- 輸入專案的名稱。
- 在 [JRE] 區域中,請確定已將 [使用執行環境 JRE] 設為 [JavaSE-1.7] 或更新版本。
- 在 [Spark 程式庫] 區域中,您可以選擇 [使用 Maven 設定 Spark SDK ] 選項。 我們的工具為 Spark SDK 和 Scala SDK 整合正確的版本。 您也可以選擇 [手動新增 Spark SDK] 選項,手動下載並新增 Spark SDK。
在下一個對話方塊中,檢閱詳細資料,然後選取 [完成]。
建立 HDInsight Spark 叢集的 Scala 應用程式
從 [封裝總管] 中,展開您稍早建立的專案。 以滑鼠右鍵按一下 [src],選取 [新增]> [其他]。
在 [選取精靈] 對話方塊中,選取 [Scala 精靈]> [Scala 物件]。 然後選取 [下一步]。
在 [建立新檔案] 對話方塊中輸入物件的名稱,然後選取 [完成]。 之後會開啟文字編輯器。
在文字編輯器中,以下列程式碼取代目前的內容:
import org.apache.spark.SparkConf import org.apache.spark.SparkContext object MyClusterApp{ def main (arg: Array[String]): Unit = { val conf = new SparkConf().setAppName("MyClusterApp") val sc = new SparkContext(conf) val rdd = sc.textFile("wasbs:///HdiSamples/HdiSamples/SensorSampleData/hvac/HVAC.csv") //find the rows that have only one digit in the seventh column in the CSV val rdd1 = rdd.filter(s => s.split(",")(6).length() == 1) rdd1.saveAsTextFile("wasbs:///HVACOut") } }
在 HDInsight Spark 叢集上執行應用程式:
a. 從 [封裝總管] 中,以滑鼠右鍵按一下專案名稱,然後選取 [將 Spark 應用程式提交給 HDInsight]。
b. 在 [提交 Spark] 對話方塊中提供下列值,然後選取 [提交]:
針對 叢集名稱,選取您要在其上執行應用程式的 HDInsight Spark 叢集。
從 Eclipse 專案中選取構件,或從硬碟中選取一個。 預設值取決於您在套件總管中以滑鼠右鍵按一下的項目。
在 [主要類別名稱] 下拉式清單中,提交精靈會顯示您的所有物件名稱。 選取或輸入您需要執行的物件名稱。 如果您從硬碟選取構件,就必須手動輸入主要的類別名稱。
因為此範例中的應用程式碼不需要任何命令列引數或參考 JAR 或檔案,所以您可以將其餘的文字方塊保留空白。
[Spark Submission (提交 Spark)] 索引標籤應會開始顯示進度。 您可以選取 [提交 Spark] 視窗中的紅色按鈕,就能將應用程式停止。 您也可以選取全球圖示 (以映像中的藍色方塊表示),檢視此特定應用程式執行的記錄。
使用適用於 Eclipse 的 Azure 工具組中的 HDInsight 工具來存取和管理 HDInsight Spark 叢集
您可以使用 HDInsight 工具來執行各種作業,包括存取作業輸出。
存取作業檢視
在 [Azure Explorer] 中,依序展開 [HDInsight] 和 Spark 叢集名稱,然後選取 [作業]。
選取 [作業] 節點。 如果 Java 版本低於 1.8,HDInsight 工具會自動提醒您安裝 E(fx)clipse 外掛程式。 選取 [確定] 繼續作業,然後遵循精靈安裝 Eclipse Marketplace 並重新啟動 Eclipse。
從 [作業] 節點開啟 [作業] 檢視。 在右窗格中,[Spark 作業檢視] 索引標籤會顯示已在叢集上執行的所有應用程式。 選取您想要查看更多詳細資料的應用程式名稱。
然後您可以採取下列任何動作:
將滑鼠停留於作業圖表。 它會顯示關於執行中作業的基本資訊。 選取作業圖表,就可以看到每項作業產生的階段和資訊。
選取 [記錄] 索引標籤可檢視經常使用的記錄 (包括「驅動程式 Stderr」、「驅動程式 Stdout」和「目錄資訊」)。
選取視窗頂端的超連結,在應用程式層級開啟 Spark 歷程記錄 UI 和 Apache Hadoop YARN UI。
存取叢集的儲存體容器
在 [Azure Explorer] 中展開 [HDInsight] 根節點,查看可用的 HDInsight Spark 叢集清單。
展開叢集名稱以查看叢集的儲存體帳戶和預設儲存體容器。
選取與叢集相關聯的儲存體容器名稱。 在右窗格中,按兩下 HVACOut 資料夾。 開啟其中一個 part- 檔案,可查看應用程式的輸出。
存取 Spark 歷程記錄伺服器
在 [Azure Explorer] 中,以滑鼠右鍵按一下您的 Spark 叢集名稱,然後選取 [開啟 Spark 歷程記錄 UI]。 出現提示時,輸入叢集的系統管理員認證。 在佈建叢集時,您已指定這些項目。
在 [Spark 歷程記錄伺服器] 儀表板中,您可以使用應用程式名稱,尋找您剛完成執行的應用程式。 在上述程式碼中,您可以使用
val conf = new SparkConf().setAppName("MyClusterApp")
來設定應用程式名稱。 因此,Spark 應用程式名稱為 MyClusterApp。
啟動 Apache Ambari 入口網站
在 [Azure Explorer] 中,以滑鼠右鍵按一下您的 Spark 叢集名稱,然後選取 [開啟叢集管理入口網站 (Ambari)]。
出現提示時,輸入叢集的系統管理員認證。 在佈建叢集時,您已指定這些項目。
管理 Azure 訂用帳戶
根據預設,Azure 工具組中適用於 Eclipse 的 HDInsight 工具會列出您所有 Azure 訂用帳戶中的 Spark 叢集。 如有必要,您可以指定要存取其叢集的訂用帳戶。
在 [Azure Explorer] 中,以滑鼠右鍵按一下 [Azure] 根節點,然後選取 [管理訂用帳戶]。
在對話方塊中,清除您不需要存取的訂用帳戶核取方塊,然後選取 [關閉]。 如果您想要登出 Azure 訂用帳戶,也可以選取 [登出]。
在本機執行 Spark Scala 應用程式
您可以使用適用於 Eclipse 的 Azure 工具組中之 HDInsight 工具,在工作站上本機執行 Spark Scala 應用程式。 一般而言,這些應用程式不需要存取叢集資源 (例如儲存體容器),而且您可在本機上執行並測試。
必要條件
在 Windows 電腦上執行本機 Spark Scala 應用程式時,可能會發生如 SPARK-2356 中所述的例外狀況。 發生這個例外狀況是因為 Windows 中遺失 WinUtils.exe。
若要解決這個錯誤,必須將 Winutils.exe 加到 C:\WinUtils\bin 之類的位置,然後新增 HADOOP_HOME 環境變數,並將變數的值設為 C\WinUtils。
執行本機 Spark Scala 應用程式
啟動 Eclipse,然後建立專案。 在 [新增專案] 對話方塊中選取下列選項,然後選取 [下一步]。
在 [新增專案] 精靈中,選取 [HDInsight 專案]> [HDInsight 上的 Spark 本機執行範例 (Scala)]。 然後選取 [下一步]。
若要提供專案的詳細資料,請遵循稍早的設定 HDInsight Spark 叢集的 Spark Scala 專案一節中的步驟 3 到 6。
範本會在 src 資料夾下方新增可在電腦本機執行的程式碼範例 (LogQuery)。
以滑鼠右鍵按一下 [LogQuery.scala],然後選取 [執行身分]> [1 Scala 應用程式]。 在 [主控台] 索引標籤上隨即顯示像這樣的輸出:
僅限讀取者角色
使用者使用僅限讀取者角色權限將作業提交至叢集時,必須要有 Ambari 認證。
從操作功能表連結叢集
使用僅限讀取者角色帳戶登入。
在 [Azure Explorer] 中展開 [HDInsight],檢視您訂用帳戶中的 HDInsight 叢集。 標示為 "Role:Reader" 的叢集僅具有僅限讀取者角色權限。
以滑鼠右鍵按一下具有僅限讀取者角色權限的叢集。 從操作功能表中選取 [連結此叢集],以連結叢集。 輸入 Ambari 使用者名稱和密碼。
如果已成功連結叢集,HDInsight 將會重新整理。 叢集的階段會成為「已連結」。
藉由展開作業節點來連結叢集
按一下 [作業] 節點,[叢集作業存取遭拒] 視窗隨即快顯。
按一下 [連結此叢集] 以連結叢集。
從 [提交 Spark] 視窗連結叢集
建立 HDInsight 專案。
使用滑鼠右鍵按一下套件。 選取 [將 Spark 應用程式提交給 HDInsight]。
選取叢集,此叢集必須具有叢集名稱的僅限讀取者角色權限。 警告訊息會顯示出來。您可以按一下 [連結此叢集] 來連結叢集。
檢視儲存體帳戶
針對具有僅限讀取者角色權限的叢集,按一下 [儲存體帳戶] 節點,[儲存體存取遭拒] 視窗隨即快顯。
針對連結的叢集,按一下 [儲存體帳戶] 節點,[儲存體存取遭拒] 視窗隨即快顯。
已知的問題
使用連結叢集時,建議您提供儲存體認證。
提交工作有兩種模式。 如果提供儲存體認證,將使用批次模式提交工作。 否則,將使用互動模式。 如果叢集忙碌,您可能會收到以下錯誤。
另請參閱
案例
- Apache Spark 和 BI:在 HDInsight 中搭配 BI 工具使用 Spark 執行互動式資料分析
- Apache Spark 和機器學習服務:使用 HDInsight 中的 Spark,使用 HVAC 資料來分析建築物溫度
- Apache Spark 和機器學習服務:在 HDInsight 中使用 Spark 預測食品檢查結果
- 在 HDInsight 中使用 Apache Spark 進行網站記錄分析
建立和執行應用程式
工具和延伸模組
- 使用適用於 IntelliJ 的 Azure 工具組中來建立和提交 Spark Scala 應用程式
- 使用 Azure Toolkit for IntelliJ 透過 VPN 遠端偵錯 Apache Spark 應用程式
- 使用 Azure Toolkit for IntelliJ 透過 SSH 遠端偵錯 Apache Spark 應用程式
- 在 HDInsight 上搭配使用 Apache Zeppelin Notebook 和 Apache Spark 叢集
- HDInsight Apache Spark 叢集中 Jupyter Notebook 的可用核心
- 搭配 Jupyter Notebook 使用外部套件
- 在電腦上安裝 Jupyter 並連接到 HDInsight Spark 叢集