Apache Spark の設定を構成するConfigure Apache Spark settings

HDInsight Spark クラスターには、Apache Spark ライブラリのインストールが含まれています。An HDInsight Spark cluster includes an installation of the Apache Spark library. 各 HDInsight クラスターには、Spark も含め、インストールされるすべてのサービスの既定の構成パラメーターが含まれています。Each HDInsight cluster includes default configuration parameters for all its installed services, including Spark. HDInsight Apache Hadoop クラスターの管理の重要な側面は、Spark ジョブを含むワークロードを監視して、それらのジョブが予測可能な方法で実行されていることを確認することです。A key aspect of managing an HDInsight Apache Hadoop cluster is monitoring workload, including Spark Jobs, to make sure the jobs are running in a predictable manner. Spark ジョブを最高の状態で実行するには、クラスターの論理構成を最適化する方法を決定するときに、物理クラスターの構成を検討します。To best run Spark jobs, consider the physical cluster configuration when determining how to optimize the cluster's logical configuration.

既定の HDInsight Apache Spark クラスターには、3 つの Apache ZooKeeper ノード、2 つのヘッド ノード、および 1 つ以上のワーカー ノードが含まれています。The default HDInsight Apache Spark cluster includes the following nodes: three Apache ZooKeeper nodes, two head nodes, and one or more worker nodes:

Spark HDInsight のアーキテクチャ

HDInsight クラスター内のノードの VM の数と VM のサイズも、Spark の構成に影響します。The number of VMs, and the VM sizes, for the nodes in your HDInsight cluster can also affect your Spark configuration. HDInsight の構成が既定値ではない場合は、通常、Spark の構成にも既定ではない値が必要です。Non-default HDInsight configuration values often require non-default Spark configuration values. HDInsight Spark クラスターを作成するときに、各コンポーネントの推奨される VM サイズが表示されます。When you create an HDInsight Spark cluster, you are shown suggested VM sizes for each of the components. 現在、Azure に対するメモリ最適化された Linux VM のサイズは、D12 v2 以上です。Currently the Memory-optimized Linux VM sizes for Azure are D12 v2 or greater.

Apache Spark のバージョンApache Spark versions

クラスターに最適な Spark バージョンを使用します。Use the best Spark version for your cluster. HDInsight サービスには、複数のバージョンの Spark および HDInsight 自体の両方が含まれます。The HDInsight service includes several versions of both Spark and HDInsight itself. Spark の各バージョンには、既定のクラスター設定のセットが含まれます。Each version of Spark includes a set of default cluster settings.

新しいクラスターを作成するときに、Spark のバージョンを複数のバージョンの中から選ぶことができます。When you create a new cluster, there are multiple Spark versions to choose from. 完全な一覧については、HDInsight のコンポーネントとバージョンに関するページを参照してください。To see the full list, HDInsight Components and Versions

注意

HDInsight サービスに含まれる Apache Spark の既定のバージョンは、予告なく変更される場合があります。The default version of Apache Spark in the HDInsight service may change without notice. バージョンの依存関係がある場合は、.NET SDK、Azure PowerShell、Azure クラシック CLI を使ってクラスターを作成するときに、特定のバージョンを指定することをお勧めします。If you have a version dependency, Microsoft recommends that you specify that particular version when you create clusters using .NET SDK, Azure PowerShell, and Azure Classic CLI.

Apache Spark のシステム構成には 3 つの場所があります。Apache Spark has three system configuration locations:

  • Spark のプロパティは、ほとんどのアプリケーション パラメーターを制御し、SparkConf オブジェクトまたは Java のシステム プロパティを使って設定できます。Spark properties control most application parameters and can be set by using a SparkConf object, or through Java system properties.
  • 環境変数は、IP アドレスなどのコンピューターごとの設定を設定するために使うことができ、各ノードで conf/spark-env.sh スクリプトを使って設定します。Environment variables can be used to set per-machine settings, such as the IP address, through the conf/spark-env.sh script on each node.
  • ログは、log4j.properties を使って構成できます。Logging can be configured through log4j.properties.

特定のバージョンの Spark を選ぶと、クラスターにはその既定の構成設定が含まれます。When you select a particular version of Spark, your cluster includes the default configuration settings. カスタム Spark 構成ファイルを使用することで、既定の Spark 構成値を変更できます。You can change the default Spark configuration values by using a custom Spark configuration file. 次に例を示します。An example is shown below.

spark.hadoop.io.compression.codecs org.apache.hadoop.io.compress.GzipCodec
spark.hadoop.mapreduce.input.fileinputformat.split.minsize 1099511627776
spark.hadoop.parquet.block.size 1099511627776
spark.sql.files.maxPartitionBytes 1099511627776
spark.sql.files.openCostInBytes 1099511627776

上記の例では、5 つの Spark 構成パラメーターのいくつかの既定値がオーバーライドされます。The example shown above overrides several default values for five Spark configuration parameters. これらは、圧縮コーデック、Apache Hadoop MapReduce の分割最小サイズと parquet のブロック サイズ、さらには Spar SQL のパーティション サイズと開くファイルのサイズの既定値です。These are the compression codec, Apache Hadoop MapReduce split minimum size and parquet block sizes, and also the Spar SQL partition and open file sizes default values. これらの構成の変更を選んだのは、関連するデータとジョブ (この例では、ゲノム データ) に、これらのカスタム構成設定を使うとパフォーマンスが向上する特定の特性があるためです。These configuration changes are chosen because the associated data and jobs (in this example, genomic data) have particular characteristics, which will perform better using these custom configuration settings.


クラスターの構成設定を表示するView cluster configuration settings

クラスターでパフォーマンスの最適化を実行する前に、現在の HDInsight クラスターの構成設定を確認します。Verify the current HDInsight cluster configuration settings before you perform performance optimization on the cluster. Azure Portal で Spark クラスター ウィンドウの [ダッシュボード] リンクをクリックして、HDInsight ダッシュボードを起動します。Launch the HDInsight Dashboard from the Azure portal by clicking the Dashboard link on the Spark cluster pane. クラスター管理者のユーザー名とパスワードでサインインします。Sign in with the cluster administrator's username and password.

Apache Ambari Web UI に、主要なクラスター リソースの使用率メトリックのダッシュボード ビューが表示されます。The Apache Ambari Web UI appears, with a dashboard view of key cluster resource utilization metrics. Ambari ダッシュボードには、Apache Spark の構成と、インストールされているその他のサービスが表示されます。The Ambari Dashboard shows you the Apache Spark configuration, and other services that you have installed. ダッシュボードには [Config History](構成履歴) タブがあり、Spark を含むインストールされているすべてのサービスの構成情報を見ることができます。The Dashboard includes a Config History tab, where you can view configuration information for all installed services, including Spark.

Apache Spark の構成値を見るには、 [Config History](構成履歴) を選び、 [Spark2] を選びます。To see configuration values for Apache Spark, select Config History, then select Spark2. [Configs](構成) タブを選び、サービス一覧の Spark (または、バージョンによっては Spark2) を選びます。Select the Configs tab, then select the Spark (or Spark2, depending on your version) link in the service list. クラスターの構成値の一覧が表示されます。You see a list of configuration values for your cluster:

Spark の構成

個別の Spark 構成値を表示および変更するには、リンク タイトルに "spark" が含まれるリンクを選びます。To see and change individual Spark configuration values, select any link with the word "spark" in the link title. Spark の構成は、以下のカテゴリのカスタム構成値と詳細構成値の両方が含まれます。Configurations for Spark include both custom and advanced configuration values in these categories:

  • Custom Spark2-defaults (カスタム Spark2 既定値)Custom Spark2-defaults
  • Custom Spark2-metrics-properties (カスタム Spark2 メトリック プロパティ)Custom Spark2-metrics-properties
  • Advanced Spark2-defaults (詳細 Spark2 既定値)Advanced Spark2-defaults
  • Advanced Spark2-env (詳細 Spark2 環境)Advanced Spark2-env
  • Advanced spark2-hive-site-override (詳細 Spark2 Hive サイト上書き)Advanced spark2-hive-site-override

既定ではない構成値のセットを作成する場合は、構成の更新の履歴も参照できます。If you create a non-default set of configuration values, then you can also see the history of your configuration updates. この構成履歴は、パフォーマンスが最善になる既定以外の構成を確認するのに役立ちます。This configuration history can be helpful to see which non-default configuration has optimal performance.

注意

共通の Spark クラスター構成設定を表示するだけで変更しない場合は、最上位の [Spark Job UI](Spark ジョブ UI) インターフェイスの [Environment](環境) タブを選びます。To see, but not change, common Spark cluster configuration settings, select the Environment tab on the top-level Spark Job UI interface.

Spark Executor の構成Configuring Spark executors

次の図では、主要な Spark オブジェクトであるドライバー プログラムとそれに関連する Spark コンテキスト、およびクラスター マネージャーとその n 個のワーカー ノードが示されています。The following diagram shows key Spark objects: the driver program and its associated Spark Context, and the cluster manager and its n worker nodes. 各ワーカー ノードには、Executor、キャッシュ、および n 個のタスク インスタンスが含まれます。Each worker node includes an Executor, a cache, and n task instances.

クラスター オブジェクト

Spark ジョブはワーカーのリソース (具体的にはメモリ) を使うため、ワーカー ノードの Executor 用に Spark 構成値を調整するのが一般的です。Spark jobs use worker resources, particularly memory, so it's common to adjust Spark configuration values for worker node Executors.

アプリケーションの要件が向上するよう Spark の構成をチューニングするために調整されることが多い 3 つの主要なパラメーターは、spark.executor.instancesspark.executor.cores、および spark.executor.memory です。Three key parameters that are often adjusted to tune Spark configurations to improve application requirements are spark.executor.instances, spark.executor.cores, and spark.executor.memory. Executor は、Spark アプリケーション用に起動されるプロセスです。An Executor is a process launched for a Spark application. Executor はワーカー ノードで動作し、アプリケーションのタスクを実行します。An Executor runs on the worker node and is responsible for the tasks for the application. クラスターごとに、ワーカー ノードの数とサイズに基づいて Executor の既定の数とサイズが計算され、For each cluster, the default number of executors, and the executor sizes, is calculated based on the number of worker nodes and the worker node size. クラスターのヘッド ノード上の spark-defaults.conf に保存されます。These are stored in spark-defaults.conf on the cluster head nodes. Ambari Web UI で [Custom spark-defaults](カスタム Spark 既定値) リンクを選ぶことで、実行中のクラスターでのこれらの値を編集できます。You can edit these values in a running cluster by selecting the Custom spark-defaults link in the Ambari web UI. 変更を行った後は、影響を受けるすべてのサービスの再起動を求める UI が表示されます。After you make changes, you're prompted by the UI to Restart all the affected services.

注意

3 つの構成パラメーターは、クラスター レベルで (クラスター上で動作するすべてのアプリケーションに対して) 構成できるほか、個々のアプリケーションに対して指定することもできます。These three configuration parameters can be configured at the cluster level (for all applications that run on the cluster) and also specified for each individual application.

Spark Executor で使われるリソースに関するもう 1 つの情報ソースは、Spark アプリケーション UI です。Another source of information about the resources being used by the Spark Executors is the Spark Application UI. Spark UI で [Executors](Executor) タブを選ぶと、構成の概要ビューと詳細ビューおよび Executor 別の消費リソースが表示されます。In the Spark UI, select the Executors tab to display Summary and Detail views of the configuration and resources consumed by the executors. これらのビューは、Spark Executor の既定値の変更を、クラスター全体に対して行うか、または特定のジョブ実行セットについて行うかを判断するときに役立ちます。These views can help you determine whether to change default values for Spark executors for the entire cluster, or a particular set of job executions.

Spark Executor

または、Ambari REST API を使って、プログラムで HDInsight と Spark クラスターの構成設定を確認することもできます。Alternatively, you can use the Ambari REST API to programmatically verify HDInsight and Spark cluster configuration settings. 詳細については、GitHub の Apache Ambari API リファレンスを参照してください。More information is available at the Apache Ambari API reference on GitHub.

Spark のワークロードによっては、既定以外の Spark 構成のほうが Spark ジョブの実行をより最適化することがわかる場合があります。Depending on your Spark workload, you may determine that a non-default Spark configuration provides more optimized Spark job executions. 既定以外のクラスター構成を検証するには、サンプルのワークロードを使ってベンチマーク テストを実行する必要があります。You should perform benchmark testing with sample workloads to validate any non-default cluster configurations. 調整を検討する可能性がある一般的なパラメーターを次に示します。Some of the common parameters that you may consider adjusting are:

  • --num-executors は、Executor の数を設定します。--num-executors sets the number of executors.
  • --executor-cores は、各実行プログラムのコア数を設定します。--executor-cores sets the number of cores for each executor. 他のプロセスが使用可能なメモリの一部を消費するため、中規模の Executor を使うことをお勧めします。We recommend using middle-sized executors, as other processes also consume some portion of the available memory.
  • --executor-memory は、Apache Hadoop YARN 上の各 Executor のメモリ サイズ (ヒープ サイズ) を制御するため、実行オーバーヘッド用にある程度のメモリを残しておく必要があります。--executor-memory controls the memory size (heap size) of each executor on Apache Hadoop YARN, and you'll need to leave some memory for execution overhead.

構成値が異なる 2 つのワーカー ノードの例を次に示します。Here is an example of two worker nodes with different configuration values:

2 ノード構成

次の一覧では、Spark Executor の主要なメモリ パラメーターを示します。The following list shows key Spark executor memory parameters.

  • spark.executor.memory は、Executor で使用可能なメモリの総量を定義します。spark.executor.memory defines the total amount of memory available for an executor.
  • spark.storage.memoryFraction (既定値は最大 60%) は、永続化された RDD の格納に使用可能なメモリの量を定義します。spark.storage.memoryFraction (default ~60%) defines the amount of memory available for storing persisted RDDs.
  • spark.shuffle.memoryFraction (既定値は最大 20%) は、シャッフル用に確保されるメモリの量を定義します。spark.shuffle.memoryFraction (default ~20%) defines the amount of memory reserved for shuffle.
  • spark.storage.unrollFraction および spark.storage.safetyFraction (合計で総メモリ量の最大 30%) は、Spark が内部的に使うので、変更しないでください。spark.storage.unrollFraction and spark.storage.safetyFraction (totaling ~30% of total memory) - these values are used internally by Spark and shouldn't be changed.

YARN は、各 Spark ノード上のコンテナーで使われる最大合計メモリを制御します。YARN controls the maximum sum of memory used by the containers on each Spark node. 次の図では、YARN 構成オブジェクトと Spark オブジェクトの間のノードごとの関係を示します。The following diagram shows the per-node relationships between YARN configuration objects and Spark objects.

YARN の Spark メモリの管理

Jupyter Notebook で実行するアプリケーションのパラメーターを変更するChange parameters for an application running in Jupyter notebook

HDInsight の Spark クラスターには、既定で複数のコンポーネントが含まれます。Spark clusters in HDInsight include a number of components by default. これらの各コンポーネントには、必要に応じてオーバーライドできる既定の構成値が含まれます。Each of these components includes default configuration values, which can be overridden as needed.

  • Spark Core - Spark Core、Spark SQL、Spark ストリーミング API、GraphX、Apache Spark MLlib。Spark Core - Spark Core, Spark SQL, Spark streaming APIs, GraphX, and Apache Spark MLlib.
  • Anaconda - Python パッケージ マネージャー。Anaconda - a python package manager.
  • Apache Livy - Apache Spark REST API (HDInsight Spark クラスターにリモート ジョブを送信するために使用されます)。Apache Livy - the Apache Spark REST API, used to submit remote jobs to an HDInsight Spark cluster.
  • Jupyter および Apache Zeppelin Notebook - Spark クラスターを操作するためのブラウザー ベースの対話型 UI。Jupyter and Apache Zeppelin notebooks - interactive browser-based UI for interacting with your Spark cluster.
  • ODBC ドライバー - HDInsight の Spark クラスターを、Microsoft Power BI や Tableau などのビジネス インテリジェンス (BI) ツールに接続します。ODBC driver - connects Spark clusters in HDInsight to business intelligence (BI) tools such as Microsoft Power BI and Tableau.

Jupyter Notebook で実行するアプリケーションについては、%%configure コマンドを使って、Notebook 自体の内部から構成を変更できます。For applications running in the Jupyter notebook, use the %%configure command to make configuration changes from within the notebook itself. これらの構成変更は、お使いの Notebook インスタンスから実行された Spark ジョブに適用されます。These configuration changes will be applied to the Spark jobs run from your notebook instance. そのような変更は、最初のコード セルを実行する前、アプリケーションの冒頭で行う必要があります。You should make such changes at the beginning of the application, before you run your first code cell. 変更された構成は、Livy セッションの作成時に適用されます。The changed configuration is applied to the Livy session when it gets created.

注意

アプリケーションの後のステージで構成を変更するには、-f (force) パラメーターを使う必要があります。To change the configuration at a later stage in the application, use the -f (force) parameter. ただし、アプリケーションのすべての進捗が失われます。However, all progress in the application will be lost.

以下のコードでは、Jupyter Notebook で実行しているアプリケーションの構成を変更する方法を示します。The code below shows how to change the configuration for an application running in a Jupyter notebook.

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

まとめConclusion

Spark ジョブの実行が予測可能で高パフォーマンスになるように、複数のコア構成設定を監視して調整する必要があります。There are a number of core configuration settings that you need to monitor and adjust to ensure your Spark jobs run in a predictable and performant way. これらの設定は、特定のワークロードに対する Spark クラスターの最善の構成を決定するのに役立ちます。These settings help determine the best Spark cluster configuration for your particular workloads. また、実行時間の長い、またはリソース消費の多い Spark ジョブの実行を監視する必要があります。You'll also need to monitor the execution of long-running and/or resource-consuming Spark job executions. 最もよくある課題は、不適切な構成 (特に不適切なサイズの実行プログラム)、実行時間の長い操作、およびデカルト演算を生じるタスクが原因の、メモリ不足に関するものです。The most common challenges center around memory pressure due to improper configurations (particularly incorrectly-sized executors), long-running operations, and tasks, which result in Cartesian operations.

次のステップNext steps