Apache Ambari を使用して HDInsight クラスター構成を最適化するUse Apache Ambari to optimize HDInsight cluster configurations

HDInsight は、大規模なデータ処理アプリケーションのための Apache Hadoop クラスターを提供します。HDInsight provides Apache Hadoop clusters for large-scale data processing applications. これらの複雑なマルチノード クラスターの管理、監視、最適化は困難な場合があります。Managing, monitoring, and optimizing these complex multi-node clusters can be challenging. Apache Ambari は、HDInsight Linux クラスターを管理および監視するための Web インターフェイスです。Apache Ambari is a web interface to manage and monitor HDInsight Linux clusters. Windows クラスターの場合は、Ambari REST API を使用します。For Windows clusters, use the Ambari REST API.

Ambari Web UI の使用の概要については、Apache Ambari Web UI を使用した HDInsight クラスターの管理に関するページを参照してくださいFor an introduction to using the Ambari Web UI, see Manage HDInsight clusters by using the Apache Ambari Web UI

クラスターの資格情報を使用して Ambari (https://CLUSTERNAME.azurehdidnsight.net) にログインします。Log in to Ambari at https://CLUSTERNAME.azurehdidnsight.net with your cluster credentials. 初期画面に概要ダッシュボードが表示されます。The initial screen displays an overview dashboard.

Apache Ambari のユーザー ダッシュボードの表示

Ambari Web UI を使用して、ホスト、サービス、アラート、構成、ビューを管理できます。The Ambari web UI can be used to manage hosts, services, alerts, configurations, and views. Ambari を使用して、HDInsight クラスターの作成、サービスのアップグレード、スタックとバージョンの管理、ホストの使用停止または再稼働、クラスターへのサービスの追加を行うことはできません。Ambari can't be used to create an HDInsight cluster, upgrade services, manage stacks and versions, decommission or recommission hosts, or add services to the cluster.

クラスターの構成の管理Manage your cluster's configuration

構成設定は、特定のサービスを調整する際に役立ちます。Configuration settings help tune a particular service. サービスの構成設定を変更するには、 [Services](サービス) サイドバー (左側) でサービスを選択し、サービスの詳細ページで [Configs](構成) タブに移動します。To modify a service's configuration settings, select the service from the Services sidebar (on the left), and then navigate to the Configs tab in the service detail page.

Apache Ambari のサービス サイドバー

NameNode の Java ヒープ サイズを変更するModify NameNode Java heap size

NameNode の Java ヒープ サイズは、クラスターの負荷、ファイル数、ブロック数などの多くの要素によって決まります。The NameNode Java heap size depends on many factors such as the load on the cluster, the numbers of files, and the numbers of blocks. 既定のサイズの 1 GB はほとんどのクラスターに適していますが、一部のワークロードではメモリを増減することが必要な場合があります。The default size of 1 GB works well with most clusters, although some workloads can require more or less memory.

NameNode の Java ヒープ サイズを変更するには、次の手順を実行します。To modify the NameNode Java heap size:

  1. [Services](サービス) サイドバーで [HDFS] を選択し、 [Configs](構成) タブに移動します。Select HDFS from the Services sidebar and navigate to the Configs tab.

    Apache Ambari の HDFS 構成

  2. [NameNode Java heap size](NameNode の Java ヒープ サイズ) 設定を見つけます。Find the setting NameNode Java heap size. フィルター テキスト ボックスに特定の設定を入力して検索することもできます。You can also use the filter text box to type and find a particular setting. 設定名の横のペン アイコンをクリックします。Select the pen icon beside the setting name.

    Apache Ambari の NameNode の Java ヒープ サイズ

  3. テキスト ボックスに新しい値を入力し、Enter キーを押して変更を保存します。Type the new value in the text box, and then press Enter to save the change.

    Ambari の NameNode の Java ヒープ サイズ 1 の編集

  4. NameNode の Java ヒープ サイズが 2 GB から 1 GB に変更されます。The NameNode Java heap size is changed to 1 GB from 2 GB.

    編集された NameNode の Java ヒープ サイズ 2

  5. 構成画面の上部にある緑色の [Save](保存) ボタンをクリックして変更を保存します。Save your changes by clicking on the green Save button on the top of the configuration screen.

    Ambari Ambari の構成の保存

Apache Hive の最適化Apache Hive optimization

以下のセクションでは、Apache Hive の全体的なパフォーマンスを最適化するための構成オプションについて説明します。The following sections describe configuration options for optimizing overall Apache Hive performance.

  1. Hive 構成パラメーターを変更するには、[Services](サービス) サイドバーで [Hive] を選択します。To modify Hive configuration parameters, select Hive from the Services sidebar.
  2. [Configs](構成) タブに移動します。Navigate to the Configs tab.

Hive 実行エンジンを設定するSet the Hive execution engine

Hive は、Apache Hadoop MapReduceApache TEZ の 2 つの実行エンジンを提供します。Hive provides two execution engines: Apache Hadoop MapReduce and Apache TEZ. Tez は MapReduce より高速です。Tez is faster than MapReduce. HDInsight Linux クラスターでは、既定の実行エンジンとして Tez を使用します。HDInsight Linux clusters have Tez as the default execution engine. 実行エンジンを変更するには、次の手順を実行します。To change the execution engine:

  1. Hive の [Configs](構成) タブで、フィルター ボックスに「execution engine」と入力します。In the Hive Configs tab, type execution engine in the filter box.

    Apache Ambari の実行エンジンの検索

  2. [Optimization](最適化) プロパティの既定値は Tez です。The Optimization property's default value is Tez.

    最適化 - Apache Tez エンジン

マッパーを調整するTune mappers

Hadoop では、1 つのファイルを複数のファイルに分割 ( "マップ" ) し、分割されたファイルの並列処理を試みます。Hadoop tries to split (map) a single file into multiple files and process the resulting files in parallel. マッパーの数は分割数によって異なります。The number of mappers depends on the number of splits. 次の 2 つの構成パラメーターは、Tez 実行エンジンの分割数を制御します。The following two configuration parameters drive the number of splits for the Tez execution engine:

  • tez.grouping.min-size:グループ化された分割のサイズの下限であり、既定値は 16 MB (16,777,216 バイト) です。tez.grouping.min-size: Lower limit on the size of a grouped split, with a default value of 16 MB (16,777,216 bytes).
  • tez.grouping.max-size:グループ化された分割のサイズの上限であり、既定値は 1 GB (1,073,741,824 バイト) です。tez.grouping.max-size: Upper limit on the size of a grouped split, with a default value of 1 GB (1,073,741,824 bytes).

パフォーマンスの目安として、これらのパラメーターの両方を減らすと待機時間が改善され、増やすとスループットが向上します。As a performance rule of thumb, decrease both of these parameters to improve latency, increase for more throughput.

たとえば、128 MB のデータ サイズに対して 4 つのマッパー タスクを設定するには、これらのパラメーターをそれぞれ 32 MB (33,554,432バイト) に設定します。For example, to set four mapper tasks for a data size of 128 MB, you would set both parameters to 32 MB each (33,554,432 bytes).

  1. 制限パラメーターを変更するには、Tez サービスの [Configs](構成) タブに移動します。To modify the limit parameters, navigate to the Configs tab of the Tez service. [General](全般) パネルを展開し、tez.grouping.max-size パラメーターと tez.grouping.min-size パラメーターを見つけます。Expand the General panel, and locate the tez.grouping.max-size and tez.grouping.min-size parameters.

  2. 両方のパラメーターを 33,554,432 バイト(32 MB) に設定します。Set both parameters to 33,554,432 bytes (32 MB).

    Apache Ambari の Tez のグループ化サイズ

これらの変更は、サーバーのすべての Tez ジョブに影響します。These changes affect all Tez jobs across the server. 最適な結果を得るために、適切なパラメーター値を選択してください。To get an optimal result, choose appropriate parameter values.

レジューサーを調整するTune reducers

Apache ORCSnappy は、どちらも高パフォーマンスを提供します。Apache ORC and Snappy both offer high performance. ただし、Hive は既定でレジューサーの数が少なすぎるため、ボトルネックが発生する可能性があります。However, Hive may have too few reducers by default, causing bottlenecks.

たとえば、入力データ サイズが 50 GB であるとします。For example, say you have an input data size of 50 GB. このデータを ORC 形式にして Snappy で圧縮すると 1 GB になります。That data in ORC format with Snappy compression is 1 GB. Hive では、(マッパーに入力されたバイト数/hive.exec.reducers.bytes.per.reducer) で必要なレジューサーの数を見積もります。Hive estimates the number of reducers needed as: (number of bytes input to mappers / hive.exec.reducers.bytes.per.reducer).

既定の設定を使用した場合、この例は 4 レジューサーになります。With the default settings, this example is 4 reducers.

hive.exec.reducers.bytes.per.reducer パラメーターは、レジューサーごとに処理されるバイト数を指定します。The hive.exec.reducers.bytes.per.reducer parameter specifies the number of bytes processed per reducer. 既定値は 64 MB です。The default value is 64 MB. この値を調整して並列処理を増やすと、パフォーマンスが向上する場合があります。Tuning this value down increases parallelism and may improve performance. また、値を小さくしすぎると、生成されるレジューサーが多すぎ、パフォーマンスに悪影響を及ぼす可能性があります。Tuning it too low could also produce too many reducers, potentially adversely affecting performance. このパラメーターは、特定のデータ要件、圧縮設定、その他の環境要因に基づきます。This parameter is based on your particular data requirements, compression settings, and other environmental factors.

  1. パラメーターを変更するには、Hive の [Configs](構成) タブに移動し、[Settings](設定) ページで [Data per Reducer](レジューサーごとのデータ) パラメーターを見つけます。To modify the parameter, navigate to the Hive Configs tab and find the Data per Reducer parameter on the Settings page.

    Apache Ambari のレジューサーごとのデータ

  2. [Edit](編集) を選択して値を 128 MB (134,217,728 バイト) に変更し、Enter キーを押して保存します。Select Edit to modify the value to 128 MB (134,217,728 bytes), and then press Enter to save.

    Ambari のレジューサーごとのデータ - 編集済み

    入力サイズが 1,024 MB、レジューサーごとのデータが 128 MB とすると、8 レジューサー (1024/128) になります。Given an input size of 1,024 MB, with 128 MB of data per reducer, there are 8 reducers (1024/128).

  3. [Data per Reducer](レジューサーごとのデータ) パラメーターの値が正しくない場合、多数のレジューサーが生成され、クエリのパフォーマンスに悪影響を及ぼす可能性があります。An incorrect value for the Data per Reducer parameter may result in a large number of reducers, adversely affecting query performance. レジューサーの最大数を制限するには、hive.exec.reducers.max を適切な値に設定します。To limit the maximum number of reducers, set hive.exec.reducers.max to an appropriate value. 既定値は 1009 です。The default value is 1009.

並列実行を有効にするEnable parallel execution

Hive クエリは、1 つ以上のステージで実行されます。A Hive query is executed in one or more stages. 独立したステージを並列実行できれば、クエリのパフォーマンスが向上します。If the independent stages can be run in parallel, that will increase query performance.

  1. クエリの並列実行を有効にするには、Hive の [Configs](構成) タブに移動し、hive.exec.parallel プロパティを検索します。To enable parallel query execution, navigate to the Hive Config tab and search for the hive.exec.parallel property. 既定値は false です。The default value is false. 値を true に変更し、Enter キーを押して値を保存します。Change the value to true, and then press Enter to save the value.

  2. 並列実行するジョブの数を制限するには、hive.exec.parallel.thread.number プロパティを変更します。To limit the number of jobs to run in parallel, modify the hive.exec.parallel.thread.number property. 既定値は 8 です。The default value is 8.

    Apache Hive の実行の並列表示

ベクター化を有効にするEnable vectorization

Hive では行単位でデータを処理します。Hive processes data row by row. ベクター化では、1 行ずつではなく、1,024 行のブロック単位でデータを処理するよう Hive に指示します。Vectorization directs Hive to process data in blocks of 1,024 rows rather than one row at a time. ベクター化は、ORC ファイル形式にのみ適用されます。Vectorization is only applicable to the ORC file format.

  1. ベクター化されたクエリ実行を有効にするには、Hive の [Configs](構成) タブに移動し、hive.vectorized.execution.enabled パラメーターを検索します。To enable a vectorized query execution, navigate to the Hive Configs tab and search for the hive.vectorized.execution.enabled parameter. Hive 0.13.0 以降では、既定値は true です。The default value is true for Hive 0.13.0 or later.

  2. クエリの Reduce 側でベクター化された実行を有効にするには、hive.vectorized.execution.reduce.enabled パラメーターを true に設定します。To enable vectorized execution for the reduce side of the query, set the hive.vectorized.execution.reduce.enabled parameter to true. 既定値は false です。The default value is false.

    Apache Hive のベクター化された実行

コストベースの最適化 (CBO) を有効にするEnable cost-based optimization (CBO)

既定では、Hive は一連のルールに従って、1 つの最適なクエリ実行プランを見つけます。By default, Hive follows a set of rules to find one optimal query execution plan. コストベースの最適化 (CBO) では、複数のクエリ実行プランを評価し、各プランにコストを割り当てて、最もコストがかからないクエリ実行プランを特定します。Cost-based optimization (CBO) evaluates multiple plans to execute a query and assigns a cost to each plan, then determines the cheapest plan to execute a query.

CBO を有効にするには、 [Hive] > [Configs](構成) > [Settings](設定) に移動し、 [Enable Cost Based Optimizer](コスト ベースのオプティマイザー を有効にする) を探して、トグル ボタンを [オン] に切り替えます。To enable CBO, navigate to Hive > Configs > Settings and find Enable Cost Based Optimizer, then switch the toggle button to On.

HDInsight のコストベースのオプティマイザー

CBO を有効にすると、次の追加の構成パラメーターによって Hive クエリのパフォーマンスが向上します。The following additional configuration parameters increase Hive query performance when CBO is enabled:

  • hive.compute.query.using.stats

    true に設定すると、Hive はその metastore に保存されている統計を使用して、count(*) のような単純なクエリに応答します。When set to true, Hive uses statistics stored in its metastore to answer simple queries like count(*).

    Apache Hive の統計を使用したクエリのコンピューティング

  • hive.stats.fetch.column.stats

    CBO を有効にすると、列統計が作成されます。Column statistics are created when CBO is enabled. Hive は metastore に保存されている列統計を使用して、クエリを最適化します。Hive uses column statistics, which are stored in metastore, to optimize queries. 列数が多い場合、各列の列統計のフェッチに時間がかかります。Fetching column statistics for each column takes longer when the number of columns is high. false に設定すると、metastore からの列統計のフェッチが無効になります。When set to false, this setting disables fetching column statistics from the metastore.

    Apache Hive の統計セットの列統計

  • hive.stats.fetch.partition.stats

    基本的なパーティション統計 (行数、データ サイズ、ファイル サイズなど) は metastore に保存されています。Basic partition statistics such as number of rows, data size, and file size are stored in metastore. true に設定すると、metastore からパーティション統計がフェッチされます。When set to true, the partition stats are fetched from metastore. false の場合、ファイル サイズはファイル システムからフェッチされ、行数は行スキーマからフェッチされます。When false, the file size is fetched from the file system, and the number of rows is fetched from the row schema.

    Hive 統計セットのパーティション統計

中間圧縮を有効にするEnable intermediate compression

マップ タスクによって、レジューサー タスクで使用される中間ファイルが作成されます。Map tasks create intermediate files that are used by the reducer tasks. 中間圧縮により、中間ファイルのサイズが縮小されます。Intermediate compression shrinks the intermediate file size.

通常、Hadoop ジョブでは I/O ボトルネックが発生します。Hadoop jobs are usually I/O bottlenecked. データを圧縮することで、I/O を高速化し、全体的なネットワーク転送速度を向上させることができます。Compressing data can speed up I/O and overall network transfer.

使用可能な圧縮の種類は次のとおりです。The available compression types are:

形式Format ツールTool アルゴリズムAlgorithm ファイル拡張子File Extension 分割可能かどうかSplittable?
GzipGzip GzipGzip DEFLATEDEFLATE .gz.gz いいえNo
Bzip2Bzip2 Bzip2Bzip2 Bzip2Bzip2 .bz2.bz2 はいYes
LZOLZO LzopLzop LZOLZO .lzo.lzo はい (インデックス付きの場合)Yes, if indexed
SnappySnappy 該当なしN/A SnappySnappy SnappySnappy いいえNo

原則として、分割可能な圧縮方法を使用することが重要です。そうしないと、作成されるマッパーがごく少数になります。As a general rule, having the compression method splittable is important, otherwise very few mappers will be created. 入力データがテキストの場合は、bzip2 が最適なオプションです。If the input data is text, bzip2 is the best option. ORC 形式の場合、Snappy が最速の圧縮オプションです。For ORC format, Snappy is the fastest compression option.

  1. 中間圧縮を有効にするには、Hive の [Configs](構成) タブに移動し、hive.exec.compress.intermediate パラメーターを true に設定します。To enable intermediate compression, navigate to the Hive Configs tab, and then set the hive.exec.compress.intermediate parameter to true. 既定値は false です。The default value is false.

    hive.exec.compress.intermediate

    注意

    中間ファイルを圧縮する場合、コーデックに高圧縮の出力がなくても、CPU コストが低い圧縮コーデックを選択します。To compress intermediate files, choose a compression codec with lower CPU cost, even if the codec doesn't have a high compression output.

  2. 中間圧縮コーデックを設定するには、mapred.map.output.compression.codec カスタム プロパティを hive-site.xml ファイルまたは mapred-site.xml ファイルに追加します。To set the intermediate compression codec, add the custom property mapred.map.output.compression.codec to the hive-site.xml or mapred-site.xml file.

  3. カスタム設定を追加するには、次の手順を実行します。To add a custom setting:

    a.a. [Hive] > [Configs](構成) > [Advanced](詳細) > [Custom hive-site](カスタム hive-site) に移動します。Navigate to Hive > Configs > Advanced > Custom hive-site.

    b.b. [Custom hive-site](カスタム hive-site) ウィンドウの下部にある [Add Property...](プロパティの追加...) を選択します。Select Add Property... at the bottom of the Custom hive-site pane.

    c.c. [Add Property](プロパティの追加) ウィンドウで、キーとして mapred.map.output.compression.codec、値として org.apache.hadoop.io.compress.SnappyCodec を入力します。In the Add Property window, enter mapred.map.output.compression.codec as the key and org.apache.hadoop.io.compress.SnappyCodec as the value.

    d.d. [追加] を選択します。Select Add.

    Apache Hive のカスタム プロパティの追加

    これで、Snappy 圧縮を使用して中間ファイルが圧縮されます。This will compress the intermediate file using Snappy compression. プロパティが追加されると、[Custom hive-site](カスタム hive-site) ウィンドウに表示されます。Once the property is added, it appears in the Custom hive-site pane.

    注意

    この手順により、$HADOOP_HOME/conf/hive-site.xml ファイルが変更されます。This procedure modifies the $HADOOP_HOME/conf/hive-site.xml file.

最終出力を圧縮するCompress final output

Hive の最終出力を圧縮することもできます。The final Hive output can also be compressed.

  1. Hive の最終出力を圧縮するには、Hive の [Configs](構成) タブに移動し、hive.exec.compress.output パラメーターを true に設定します。To compress the final Hive output, navigate to the Hive Configs tab, and then set the hive.exec.compress.output parameter to true. 既定値は false です。The default value is false.

  2. 出力圧縮コーデックを選択するには、前のセクションの手順 3. で説明したように、[Custom hive-site](カスタム hive-site) ウィンドウに mapred.output.compression.codec カスタム プロパティを追加します。To choose the output compression codec, add the mapred.output.compression.codec custom property to the Custom hive-site pane, as described in the previous section's step 3.

    Apache Hive のカスタム プロパティの追加 2

予測実行を有効にするEnable speculative execution

予測実行では、実行速度の遅いタスク トラッカーを検出してブラックリストに登録するために、一定数の重複タスクを開始し、個々のタスクの結果を最適化することで、全体的なジョブ実行を改善します。Speculative execution launches a certain number of duplicate tasks in order to detect and blacklist the slow-running task tracker, while improving the overall job execution by optimizing individual task results.

大量の入力を伴う実行時間の長い MapReduce タスクでは、予測実行を有効にしないでください。Speculative execution shouldn't be turned on for long-running MapReduce tasks with large amounts of input.

  • 予測実行を有効にするには、Hive の [Configs](構成) タブに移動し、hive.mapred.reduce.tasks.speculative.execution パラメーターを true に設定します。To enable speculative execution, navigate to the Hive Configs tab, and then set the hive.mapred.reduce.tasks.speculative.execution parameter to true. 既定値は false です。The default value is false.

    hive.mapred.reduce.tasks.speculative.execution

動的パーティションを調整するTune dynamic partitions

Hive では、個々のパーティションを事前に定義せずに、レコードをテーブルに挿入するときに動的パーティションを作成できます。Hive allows for creating dynamic partitions when inserting records into a table, without predefining each and every partition. これは強力な機能ですが、多数のパーティションが作成され、パーティションごとに多数のファイルが作成される可能性があります。This is a powerful feature, although it may result in the creation of a large number of partitions and a large number of files for each partition.

  1. Hive で動的パーティションを実行するには、hive.exec.dynamic.partition パラメーターの値が true (既定値) である必要があります。For Hive to do dynamic partitions, the hive.exec.dynamic.partition parameter value should be true (the default).

  2. 動的パーティション モードを strict に変更します。Change the dynamic partition mode to strict. strict モードでは、少なくとも 1 つのパーティションが静的である必要があります。In strict mode, at least one partition has to be static. これにより、WHERE 句にパーティション フィルターがないクエリを防ぐことができます。つまり、strict はすべてのパーティションをスキャンするクエリを防ぎます。This prevents queries without the partition filter in the WHERE clause, that is, strict prevents queries that scan all partitions. Hive の [Configs](構成) タブに移動し、hive.exec.dynamic.partition.modestrict に設定します。Navigate to the Hive Configs tab, and then set hive.exec.dynamic.partition.mode to strict. 既定値は nonstrict です。The default value is nonstrict.

  3. 作成する動的パーティションの数を制限するには、hive.exec.max.dynamic.partitions パラメーターを変更します。To limit the number of dynamic partitions to be created, modify the hive.exec.max.dynamic.partitions parameter. 既定値は 5000 です。The default value is 5000.

  4. ノードあたりの動的パーティションの総数を制限するには、hive.exec.max.dynamic.partitions.pernode を変更します。To limit the total number of dynamic partitions per node, modify hive.exec.max.dynamic.partitions.pernode. 既定値は 2000 です。The default value is 2000.

ローカル モードを有効にするEnable local mode

ローカル モードでは、Hive は 1 つのマシンまたは場合によっては 1 つのプロセスでジョブのすべてのタスクを実行できます。Local mode enables Hive to perform all tasks of a job on a single machine, or sometimes in a single process. 入力データが小さく、クエリのタスクを開始するオーバーヘッドがクエリの全体的な実行のかなりの割合を消費する場合、クエリのパフォーマンスが向上します。This improves query performance if the input data is small and the overhead of launching tasks for queries consumes a significant percentage of the overall query execution.

ローカル モードを有効にするには、「中間圧縮を有効にする」の手順 3. で説明したように、[Custom hive-site](カスタム hive-site) ウィンドウに hive.exec.mode.local.auto パラメーターを追加します。To enable local mode, add the hive.exec.mode.local.auto parameter to the Custom hive-site panel, as explained in step 3 of the Enable intermediate compression section.

Apache Hive の実行モードのローカル オート

単一の MapReduce の MultiGROUP BY を設定するSet single MapReduce MultiGROUP BY

このプロパティを true に設定すると、共通の group-by キーを使用する MultiGROUP BY クエリによって、単一の MapReduce ジョブが生成されます。When this property is set to true, a MultiGROUP BY query with common group-by keys generates a single MapReduce job.

この動作を有効にするには、「中間圧縮を有効にする」の手順 3. で説明したように、[Custom hive-site](カスタム hive-site) ウィンドウに hive.multigroupby.singlereducer パラメーターを追加します。To enable this behavior, add the hive.multigroupby.singlereducer parameter to the Custom hive-site pane, as explained in step 3 of the Enable intermediate compression section.

Hive で単一の MapReduce の MultiGROUP BY を設定

Hive のその他の最適化Additional Hive optimizations

以下のセクションでは、設定可能な Hive 関連のその他の最適化について説明します。The following sections describe additional Hive-related optimizations you can set.

結合の最適化Join optimizations

Hive の既定の結合の種類は "シャッフル結合" です。The default join type in Hive is a shuffle join. Hive では、特別なマッパーが入力を読み取り、中間ファイルに結合キーと値のペアを生成します。In Hive, special mappers read the input and emit a join key/value pair to an intermediate file. Hadoop は、シャッフル ステージでこれらのペアを並べ替えてマージします。Hadoop sorts and merges these pairs in a shuffle stage. このシャッフル ステージはコストがかかります。This shuffle stage is expensive. データに基づいて適切な結合を選択すると、パフォーマンスを大幅に向上させることができます。Selecting the right join based on your data can significantly improve performance.

結合の種類Join Type タイミングWhen 方法How Hive の設定Hive settings 説明Comments
シャッフル結合Shuffle Join
  • 既定の選択肢Default choice
  • 常に動作Always works
  • テーブルの 1 つの一部から読み取るReads from part of one of the tables
  • 結合キーをバケット処理して並べ替えるBuckets and sorts on Join key
  • 各 Reduce にバケットを 1 つ送信するSends one bucket to each reduce
  • 結合は Reduce 側で実行されるJoin is done on the Reduce side
Hive の重要な設定は不要No significant Hive setting needed 毎回動作するWorks every time
マップ結合Map Join
  • 1 つのテーブルがメモリに収まるOne table can fit in memory
  • 小さなテーブルをメモリ ハッシュ テーブルに読み込むReads small table into memory hash table
  • 大きなファイルの一部からストリーミングするStreams through part of the large file
  • ハッシュ テーブルの各レコードを結合するJoins each record from hash table
  • 結合はマッパーが単独で実行するJoins are by the mapper alone
hive.auto.confvert.join=true 非常に高速だが制限があるVery fast, but limited
並べ替え/マージ/バケット処理Sort Merge Bucket 両方のテーブルが次の状態の場合:If both tables are:
  • 同様に並べ替えられているSorted the same
  • 同様にバケット処理されているBucketed the same
  • 並べ替え/バケット処理が行われた列で結合しているJoining on the sorted/bucketed column
各プロセス:Each process:
  • 各テーブルからバケットを読み取るReads a bucket from each table
  • 最小値を含む行を処理するProcesses the row with the lowest value
hive.auto.convert.sortmerge.join=true 非常に効率的Very efficient

実行エンジンの最適化Execution engine optimizations

Hive 実行エンジンの最適化に関するその他の推奨事項を次に示します。Additional recommendations for optimizing the Hive execution engine:

SettingSetting 推奨Recommended HDInsight の既定値HDInsight Default
hive.mapjoin.hybridgrace.hashtable True = 安全性は高いが低速、false = 高速True = safer, slower; false = faster falsefalse
tez.am.resource.memory.mb ほとんどの場合、上限は 4 GB4 GB upper bound for most Auto-TunedAuto-Tuned
tez.session.am.dag.submit.timeout.secs 300+300+ 300300
tez.am.container.idle.release-timeout-min.millis 20000+20000+ 1000010000
tez.am.container.idle.release-timeout-max.millis 40000+40000+ 2000020000

Apache Pig の最適化Apache Pig optimization

Ambari Web UI から Apache Pig プロパティを変更して、Pig クエリを調整できます。Apache Pig properties can be modified from the Ambari web UI to tune Pig queries. Ambari から Pig プロパティを変更すると、/etc/pig/2.4.2.0-258.0/pig.properties ファイルの Pig プロパティが直接変更されます。Modifying Pig properties from Ambari directly modifies the Pig properties in the /etc/pig/2.4.2.0-258.0/pig.properties file.

  1. Pig プロパティを変更するには、Pig の [Configs](構成) タブに移動し、 [Advanced pig-properties](高度な pig-properties) ウィンドウを展開します。To modify Pig properties, navigate to the Pig Configs tab, and then expand the Advanced pig-properties pane.

  2. 変更するプロパティの値を見つけ、コメント解除して変更します。Find, uncomment, and change the value of the property you wish to modify.

  3. ウィンドウの右上の [Save](保存) をクリックして新しい値を保存します。Select Save on the top-right side of the window to save the new value. 一部のプロパティでは、サービスの再起動が必要な場合があります。Some properties may require a service restart.

    Advanced Apache pig プロパティ

注意

セッション レベルの設定によって、pig.properties ファイルのプロパティ値がオーバーライドされます。Any session-level settings override property values in the pig.properties file.

実行エンジンを調整するTune execution engine

Pig スクリプトを実行するために、MapReduce と Tez の 2 つの実行エンジンを使用できます。Two execution engines are available to execute Pig scripts: MapReduce and Tez. Tez は最適化されたエンジンであり、MapReduce よりもはるかに高速です。Tez is an optimized engine and is much faster than MapReduce.

  1. 実行エンジンを変更するには、 [Advanced pig-properties](高度な pig-properties) ウィンドウで、exectype プロパティを見つけます。To modify the execution engine, in the Advanced pig-properties pane, find the property exectype.

  2. 既定値は MapReduce です。The default value is MapReduce. これを Tez に変更します。Change it to Tez.

ローカル モードを有効にするEnable local mode

Hive と同様に、データ量が比較的少ないジョブを高速化するにはローカル モードを使用します。Similar to Hive, local mode is used to speed jobs with relatively smaller amounts of data.

  1. ローカル モードを有効にするには、pig.auto.local.enabledtrue に設定します。To enable the local mode, set pig.auto.local.enabled to true. 既定値は false です。The default value is false.

  2. 入力データ サイズが pig.auto.local.input.maxbytes プロパティ値よりも小さいジョブは、小さなジョブと見なされます。Jobs with an input data size less than the pig.auto.local.input.maxbytes property value are considered to be small jobs. 既定値は 1 GB です。The default value is 1 GB.

ユーザー JAR キャッシュをコピーするCopy user jar cache

Pig では、UDF に必要な JAR ファイルを分散キャッシュにコピーして、タスク ノードで使用できるようにします。Pig copies the JAR files required by UDFs to a distributed cache to make them available for task nodes. これらの JAR は、頻繁に変更されることはありません。These jars don't change frequently. 有効にした場合、pig.user.cache.enabled 設定を使用して、JAR をキャッシュに配置し、同じユーザーが実行するジョブで再利用できます。If enabled, the pig.user.cache.enabled setting allows jars to be placed in a cache to reuse them for jobs run by the same user. これにより、ジョブのパフォーマンスが少し向上します。This results in a minor increase in job performance.

  1. 有効にするには、pig.user.cache.enabled を true に設定します。To enable, set pig.user.cache.enabled to true. 既定値は false です。The default is false.

  2. キャッシュされた JAR のベース パスを設定するには、pig.user.cache.location をベース パスに設定します。To set the base path of the cached jars, set pig.user.cache.location to the base path. 既定では、 /tmpです。The default is /tmp.

メモリ設定を使用してパフォーマンスを最適化するOptimize performance with memory settings

次のメモリ設定は、Pig スクリプトのパフォーマンスの最適化に役立ちます。The following memory settings can help optimize Pig script performance.

  • pig.cachedbag.memusage:バッグに割り当てられたメモリの量。pig.cachedbag.memusage: The amount of memory allocated to a bag. バッグとはタプルのコレクションです。A bag is collection of tuples. タプルとはフィールドの順序付けされたセットであり、フィールドとはデータの一部です。A tuple is an ordered set of fields, and a field is a piece of data. バッグ内のデータが割り当てられたメモリ容量を超えた場合はディスクに書き込まれます。If the data in a bag is beyond the allocated memory, it's spilled to disk. 既定値は 0.2 です。これは使用可能なメモリの 20% を表します。The default value is 0.2, which represents 20 percent of available memory. このメモリは、アプリケーションのすべてのバッグで共有されます。This memory is shared across all bags in an application.

  • pig.spill.size.threshold:この書き込みサイズのしきい値 (バイト単位) より大きいバッグがディスクに書き込まれます。pig.spill.size.threshold: Bags larger than this spill size threshold (in bytes) are spilled to disk. 既定値は 5 MB です。The default value is 5 MB.

一時ファイルを圧縮するCompress temporary files

Pig では、ジョブの実行中に一時ファイルが生成されます。Pig generates temporary files during job execution. 一時ファイルを圧縮すると、ファイルの読み取り時やディスクへの書き込み時にパフォーマンスが向上します。Compressing the temporary files results in a performance increase when reading or writing files to disk. 一時ファイルを圧縮するには、次の設定を使用します。The following settings can be used to compress temporary files.

  • pig.tmpfilecompression:true の場合は、一時ファイルの圧縮が有効になります。pig.tmpfilecompression: When true, enables temporary file compression. 既定値は false です。The default value is false.

  • pig.tmpfilecompression.codec:一時ファイルの圧縮に使用する圧縮コーデック。pig.tmpfilecompression.codec: The compression codec to use for compressing the temporary files. CPU 使用率を削減するために推奨される圧縮コーデックは LZO と Snappy です。The recommended compression codecs are LZO and Snappy for lower CPU utilization.

分割結合を有効にするEnable split combining

有効にすると、マップ タスクを減らすために小さなファイルが結合されます。When enabled, small files are combined for fewer map tasks. これにより、多数の小さなファイルを使用するジョブの効率が向上します。This improves the efficiency of jobs with many small files. 有効にするには、pig.noSplitCombination を true に設定します。To enable, set pig.noSplitCombination to true. 既定値は false です。The default value is false.

マッパーを調整するTune mappers

マッパーの数を制御するには、pig.maxCombinedSplitSize プロパティを変更します。The number of mappers is controlled by modifying the property pig.maxCombinedSplitSize. このプロパティは、1 つのマップ タスクで処理されるデータのサイズを指定します。This specifies the size of the data to be processed by a single map task. 既定値は、ファイル システムの既定のブロック サイズです。The default value is the filesystem's default block size. この値を増やすと、マッパー タスクの数が減少します。Increasing this value results in a decrease of the number of mapper tasks.

レジューサーを調整するTune reducers

レジューサーの数は、pig.exec.reducers.bytes.per.reducer パラメーターに基づいて計算されます。The number of reducers is calculated based on the parameter pig.exec.reducers.bytes.per.reducer. このパラメーターは、レジューサーごとに処理されるバイト数を指定します。既定値は 1 GB です。The parameter specifies the number of bytes processed per reducer, by default 1 GB. レジューサーの最大数を制限するには、pig.exec.reducers.max プロパティを設定します。既定値は 999 です。To limit the maximum number of reducers, set the pig.exec.reducers.max property, by default 999.

Ambari Web UI を使用した Apache HBase の最適化Apache HBase optimization with the Ambari web UI

Apache HBase の構成は、 [HBase Configs] (HBase の構成) タブから変更されます。以下のセクションでは、HBase のパフォーマンスに影響する重要な構成設定について説明します。Apache HBase configuration is modified from the HBase Configs tab. The following sections describe some of the important configuration settings that affect HBase performance.

HBASE_HEAPSIZE を設定するSet HBASE_HEAPSIZE

HBase のヒープ サイズは、"リージョン" サーバーと "マスター" サーバーが使用するヒープの最大量 (メガバイト単位) を示します。The HBase heap size specifies the maximum amount of heap to be used in megabytes by region and master servers. 既定値は 1,000 MB です。The default value is 1,000 MB. クラスター ワークロードに合わせて、これを調整する必要があります。This should be tuned for the cluster workload.

  1. 変更するには、HBase の [Configs](構成) タブの [Advanced HBase-env](高度な HBase-env) ウィンドウに移動し、HBASE_HEAPSIZE 設定を見つけます。To modify, navigate to the Advanced HBase-env pane in the HBase Configs tab, and then find the HBASE_HEAPSIZE setting.

  2. 既定値を 5,000 MB に変更します。Change the default value to 5,000 MB.

    Apache Ambari の HBase メモリのヒープ サイズ

読み取り負荷の高いワークロードを最適化するOptimize read-heavy workloads

読み取り負荷の高いワークロードのパフォーマンスを向上させるには、次の構成が重要です。The following configurations are important to improve the performance of read-heavy workloads.

ブロック キャッシュ サイズBlock cache size

ブロック キャッシュは読み取りキャッシュです。The block cache is the read cache. そのサイズは、hfile.block.cache.size パラメーターで制御されます。Its size is controlled by the hfile.block.cache.size parameter. 既定値は 0.4 です。これは、リージョン サーバーのメモリ合計の 40% を表します。The default value is 0.4, which is 40 percent of the total region server memory. ブロック キャッシュ サイズが大きいほど、ランダム読み取りが高速化されます。The larger the block cache size, the faster the random reads will be.

  1. このパラメーターを変更するには、HBase の [Configs](構成) タブの [Settings](設定) タブに移動し、 [% of RegionServer Allocated to Read Buffers](読み取りバッファーに割り当てられた RegionServer の割合 (%)) を見つけます。To modify this parameter, navigate to the Settings tab in the HBase Configs tab, and then locate % of RegionServer Allocated to Read Buffers.

    Apache HBase のメモリ ブロック キャッシュ サイズ

  2. 値を変更するには、 [Edit](編集) アイコンを選択します。To change the value, select the Edit icon.

Memstore のサイズMemstore size

すべての編集内容は、Memstore と呼ばれるメモリ バッファーに保存されます。All edits are stored in the memory buffer, called a Memstore. これにより、1 つの操作でディスクに書き込むことができるデータの総量が増加し、最近の編集内容への以降のアクセスが高速化されます。This increases the total amount of data that can be written to disk in a single operation, and it speeds subsequent access to the recent edits. Memstore のサイズは、次の 2 つのパラメーターで定義します。The Memstore size is defined by the following two parameters:

  • hbase.regionserver.global.memstore.UpperLimit:結合された Memstore が使用できるリージョン サーバーの最大パーセンテージを定義します。hbase.regionserver.global.memstore.UpperLimit: Defines the maximum percentage of the region server that Memstore combined can use.

  • hbase.regionserver.global.memstore.LowerLimit:結合された Memstore が使用できるリージョン サーバーの最小パーセンテージを定義します。hbase.regionserver.global.memstore.LowerLimit: Defines the minimum percentage of the region server that Memstore combined can use.

ランダム読み取りに最適化するには、Memstore の上限と下限を減らします。To optimize for random reads, you can reduce the Memstore upper and lower limits.

ディスクからのスキャン時にフェッチされる行数Number of rows fetched when scanning from disk

hbase.client.scanner.caching 設定では、スキャナーで next メソッドが呼び出されたときにディスクから読み取る行数を定義します。The hbase.client.scanner.caching setting defines the number of rows read from disk when the next method is called on a scanner. 既定値は 100 です。The default value is 100. この数が多いほど、クライアントからリージョン サーバーに対して行われるリモート呼び出しが減り、スキャンが高速化されます。The higher the number, the fewer the remote calls made from the client to the region server, resulting in faster scans. ただし、クライアントのメモリ負荷も増加します。However, this will also increase memory pressure on the client.

Apache HBase のフェッチされる行数

重要

スキャナーでの次のメソッドの呼び出しまでの時間がスキャナーのタイムアウトよりも長くなるような値を設定しないでください。Do not set the value such that the time between invocation of the next method on a scanner is greater than the scanner timeout. スキャナーのタイムアウト期間は、hbase.regionserver.lease.period プロパティで定義します。The scanner timeout duration is defined by the hbase.regionserver.lease.period property.

書き込み負荷の高いワークロードを最適化するOptimize write-heavy workloads

書き込み負荷の高いワークロードのパフォーマンスを向上させるには、次の構成が重要です。The following configurations are important to improve the performance of write-heavy workloads.

リージョンの最大ファイル サイズMaximum region file size

HBase では、HFile と呼ばれる内部ファイル形式でデータを保存します。HBase stores data in an internal file format, called HFile. hbase.hregion.max.filesize プロパティは、リージョンの 1 つの HFile のサイズを定義します。The property hbase.hregion.max.filesize defines the size of a single HFile for a region. リージョンのすべての HFile の合計がこの設定より大きい場合、リージョンが 2 つのリージョンに分割されます。A region is split into two regions if the sum of all HFiles in a region is greater than this setting.

Apache HBase の HRegion 最大ファイル サイズ

リージョンのファイル サイズが大きいほど、分割数が少なくなります。The larger the region file size, the smaller the number of splits. ファイル サイズを増やして、書き込みパフォーマンスが最大になる値を指定できます。You can increase the file size to determine a value that results in the maximum write performance.

更新がブロックされないようにするAvoid update blocking

  • Memstore が hbase.hregion.memstore.flush.size プロパティで定義されたサイズに達すると、ディスクにフラッシュされます。The property hbase.hregion.memstore.flush.size defines the size at which Memstore is flushed to disk. 既定のサイズは 128 MB です。The default size is 128 MB.

  • HBase リージョンのブロックの乗数は、hbase.hregion.memstore.block.multiplier で定義されています。The HBase region block multiplier is defined by hbase.hregion.memstore.block.multiplier. 既定値は 4 ですが、The default value is 4. 最大許容値は 8 です。The maximum allowed is 8.

  • Memstore が (hbase.hregion.memstore.flush.size * hbase.hregion.memstore.block.multiplier) バイトになると、HBase は更新をブロックします。HBase blocks updates if the Memstore is (hbase.hregion.memstore.flush.size * hbase.hregion.memstore.block.multiplier) bytes.

    フラッシュ サイズとブロック乗数の既定値を使用した場合、Memstore のサイズが 128 * 4 = 512 MB になると更新がブロックされます。With the default values of flush size and block multiplier, updates are blocked when Memstore is 128 * 4 = 512 MB in size. 更新のブロックの数を減らすには、hbase.hregion.memstore.block.multiplier の値を増やします。To reduce the update blocking count, increase the value of hbase.hregion.memstore.block.multiplier.

Apache HBase のリージョンのブロック乗数

Memstore のサイズを定義するDefine Memstore size

Memstore のサイズは、hbase.regionserver.global.memstore.UpperLimit パラメーターと hbase.regionserver.global.memstore.LowerLimit パラメーターで定義します。Memstore size is defined by the hbase.regionserver.global.memstore.UpperLimit and hbase.regionserver.global.memstore.LowerLimit parameters. これらを相互に等しい値に設定すると、書き込み中の一時停止が減り (フラッシュの頻度も増えるため)、書き込みパフォーマンスが向上します。Setting these values equal to each other reduces pauses during writes (also causing more frequent flushing) and results in increased write performance.

Memstore のローカル割り当てバッファーを設定するSet Memstore local allocation buffer

Memstore のローカル割り当てバッファーの使用は、hbase.hregion.memstore.mslab.enabled プロパティで指定します。Memstore local allocation buffer usage is determined by the property hbase.hregion.memstore.mslab.enabled. 有効 (true) にすると、負荷の高い書き込み操作中にヒープの断片化を防ぐことができます。When enabled (true), this prevents heap fragmentation during heavy write operation. 既定値は true です。The default value is true.

hbase.hregion.memstore.mslab.enabled

次の手順Next steps