ステップ 6: 設定のレビュー - Amazon EMR

ステップ 6: 設定のレビュー

構成設定では、タスクを再試行する回数およびソートに利用できるメモリ量など、クラスターの実行方法に関する詳細を指定します。Amazon EMR を使用してクラスターを起動すると、標準の Hadoop 設定に加えて、Amazon EMR 固有の設定があります。構成設定はクラスターのマスターノードに保存されます。構成設定を確認し、効率的に実行するのに必要なリソースがクラスターにあるようにできます。

Amazon EMR は、クラスターの起動に使用されるデフォルトの Hadoop 設定を定義します。この値は、クラスターに指定した AMI およびインスタンスに基づいています。ブートストラップアクションを使用したデフォルトの値から、またはジョブ実行パラメータに新しい値を指定することによって、構成設定を変更できます。詳細については、「追加のソフトウェアをインストールするためのブートストラップアクションの作成」を参照してください。ブートストラップアクションで構成設定を変更したかどうかを判定するには、ブートストラップアクションログを確認します。

Amazon EMR は、各ジョブの実行に使用された Hadoop 設定をログに記録します。ログデータは、マスターノードの /mnt/var/log/hadoop/history/ ディレクトリに job_job-id_conf.xml という名前のファイルで存されます。ここで job-id はジョブの識別子で置換されます。ログのアーカイブを有効にしている場合、このデータは Simple Storage Service (Amazon S3) の logs/date/jobflow-id/jobs フォルダーにコピーされます。ここで date はジョブが実行された日付、jobflow-id はクラスターの識別子です。

次の Hadoop ジョブ構成設定は、パフォーマンスの問題を調査するのに特に役立ちます。Hadoop の構成設定および Hadoop の動作にどのように影響するかについては、http://hadoop.apache.org/docs/ を参照してください。

警告
  1. ノードが 4 つ未満のクラスターで dfs.replication を 1 に設定すると、単一ノードがダウンした場合に HDFS データが失われる可能性があります。本番環境のワークロードには、少なくとも 4 つのコアノードを持つクラスターを使用することをお勧めします。

  2. Amazon EMR では、クラスターはコアノードを dfs.replication 未満にスケールすることはできません。例えば、dfs.replication = 2 の場合、コアノードの最小数は 2 です。

  3. マネージドスケーリングや自動スケーリングを使用する場合や、クラスターのサイズを手動で変更する場合は、dfs.replication を 2 以上に設定することをお勧めします。

構成設定 説明
dfs.replication RAID のような環境を生成するために、単一ブロック(ハードドライブブロックなど)がコピーされる HDFS ノードの数。ブロックのコピーを含んでいる HDFS のノード数を決定します。
io.sort.mb ソートに利用可能な合計メモリ。この値は io.sort.factor の 10 倍になります。この設定は、io.sort.mb に mapred.tasktracker.ap.tasks.maximum を掛けて計算して、タスクノードが使用する合計メモリを計算するためにも使用できます。
io.sort.spill.percent 割り当てられたソートメモリがいっぱいであるため、ディスクが使用を開始するポイントでソート中に使用されます。
mapred.child.java.opts 廃止済み。代わりに、mapred.map.child.java.opts および mapred.reduce.child.java.opts を使用します。TaskTracker が内部で実行するタスク用に JVM を起動する際に使用する Java オプション。共通パラメータは、最大メモリサイズの設定用の "-Xmx" です。
mapred.map.child.java.opts TaskTracker が内部で実行するマップタスク用に JVM を起動する際に使用する Java オプション。共通パラメータは、最大メモリヒープサイズの設定用の "-Xmx" です。
mapred.map.tasks.speculative.execution 同じタスクのマップタスク試行を並行して起動できるかどうかを決定します。
mapred.reduce.tasks.speculative.execution 同じタスクのリデュースタスク試行を並行して起動できるかどうかを決定します。
mapred.map.max.attempts マップタスクの最大試行回数。すべてが失敗した場合、マップタスクは失敗としてマークされます。
mapred.reduce.child.java.opts TaskTracker が内部で実行する Reduce タスク用に JVM を起動する際に使用する Java オプション。共通パラメータは、最大メモリヒープサイズの設定用の "-Xmx" です。
mapred.reduce.max.attempts Reduce タスクの最大試行回数。すべてが失敗した場合、マップタスクは失敗としてマークされます。
mapred.reduce.slowstart.completed.maps Reduce タスクが試行される前に完了する必要のある Map タスクの量。待機時間が足りないと、試行中に「Too many fetch-failure」エラーが発生する場合があります。
mapred.reuse.jvm.num.tasks タスクは単一の JVM 内で実行されます。同じ JVM を再利用できるタスク数を指定します。
mapred.tasktracker.map.tasks.maximum マッピング中のタスクノードごとに並行して実行できる最大タスク数。
mapred.tasktracker.reduce.tasks.maximum 減らしている間のタスクノードごとに並行して実行できる最大タスク数。

クラスタータスクがメモリを大量に使用する場合、コアノードごとに使うタスクの数を減らしてジョブトラッカーのヒープサイズを減らすと、パフォーマンスを向上させることができます。