Azure Toolkit for Eclipse を使用して HDInsight クラスター向けの Apache Spark アプリケーションを作成する

Azure Toolkit for Eclipse の HDInsight Tools を使用して Scala で記述された Apache Spark アプリケーションを開発し、Eclipse IDE から直接、Azure HDInsight Spark クラスターに送信します。 HDInsight Tools プラグインには、次のような複数の使い方があります。

  • Scala Spark アプリケーションを開発して HDInsight Spark クラスターに送信する。
  • Azure HDInsight Spark クラスター リソースにアクセスする。
  • Scala Spark アプリケーションをローカルで開発して実行する。

前提条件

必要なプラグインをインストールする

Azure Toolkit for Eclipse をインストールする

インストール手順については、「Azure Toolkit for Eclipse のインストール」を参照してください。

Scala プラグインをインストールする

Eclipse の起動時に、Scala プラグインがインストールされているかどうかを HDInsight Tools が自動的に検出します。 [OK] を選択して続行し、指示に従って Eclipse Marketplace からプラグインをインストールします。 インストールが完了したら、IDE を再起動します。

Automatic installation of the Scala plug-in.

プラグインの確認

  1. ヘルプ の>Eclipse Marketplace... に移動します。

  2. [インストール] タブを選択します。

  3. 少なくとも次のように表示する必要があります:

    • Azure Toolkit for Eclipse <バージョン>。
    • Scala IDE <バージョン>。

Azure サブスクリプションにサインインします。

  1. Eclipse IDE を起動します。

  2. [ウィンドウ]>[表示ビュー]>[その他...]>[サインイン...] に移動します

  3. [表示ビュー] ダイアログで、 [Azure]>[Azure Explorer] に移動し、 [開く] を選択します。

    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 Explorerで、 [HDInsight] を右クリックし、 [クラスターのリンク] を選択します。

    Azure Explorer link cluster menu.

  2. クラスター名ユーザー名、および パスワードを入力し、 [OK] を選択します。 任意で、[ストレージ アカウント] と [ストレージ キー] を入力し、左のツリー ビューでストレージ エクスプローラーに [ストレージ コンテナー] を選択します。

    Link New HDInsight cluster dialog.

    Note

    クラスターが Azure サブスクリプションにログインし、かつクラスターにリンクしていた場合、リンクされたストレージ キー、ユーザー名、パスワードを使用します。 Azure Explorer storage accounts.

    キーボードのみを使用しているユーザーの場合、現在のフォーカスがストレージ キーにあるときは、Ctrl+TAB を使用して、ダイアログの次のフィールドにフォーカスを移動する必要があります。

  3. リンクされたクラスターは HDInsight の下に表示されます。 これでリンクされたクラスターにアプリケーションを送信できるようになりました。

    Azure Explorer hdi linked cluster.

  4. また、Azure 用エクスプローラーからクラスターのリンクを解除することもできます。

    Azure Explorer unlinked cluster.

HDInsight Spark クラスター用の Spark Scala プロジェクトを設定する

  1. Eclipse IDE ワークスペースで、 [ファイル]>[新しい>プロジェクト...] を選択します。

  2. [新しいプロジェクト] ウィザードで、 [hdinsight プロジェクト]>Spark on HDInsight (Scala) を選択します。 [次へ] を選択します。

    Selecting the Spark on HDInsight (Scala) project.

  3. [New HDInsight Scala Project](新しい HDInsight Scala プロジェクト) ダイアログ ボックスで、次の値を指定し、 [Next](次へ) を選択します。

    • プロジェクトの名前を入力します。
    • [JRE] 領域で、 [Use an execution environment JRE](実行環境 JRE を使用する)JavaSE-1.7 以降に設定されていることを確認します。
    • [Spark Library](Spark ライブラリ) 領域では、 [Use Maven to configure Spark SDK](Maven を使用して Spark SDK を構成する) オプションを選択できます。 ツールにより Spark SDK と Scala SDK の適切なバージョンが統合されます。 また、手動で Spark SDK を手動で追加する オプションを選択して、ダウンロードし、Spark SDK を手動で追加することもできます。

    New HDInsight Scala Project dialog box.

  4. 次のダイアログボックスで、詳細を確認し、 [完了] を選択します。

HDInsight Spark クラスター向けの Scala アプリケーションを作成する

  1. Package Explorer から、前に作成したプロジェクトを展開します。 src を右クリックし、 [新規]>[その他... ] を選択します。

  2. [ウィザードの選択] ダイアログボックスで、 [Scala ウィザード]>[Scala オブジェクト] を選択します。 [次へ] を選択します。

    Select a wizard Create a Scala Object.

  3. [Create New File] \(新しいファイルの作成) ダイアログ ボックスでオブジェクトの名前を入力し、 [Finish] \(完了) を選択します。 テキストエディターが開きます。

    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. Package Explorer で、プロジェクト名を右クリックし、 [Submit Spark Application to HDInsight](HDInsight への Spark アプリケーションの送信) を選択します。

    b. [Spark Submission](Spark 送信) ダイアログ ボックスで、次の値を入力し、 [Submit](送信) を選択します。

    • [Cluster Name (クラスター名)] で、アプリケーションを実行する HDInsight Spark クラスターを選択します。

    • Eclipse プロジェクトまたはハード ドライブからアーティファクトを選択します。 既定値は、Package Explorer から右クリックした項目によって異なります。

    • 送信ウィザードの [Main class name](メイン クラス名) ボックスの一覧に、プロジェクトのすべてのオブジェクト名が表示されます。 実行するオブジェクトを選択または入力します。 ハード ドライブからアーティファクトを選択した場合は、メイン クラス名を手動で入力する必要があります。

    • この例のアプリケーションコードでは、コマンドライン引数を必要とせず、Jar またはファイルを参照することもないため、残りのテキストボックスは空のままにすることができます。

      Apache Spark Submission dialog box.

  6. [Spark Submission (Spark 送信)] タブで、進行状況の表示が開始されます。 [Spark Submission](Spark 送信) ウィンドウにある赤いボタンを選択して、アプリケーションを停止することができます。 地球アイコン (図では青のボックスで示されています) を選択して、この特定のアプリケーションの実行に関するログを表示することもできます。

    Apache Spark Submission window.

Azure Toolkit for Eclipse の HDInsight Tools を使用して HDInsight Spark クラスターにアクセスして管理する

HDInsight Tools を使用すると、ジョブの出力へのアクセスなど、さまざまな操作を実行できます。

ジョブ ビューにアクセスする

  1. Azure Explorerで、 [HDInsight] 、[Spark クラスター名] の順に展開し、 [ジョブ] を選択します。

    Azure Explorer Eclipse job view node.

  2. [ジョブ] ノードを選択します。 Java のバージョンが 1.8 より前である場合、HDInsight ツールは E(fx)clipse プラグインのインストールを求めるアラームを自動的に表示します。 [OK] を選択して続行し、ウィザードに従って Eclipse Marketplace からプラグインをインストールし、Eclipse を再起動します。

    Install missing plugin E(fx)clipse.

  3. [ジョブ] ノードからジョブ ビューを開きます。 右側のウィンドウの [Spark Job View (Spark ジョブ ビュー)] タブに、クラスター上で実行されていたすべてのアプリケーションが表示されます。 詳細情報を確認したいアプリケーションの名前を選択します。

    Apache Eclipse view job logs details.

    これで、以下のアクションを実行できます。

    • ジョブ グラフをポイントします。 すると、実行中のジョブに関する基本情報が表示されます。 ジョブ グラフを選択すると、各ジョブについて生成されるステージおよび情報を確認できます。

      Apache Spark job graph stage info.

    • [Log](ログ) タブを選択して、Driver StderrDriver StdoutDirectory Info などの頻繁に使用されるログを表示します。

      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 フォルダーをダブルクリックします。 part- ファイルのいずれかを開いて、アプリケーションの出力を確認します。

Spark 履歴サーバーにアクセスする

  1. Azure Explorer で、Spark クラスター名を右クリックし、 [Open Spark History UI](Spark 履歴 UI を開く) を選択します。 入力を求められたら、クラスターの管理者資格情報を入力します。 これらは、クラスターのプロビジョニング時に指定したものです。

  2. Spark 履歴サーバーのダッシュボードで、実行が終了したばかりのアプリケーションをアプリケーション名を使って探します。 上記のコードでは、val conf = new SparkConf().setAppName("MyClusterApp") を使用してアプリケーション名を設定しました。 したがって、Spark アプリケーション名は MyClusterApp です。

Apache Ambari ポータルを起動する

  1. Azure Explorer で、Spark クラスター名を右クリックし、 [Open Cluster Management Portal (Ambari)](クラスター管理ポータルを開く (Ambari)) を選択します。

  2. 入力を求められたら、クラスターの管理者資格情報を入力します。 これらは、クラスターのプロビジョニング時に指定したものです。

Azure サブスクリプションの管理

Azure Toolkit for Eclipse の HDInsight ツールの既定では、すべての Azure サブスクリプションからの Spark クラスターが一覧表示されます。 必要に応じて、クラスターにアクセスするサブスクリプションを指定できます。

  1. Azure Explorer で、 [Azure] ルート ノードを右クリックし、 [Manage Subscriptions](サブスクリプションの管理) を選択します。

  2. ダイアログ ボックスで、アクセスしないサブスクリプションのチェック ボックスをオフにし、 [Close](閉じる) を選択します。 Azure サブスクリプションからサインアウトする場合は、 [Sign Out](サインアウト) を選択することもできます。

Spark Scala アプリケーションのローカルでの実行

Azure Toolkit for Eclipse の HDInsight Tools を使用すると、ワークステーション上で Spark Scala アプリケーションをローカルに実行することができます。 通常、そのようなアプリケーションは、ストレージ コンテナーなどのクラスター リソースにアクセスする必要がなく、ローカルで実行しテストすることができます。

前提条件

Windows コンピューターでローカルの Spark Scala アプリケーションを実行中に、SPARK-2356 で説明されている例外が発生する場合があります。 この例外は、Windows 上に WinUtils.exe がないことが原因で発生します。

このエラーを解決するには、C:\WinUtils\bin などの場所に Winutils.exe が必要です。次に、環境変数 HADOOP_HOME を追加し、この変数の値を C:\WinUtils に設定します。

ローカル Spark Scala アプリケーションの実行

  1. Eclipse を起動し、プロジェクトを作成します。 [新しいプロジェクト] ダイアログ ボックスで、次の選択を行い、 [Next](次へ) を選択します。

  2. [新しいプロジェクト] ウィザードで、 [HDInsight プロジェクト]>[Spark on HDInsight Local Run Sample (Scala)] を選択します。 [次へ] を選択します。

    New project selects a wizard dialog.

  3. プロジェクトの詳細を指定するために、前のセクション「HDInsight Spark クラスター用の Spark Scala プロジェクトを設定する」の手順 3. から 6. に従います。

  4. テンプレートは、コンピューターでローカルに実行することができるサンプル コード (LogQuery) を src フォルダーの下に追加します。

    Location of LogQuery local scala application.

  5. LogQuery.scala を右クリックし、 [実行]>1 つのアプリケーション を選択します。 次のような出力が [コンソール] タブに表示されます。

    Spark application local run result.

読み取り専用ロール

ユーザーが読み取り専用ロールのアクセス許可を使用してジョブをクラスターに送信する場合、Ambari の資格情報が必要です。

  1. 読み取り専用ロールのアカウントでサインインします。

  2. Azure Explorer[HDInsight] を展開し、自分のサブスクリプションにある HDInsight クラスターを表示します。 "Role:Reader" とマークされているクラスターには、読み取り専用ロールのアクセス許可しかありません。

    HDInsight Spark clusters in Azure Explorer role reader.

  3. 読み取り専用ロールのアクセス許可があるクラスターを右クリックします。 コンテキスト メニューで [Link this cluster](このクラスターをリンク) を選択して、クラスターをリンクします。 Ambari のユーザー名とパスワードを入力します。

    HDInsight Spark clusters in Azure Explorer link.

  4. クラスターが正常にリンクされると、HDInsight が更新されます。 クラスターのステージはリンク状態になります。

    HDInsight Spark clusters in Azure Explorer linked.

  1. Jobs ノードをクリックします。 [Cluster Job Access Denied](拒否されたクラスター ジョブ アクセス) ウィンドウが表示されます。

  2. [Link this cluster](このクラスターをリンク) をクリックして、クラスターをリンクします。

    HDInsight Spark clusters in Azure Explorer9.

  1. HDInsight プロジェクトを作成します。

  2. パッケージを右クリックします。 次に、 [Submit Spark Application to HDInsight](HDInsight への Spark アプリケーションの送信) を選択します。

    HDInsight Spark clusters in Azure Explorer submit.

  3. クラスター名に対する閲覧者専用のロールアクセス許可を持つクラスターを選択します。 警告メッセージが表示されます。 [Link this cluster](このクラスターをリンク) をクリックして、クラスターをリンクできます。

    HDInsight Spark clusters in Azure Explorer link this.

ストレージ アカウントを表示する

  • 読み取り専用ロールのアクセス許可があるクラスターで、Storage Accounts ノードをクリックします。 [Storage Access Denied](拒否されたストレージ アクセス) ウィンドウが表示されます。

    HDInsight Spark clusters in Azure Explorer storage.

    HDInsight Spark clusters in Azure Explorer denied.

  • リンクされたクラスターで、Storage Accounts ノードをクリックします。 [Storage Access Denied](拒否されたストレージ アクセス) ウィンドウが表示されます。

    HDInsight Spark clusters in Azure Explorer denied2.

既知の問題

クラスターをリンクする を使用する場合は、ストレージの資格情報を入力することをお勧めします。

link cluster with storage credential eclipses.

ジョブの送信には、2 つのモードがあります。 ストレージ資格情報が入力されると、バッチ モードが使用され、ジョブが送信されます。 入力されない場合、対話モードが使用されます。 クラスターがビジー状態の場合、以下のエラーが表示されることがあります。

eclipse get error when cluster busy.

eclipse get error when cluster busy yarn.

関連項目

シナリオ

アプリケーションの作成と実行

ツールと拡張機能

リソースの管理