分享方式:


使用適用於 Eclipse 的 Azure 工具組建立 HDInsight 叢集的 Apache Spark 應用程式

使用適用於 Eclipse 的 Azure 工具組中的 HDInsight 工具,直接從 Eclipse IDE 開發以 Scala 撰寫的 Apache Spark 應用程式,並將其提交至 Azure HDInsight Spark 叢集。 您可以透過幾種不同的方式使用 HDInsight 工具外掛程式:

  • 在 HDInsight Spark 叢集上開發和提交 Scala Spark 應用程式。
  • 若要存取您的 Azure HDInsight Spark 叢集資源。
  • 在本機開發和執行 Scala Spark 應用程式。

必要條件

安裝必要的外掛程式

安裝 Azure Toolkit for Eclipse

如需安裝指示,請參閱 安裝適用於 Eclipse 的 Azure 工具組。

安裝 Scala 外掛程式

當您開啟 Eclipse 時,HDInsight 工具會自動偵測您是否已安裝 Scala 外掛程式。 選取 [ 確定 ] 以繼續,然後依照指示從 Eclipse Marketplace 安裝外掛程式。 安裝完成之後,請重新啟動IDE。

Automatic installation of the Scala plug-in.

確認外掛程式

  1. 流覽至 [說明>Eclipse Marketplace...]。

  2. 選取 [已安裝] 索引標籤。

  3. 您應該至少會看到:

    • 適用於 Eclipse <的 Azure 工具組版本>。
    • Scala IDE <版本>。

登入您的 Azure 訂用帳戶

  1. 啟動 Eclipse IDE。

  2. 瀏覽至視窗>顯示檢視>其他...>Sign In...

  3. 從 [顯示檢視] 對話框,流覽至 [Azure Azure>總管],然後選取 [開啟]。

    Apache Spark Eclipse show view.

  4. Azure Explorer,以滑鼠右鍵按兩下 Azure 節點,然後選取 [ 登入]。

  5. 在 [ Azure 登入 ] 對話方塊中,選擇驗證方法、選取 [登入],然後完成登入程式。

    Apache Spark Eclipse Azure Sign.

  6. 登入之後,[ 您的訂用帳戶 ] 對話框會列出與認證相關聯的所有 Azure 訂用帳戶。 按 [選取 ] 關閉對話框。

    Select Subscriptions dialog box.

  7. Azure Explorer 瀏覽至 Azure>HDInsight,以查看訂用帳戶底下的 HDInsight Spark 叢集。

    HDInsight Spark clusters in Azure Explorer3.

  8. 您可以進一步展開叢集名稱節點,以查看與叢集相關聯的資源(例如記憶體帳戶)。

    Expanding a cluster name to see resources.

您可以使用Ambari受控使用者名稱連結一般叢集。 同樣地,針對已加入網域的 HDInsight 叢集,您可以使用網域和使用者名稱連結,例如 user1@contoso.com

  1. [Azure 總管] 中,以滑鼠右鍵按兩下 [HDInsight],然後選取 [ 鏈接叢集]。

    Azure Explorer link cluster menu.

  2. 輸入 [叢集名稱]、 [用戶名稱] 和 [密碼],然後選取 [ 確定]。 或者,輸入 儲存體 帳戶,儲存體 金鑰,然後選取 儲存體 [容器] 以在左側樹視圖中運作

    Link New HDInsight cluster dialog.

    注意

    如果叢集同時登入 Azure 訂用帳戶和連結叢集,我們會使用連結的記憶體密鑰、使用者名稱和密碼。 Azure Explorer storage accounts.

    只有鍵盤使用者,當目前的焦點位於 儲存體 鍵時,您必須使用 Ctrl+TAB 將焦點放在對話框中的下一個字段。

  3. 您可以在 HDInsight 底下看到連結的叢集。 現在您可以將應用程式提交至此連結的叢集。

    Azure Explorer hdi linked cluster.

  4. 您也可以從 Azure Explorer 取消連結叢集。

    Azure Explorer unlinked cluster.

設定 HDInsight Spark 叢集的 Spark Scala 專案

  1. 從 Eclipse IDE 工作區中,選取 [檔案>新>專案...]。

  2. 在 [新增專案精靈] 中,選取 [HDInsight 上的 HDInsight 專案>Spark] [Scala]。 然後選取下一步

    Selecting the Spark on HDInsight (Scala) project.

  3. 在 [ 新增 HDInsight Scala 專案 ] 對話框中,提供下列值,然後選取 [ 下一步]:

    • 輸入專案的 [名稱] 。
    • JRE 區域中,確定 [使用執行環境 JRE ] 設定為 JavaSE-1.7 或更新版本。
    • [Spark 連結庫 ] 區域中,您可以選擇 [ 使用 Maven 設定 Spark SDK ] 選項。 此工具整合了適用於 Spark SDK 和 Scala SDK 的適當版本。 您也可以手動選擇 [ 新增 Spark SDK] 選項、下載並手動新增 Spark SDK。

    New HDInsight Scala Project dialog box.

  4. 在下一個對話框中,檢閱詳細數據,然後選取 [ 完成]。

建立 HDInsight Spark 叢集的 Scala 應用程式

  1. [套件總管] 展開您稍早建立的專案。 以滑鼠右鍵按兩下 src,選取 [新增>其他...]。

  2. 在 [選取精靈] 對話框中,選取 [Scala Wizards>Scala 物件]。 然後選取下一步

    Select a wizard Create a Scala Object.

  3. 在 [ 建立新檔案 ] 對話框中,輸入對象的名稱,然後選取 [ 完成]。 文本編輯器隨即開啟。

    New File Wizard Create New File.

  4. 在文字編輯器中,以下列程序代碼取代目前的內容:

    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")
        }
    }
    
  5. 在 HDInsight Spark 叢集上執行應用程式:

    a. 在 [套件總管] 中,以滑鼠右鍵按兩下專案名稱,然後選取 [ 將Spark 應用程式提交至 HDInsight]。

    b. 在 [ Spark 提交 ] 對話框中,提供下列值,然後選取 [ 提交]:

    • 針對 [ 叢集名稱],選取您要在其中執行應用程式的 HDInsight Spark 叢集。

    • 從 Eclipse 項目中選取成品,或從硬碟中選取一個成品。 預設值取決於您以滑鼠右鍵按兩下 [套件總管] 的專案。

    • 在 [ 主要類別名稱 ] 下拉式清單中,提交精靈會顯示專案中的所有物件名稱。 選取或輸入您想要執行的其中一個。 如果您從硬碟選取成品,則必須手動輸入主要類別名稱。

    • 由於此範例中的應用程式程式代碼不需要任何命令行自變數或參考 JAR 或檔案,因此您可以將其餘的文字框保留空白。

      Apache Spark Submission dialog box.

  6. [Spark 提交] 索引標籤應該會開始顯示進度。 您可以選擇[Spark 提交] 視窗中的紅色按鈕來停止應用程式。 您也可以選取地球圖示來檢視此特定應用程式執行的記錄(以影像中的藍色方塊表示)。

    Apache Spark Submission window.

在 Azure Toolkit for Eclipse 中使用 HDInsight 工具存取和管理 HDInsight Spark 叢集

您可以使用 HDInsight 工具來執行各種作業,包括存取作業輸出。

存取作業檢視

  1. Azure Explorer 中,展開 [HDInsight],然後展開 [Spark 叢集名稱],然後選取 [作業]。

    Azure Explorer Eclipse job view node.

  2. 選取 [ 作業] 節點。 如果 Java 版本低於 1.8,HDInsight 工具會自動提醒您安裝 E(fx)clipse 外掛程式。 選取 [ 確定 ] 以繼續,然後遵循精靈從 Eclipse Marketplace 安裝它,然後重新啟動 Eclipse。

    Install missing plugin E(fx)clipse.

  3. [作業 ] 節點開啟 [作業檢視]。 在右窗格中,[ Spark 作業檢視 ] 索引卷標會顯示叢集上執行的所有應用程式。 選取您想要查看詳細資料的應用程式名稱。

    Apache Eclipse view job logs details.

    然後,您可以採取下列任何動作:

    • 將滑鼠停留在作業圖形上。 它會顯示執行中作業的基本資訊。 選取作業圖表,您可以看到每個作業產生的階段和資訊。

      Apache Spark job graph stage info.

    • 選取 [記錄] 索引標籤以檢視常用記錄,包括驅動程式 StderrDriver Stdout目錄資訊

      Apache Spark Eclipse job log info.

    • 選取視窗頂端的超連結,以開啟 Spark 歷程記錄 UI 和 Apache Hadoop YARN UI(應用層級)。

存取叢集的記憶體容器

  1. 在 Azure Explorer 中 ,展開 HDInsight 根節點,以查看可用的 HDInsight Spark 叢集清單。

  2. 展開叢集名稱,以查看記憶體帳戶和叢集的預設記憶體容器。

    Storage account and default storage container.

  3. 選取與叢集相關聯的記憶體容器名稱。 在右窗格中,按兩下 HVACOut 資料夾。 開啟其中 一個元件 檔案,以查看應用程式的輸出。

存取 Spark 歷程記錄伺服器

  1. 在 Azure 檔案總管中,以滑鼠右鍵按兩下 Spark 叢集名稱,然後選取 [ 開啟 Spark 歷程記錄 UI]。 出現提示時,請輸入叢集的管理員認證。 您在布建叢集時指定了這些專案。

  2. 在 Spark 歷程記錄伺服器儀錶板中,您可以使用應用程式名稱來尋找您剛完成執行的應用程式。 在上述程式代碼中,您會使用 val conf = new SparkConf().setAppName("MyClusterApp")來設定應用程式名稱。 因此,您的Spark應用程式名稱為 MyClusterApp

啟動 Apache Ambari 入口網站

  1. 在 Azure 檔案總管中,以滑鼠右鍵按下您的 Spark 叢集名稱,然後選取 [開啟叢集管理入口網站] [Ambari]。

  2. 出現提示時,請輸入叢集的管理員認證。 您在布建叢集時指定了這些專案。

管理 Azure 訂用帳戶

根據預設,適用於 Eclipse 的 Azure 工具組中的 HDInsight 工具會列出您所有 Azure 訂用帳戶中的 Spark 叢集。 如有必要,您可以指定要存取叢集的訂用帳戶。

  1. 在 Azure Explorer 中,以滑鼠右鍵按兩下 Azure 根節點,然後選取 [ 管理訂用帳戶]。

  2. 在對話框中,清除您不想存取之訂用帳戶的複選框,然後選取 [ 關閉]。 如果您想要註銷 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 應用程式

  1. 啟動 Eclipse 並建立專案。 在 [ 新增專案 ] 對話框中,進行下列選擇,然後選取 [ 下一步]。

  2. 在 [新增專案精靈] 中,選取 HDInsight 本機執行範例 (Scala) 上的 HDInsight 專案>Spark。 然後選取下一步

    New project selects a wizard dialog.

  3. 若要提供專案詳細數據,請遵循先前一節 中針對 HDInsight Spark 叢集設定 Spark Scala 專案的步驟 3 到 6。

  4. 範本會在 src 資料夾下新增範例程式代碼 (LogQuery),您可以在電腦上本機執行。

    Location of LogQuery local scala application.

  5. 以滑鼠右鍵按兩下 [LogQuery.scala],然後選取 [執行為>1 Scala 應用程式]。 類似這樣的輸出會出現在 [ 主控台] 索引標籤上:

    Spark application local run result.

僅限讀者角色

當使用者將作業提交至具有唯讀角色許可權的叢集時,需要Ambari認證。

  1. 使用僅限讀取者角色帳戶登入。

  2. Azure Explorer 展開 [HDInsight ] 以檢視訂用帳戶中的 HDInsight 叢集。 標示 為「角色:讀取者」的 叢集只有讀者專用角色許可權。

    HDInsight Spark clusters in Azure Explorer role reader.

  3. 以滑鼠右鍵按兩下具有唯讀角色許可權的叢集。 從操作功能表選取 [ 連結此叢集 ] 以連結叢集。 輸入Ambari使用者名稱和密碼。

    HDInsight Spark clusters in Azure Explorer link.

  4. 如果叢集已成功連結,則會重新整理 HDInsight。 叢集的階段將會連結。

    HDInsight Spark clusters in Azure Explorer linked.

  1. 按兩下 [作業] 節點、[叢集作業存取遭拒] 視窗彈出視窗。

  2. 按兩下 [ 連結此叢集] 連結叢集

    HDInsight Spark clusters in Azure Explorer9.

  1. 建立 HDInsight 專案。

  2. 以滑鼠右鍵按兩下套件。 然後選取 [ 將Spark 應用程式提交至 HDInsight]。

    HDInsight Spark clusters in Azure Explorer submit.

  3. 選取具有叢集名稱唯讀角色許可權的叢集。 警告訊息顯示出來。您可以按下 [ 連結此叢集] 連結叢集

    HDInsight Spark clusters in Azure Explorer link this.

檢視 儲存體 帳戶

  • 針對具有唯讀角色許可權的叢集,按兩下 [儲存體 帳戶] 節點,儲存體 [拒絕存取] 視窗彈出視窗。

    HDInsight Spark clusters in Azure Explorer storage.

    HDInsight Spark clusters in Azure Explorer denied.

  • 針對連結的叢集,按兩下 [儲存體 帳戶] 節點,儲存體 [拒絕存取] 視窗彈出視窗。

    HDInsight Spark clusters in Azure Explorer denied2.

已知問題

使用 連結 A 叢集時,建議您提供記憶體認證。

link cluster with storage credential eclipses.

提交作業有兩種模式。 如果提供記憶體認證,則會使用批次模式來提交作業。 否則,將會使用互動式模式。 如果叢集忙碌中,您可能會收到下列錯誤。

eclipse get error when cluster busy.

eclipse get error when cluster busy yarn.

另請參閱

案例

建立和執行應用程式

工具和延伸模組

管理資源