Azure HDInsight での Apache Spark クラスターのリソースの管理

Apache Spark クラスターに関連付けられた Apache Ambari UI、Apache Hadoop YARN UI、Spark History Server などのインターフェイスにアクセスする方法、および最適なパフォーマンスが得られるようにクラスター構成を調整する方法について説明します。

Spark History Server を開く

Spark History Server は、完了および実行中の Spark アプリケーションの Web UI です。 Spark の Web UI の拡張機能です。 詳細については、Spark History Server に関する記事を参照してください。

Yarn UI を開く

Spark クラスターで現在実行されているアプリケーションを監視するには、YARN UI を使用することができます。

  1. Azure Portal で Spark クラスターを開きます。 詳細については、「クラスターの一覧と表示」を参照してください。

  2. クラスター ダッシュボード上で [Yarn] を選択します。 入力を求められたら、Spark クラスターの管理者資格情報を入力します。

    Launch YARN UI.

    ヒント

    Ambari UI から YARN UI を起動してもかまいません。 Ambari UI で [YARN]>[Quick Links]\(クイック リンク\)>[Active]\(アクティブ\)>[Resource Manager UI] に移動します。

Spark アプリケーション用にクラスターを最適化する

アプリケーションの要件に応じて Spark を構成するための主要なパラメーターは、spark.executor.instancesspark.executor.coresspark.executor.memory の 3 つです。 Executor は、Spark アプリケーション用に起動されるプロセスです。 ワーカー ノードで動作し、アプリケーションのタスクを実行する役割を担います。 それぞれのクラスターで使用される Executor の既定の数とサイズは、ワーカー ノードの数とワーカー ノードのサイズに基づいて計算され、 この情報はクラスターのヘッド ノード上の spark-defaults.conf に保存されます。

3 つの構成パラメーターは、クラスター レベルで (クラスター上で動作するすべてのアプリケーションに対して) 構成できるほか、個々のアプリケーションに対して指定することもできます。

Ambari UI を使用したパラメーターの変更

  1. Ambari UI で [Spark2]>[Configs]\(構成\)>[Custom spark2-defaults]\(Spark2 既定値のカスタマイズ\) に移動します。

    Set parameters using Ambari custom.

  2. 一連の既定値は、クラスター上で 4 つの Spark アプリケーションを同時実行することを想定して決められています。 次のスクリーンショットに示すように、これらの値をユーザー インターフェイスから変更できます。

    Set parameters using Ambari.

  3. [Save]\(保存\) を選択して構成の変更を保存します。 変更に関係したサービスをすべて再開するよう求めるメッセージがページの上部に表示されます。 [Restart]\(再起動\) をクリックします。

    Restart services.

Jupyter Notebook で実行するアプリケーションのパラメーター変更

Jupyter Notebook で実行しているアプリケーションについては、%%configure マジックを使用して構成に変更を加えることができます。 そのような変更は、できればアプリケーションの冒頭で、1 つ目のコード セルを実行する前に記述してください。 これを行うと、Livy セッションの作成時に、確実に構成が適用されます。 アプリケーションの終盤で構成の変更が生じた場合は、 -f パラメーターを使用する必要があります。 ただしその場合、アプリケーションのすべての進捗が失われます。

次のスニペットは、Jupyter で実行しているアプリケーションの構成を変更する方法を示しています。

%%configure
{"executorMemory": "3072M", "executorCores": 4, "numExecutors":10}

例の列で示されているように、構成パラメーターは JSON 文字列として渡し、マジックの後の次の行に置く必要があります。

spark-submit を使用して送信されたアプリケーションのパラメーター変更

次のコマンドは、 spark-submitを使用して送信されたバッチ アプリケーションの構成パラメーターを変更する例です。

spark-submit --class <the application class to execute> --executor-memory 3072M --executor-cores 4 –-num-executors 10 <location of application jar file> <application parameters>

cURL を使用して送信されたアプリケーションのパラメーター変更

次のコマンドは、cURL を使用して送信されたバッチ アプリケーションの構成パラメーターを変更する例です。

curl -k -v -H 'Content-Type: application/json' -X POST -d '{"file":"<location of application jar file>", "className":"<the application class to execute>", "args":[<application parameters>], "numExecutors":10, "executorMemory":"2G", "executorCores":5' localhost:8998/batches

Note

JAR ファイルをご自分のクラスター ストレージ アカウントにコピーします。 JAR ファイルをヘッド ノードに直接コピーしないでください。

これらのパラメーターを Spark Thrift サーバーで変更する

Spark Thrift サーバーを使用すると、Spark クラスターに JDBC/ODBC でアクセスし、Spark SQL クエリを実行することができます。 Power BI や Tableau などのツールは、ODBC プロトコルを使用して Spark Thrift サーバーとやり取りし、Spark アプリケーションとして Spark SQL クエリを実行します。 Spark クラスターを作成すると、Spark Thrift サーバーの 2 つのインスタンスが起動されます (ヘッド ノードごとに 1 つ)。 YARN UI には、各 Spark Thrift サーバーが Spark アプリケーションとして表示されます。

Spark Thrift サーバーでは、Spark の Dynamic Executor Allocation が使用されるため、spark.executor.instances は使用されません。 代わりに、Executor 数の指定に spark.dynamicAllocation.maxExecutorsspark.dynamicAllocation.minExecutors が使用されます。 Executor のサイズ変更には、構成パラメーターとして spark.executor.coresspark.executor.memory が使用されます。 次の手順に示すように、これらのパラメーターは変更できます。

  • spark.dynamicAllocation.maxExecutorsspark.dynamicAllocation.minExecutors の各パラメーターを更新するには、Advanced spark2-thrift-sparkconf カテゴリを展開します。

    Configure Spark thrift server.

  • パラメーター spark.executor.cores および spark.executor.memory を更新するには、Custom spark2-thrift-sparkconf カテゴリを展開します。

    Configure Spark thrift server parameter.

Spark Thrift サーバーのドライバーのメモリを変更する

ヘッド ノードの RAM の合計サイズが 14 GB を超える場合、Spark Thrift サーバーのドライバーのメモリはヘッド ノードの RAM サイズの 25% に構成されます。 ドライバーのメモリ構成は、次のスクリーンショットのように Ambari UI を使用して変更できます。

Ambari UI で [Spark2]>[Configs]\(構成\)>[Advanced spark2.x-env] に移動します。 次に、spark_thrift_cmd_opts の値を指定します。

Spark クラスター リソースを解放する

Spark の動的割り当てにより、Thrift サーバーから利用できるリソースは、2 つのアプリケーション マスターのリソースのみです。 これらのリソースの領域を解放するには、クラスター上で実行されている Thrift サーバー サービスを停止する必要があります。

  1. Ambari UI の左ペインで [Spark2] を選択します。

  2. 次のページで、 [Spark2 Thrift Servers] を選択します。

    Restart thrift server1.

  3. Spark2 Thrift サーバーが実行されている 2 つのヘッド ノードが表示されます。 いずれかのヘッド ノードを選択してください。

    Restart thrift server2.

  4. そのヘッド ノードで実行されているすべてのサービスが次のページに一覧表示されます。 一覧から、Spark2 Thrift Server の横にあるドロップダウン ボタンを選択し、 [Stop]\(停止\) を選択します。

    Restart thrift server3.

  5. もう一方のヘッド ノードについても同じ手順を繰り返します。

Jupyter サービスを再起動する

この記事の最初で示したように、Ambari Web UI を起動します。 左側のナビゲーション ウィンドウで、 [Jupyter][Service Actions]\(サービス アクション\)[Restart All]\(すべて再起動\) の順に選択します。 これで、すべてのヘッドノードで Jupyter サービスが開始されます。

Restart Jupyter.

リソースの監視

この記事の最初で示したように、Yarn Web UI を起動します。 画面上部の [Cluster Metrics] テーブルで、 [Memory Used][Memory Total] の列の値を確認します。 2 つの値が近い場合は、次のアプリケーションを開始するためのリソースが十分でない可能性があります。 [VCores Used][VCores Total] の列でも同じことが言えます。 また、メイン ビューに、 [ACCEPTED] の状態のまま、 [RUNNING] にも [FAILED] の状態にも移行していないアプリケーションがある場合も、開始するためのリソースが十分でないことを示している可能性があります。

Resource Limit.

実行中のアプリケーションを強制終了する

  1. Yarn UI の左側のパネルで [Running]\(実行中\) をクリックします。 実行中のアプリケーションの一覧から、強制終了するアプリケーションを決定し、 [ID] を選択します。

    Kill App1.

  2. 右上隅の [Kill Application]\(アプリの強制終了\) をクリックして、 [OK] をクリックします。

    Kill App2.

関連項目

データ アナリスト向け

Apache Spark 開発者向け