使用 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 應用程式。

必要條件

安裝必要的外掛程式

安裝 Azure Toolkit for Eclipse

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

安裝 Scala 外掛程式

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

自動安裝 Scala 外掛程式

確認外掛程式

  1. 瀏覽至 [幫助]> [Eclipse Marketplace]。

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

  3. 您應該至少看到:

    • Azure Toolkit for Eclipse <版本>。
    • Scala IDE <版本>。

登入您的 Azure 訂用帳戶:

  1. 啟動 Eclipse IDE。

  2. 瀏覽至 [視窗]> [顯示檢視]>[其他]> [登入]。

  3. 從 [顯示檢視] 對話中,瀏覽至 [Azure]> [Azure Explorer] 然後點選 [開啟]。

    Apache Spark Eclipse 顯示檢視

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

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

    Apache Spark Eclipse Azure 登入

  6. 登入之後,[您的訂閱] 對話方塊會列出與認證相關聯的所有 Azure 訂閱。 按一下 [選取] 關閉對話方塊。

    [選取訂用帳戶] 對話方塊

  7. 在 [Azure Explorer] 中,瀏覽至 [Azure]> [HDInsight],查看您訂閱下的 HDInsight Spark 叢集。

    Azure Explorer3 中的 HDInsight Spark 叢集

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

    展開叢集名稱以查看資源

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

  1. 在 [Azure Explorer] 中,以滑鼠右鍵按一下 [HDInsight],然後選取 [連結叢集]。

    Azure Explorer 連結叢集功能表

  2. 輸入 [叢集名稱]、[使用者名稱] 和 [密碼],然後選取 [OK]。 您也可以選擇輸入 [儲存體帳戶]、[儲存體金鑰],然後選取 [儲存體容器],讓儲存體總管在左側樹狀檢視中工作

    連結新 HDInsight 叢集對話方塊

    注意

    如果叢集已登入 Azure 訂用帳戶並連結叢集,我們會使用連結的儲存體金鑰、使用者名稱和密碼。 Azure Explorer 儲存體帳戶

    針對只有鍵盤的使用者,當目前焦點位於 [儲存體金鑰] 時,請使用 [Ctrl+TAB] 將焦點移至對話的下一個欄位。

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

    Azure Explorer HDI 連結叢集

  4. 您也可以從 [Azure 總管] 取消連結叢集。

    Azure Explorer 取消連結的叢集

設定 HDInsight Spark 叢集的 Spark Scala 專案

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

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

    選取 Spark HDInsight (Scala) 專案

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

    • 輸入專案的名稱。
    • 在 [JRE] 區域中,請確定已將 [使用執行環境 JRE] 設為 [JavaSE-1.7] 或更新版本。
    • 在 [Spark 程式庫] 區域中,您可以選擇 [使用 Maven 設定 Spark SDK ] 選項。 我們的工具為 Spark SDK 和 Scala SDK 整合正確的版本。 您也可以選擇 [手動新增 Spark SDK] 選項,手動下載並新增 Spark SDK。

    [新增 HDInsight Scala 專案] 對話方塊

  4. 在下一個對話方塊中,檢閱詳細資料,然後選取 [完成]。

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

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

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

    選取精靈:建立 Scala 物件

  3. 在 [建立新檔案] 對話方塊中輸入物件的名稱,然後選取 [完成]。 之後會開啟文字編輯器。

    新檔案精靈:建立新檔案

  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 提交對話方塊

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

    Apache Spark 提交視窗

使用適用於 Eclipse 的 Azure 工具組中的 HDInsight 工具來存取和管理 HDInsight Spark 叢集

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

存取作業檢視

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

    Azure Explorer Eclipse 作業檢視節點

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

    安裝遺漏的外掛程式 E(fx)clipse

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

    Apache Eclipse 檢視作業記錄詳細資料

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

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

      Apache Spark 作業圖表階段資訊

    • 選取 [記錄] 索引標籤可檢視經常使用的記錄 (包括「驅動程式 Stderr」、「驅動程式 Stdout」和「目錄資訊」)。

      Apache Spark Eclipse 作業記錄資訊

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

存取叢集的儲存體容器

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

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

    儲存體帳戶和預設儲存體容器

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

存取 Spark 歷程記錄伺服器

  1. 在 [Azure Explorer] 中,以滑鼠右鍵按一下您的 Spark 叢集名稱,然後選取 [開啟 Spark 歷程記錄 UI]。 出現提示時,輸入叢集的系統管理員認證。 在佈建叢集時,您已指定這些項目。

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

啟動 Apache Ambari 入口網站

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

  2. 出現提示時,輸入叢集的系統管理員認證。 在佈建叢集時,您已指定這些項目。

管理 Azure 訂用帳戶

根據預設,Azure 工具組中適用於 Eclipse 的 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 專案]> [HDInsight 上的 Spark 本機執行範例 (Scala)]。 然後選取 [下一步]。

    新增專案:選取精靈對話方塊

  3. 若要提供專案的詳細資料,請遵循稍早的設定 HDInsight Spark 叢集的 Spark Scala 專案一節中的步驟 3 到 6。

  4. 範本會在 src 資料夾下方新增可在電腦本機執行的程式碼範例 (LogQuery)。

    LogQuery 本機 Scala 應用程式的位置

  5. 以滑鼠右鍵按一下 [LogQuery.scala],然後選取 [執行身分]> [1 Scala 應用程式]。 在 [主控台] 索引標籤上隨即顯示像這樣的輸出:

    Spark 應用程式本機執行結果

僅限讀取者角色

使用者使用僅限讀取者角色權限將作業提交至叢集時,必須要有 Ambari 認證。

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

  2. 在 [Azure Explorer] 中展開 [HDInsight],檢視您訂用帳戶中的 HDInsight 叢集。 標示為 "Role:Reader" 的叢集僅具有僅限讀取者角色權限。

    Azure Explorer 中的 HDInsight Spark 叢集讀者角色

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

    Azure Explorer 中的 HDInsight Spark 叢集連結

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

    Azure Explorer 中的 HDInsight Spark 叢集已連結

  1. 按一下 [作業] 節點,[叢集作業存取遭拒] 視窗隨即快顯。

  2. 按一下 [連結此叢集] 以連結叢集。

    Azure Explorer9 中的 HDInsight Spark 叢集

  1. 建立 HDInsight 專案。

  2. 使用滑鼠右鍵按一下套件。 選取 [將 Spark 應用程式提交給 HDInsight]。

    在 Azure Explorer 中提交 HDInsight Spark 叢集

  3. 選取叢集,此叢集必須具有叢集名稱的僅限讀取者角色權限。 警告訊息會顯示出來。您可以按一下 [連結此叢集] 來連結叢集。

    在 Azure Explorer 中連結這個 HDInsight Spark 叢集

檢視儲存體帳戶

  • 針對具有僅限讀取者角色權限的叢集,按一下 [儲存體帳戶] 節點,[儲存體存取遭拒] 視窗隨即快顯。

    Azure Explorer 中的 HDInsight Spark 叢集儲存體

    在 Azure Explorer 中存取 HDInsight Spark 叢集遭拒

  • 針對連結的叢集,按一下 [儲存體帳戶] 節點,[儲存體存取遭拒] 視窗隨即快顯。

    在 Azure Explorer 中存取 HDInsight Spark 叢集遭拒2

已知的問題

使用連結叢集時,建議您提供儲存體認證。

使用儲存體認證連結叢集 (刪節符號)

提交工作有兩種模式。 如果提供儲存體認證,將使用批次模式提交工作。 否則,將使用互動模式。 如果叢集忙碌,您可能會收到以下錯誤。

Eclipse 會在叢集忙碌時收到錯誤

(刪節符號) 叢集忙錄時收到錯誤 yarn

另請參閱

案例

建立和執行應用程式

工具和延伸模組

管理資源