Rumen



概要

Rumen は、Apache Hadoop 向けに構築されたデータ抽出および分析ツールです。 Rumen は、JobHistory ログをマイニングして有意義なデータを抽出し、解析しやすい簡潔な形式、つまり ダイジェスト に保存します。MapReduceログからの生のトレースデータは、シミュレーション、エミュレーション、ベンチマークには不十分なことがよくあります。これらのツールは、ソースデータでは発生しなかった条件を測定しようとするためです。たとえば、タスクが生のトレースデータでローカルに実行されたが、スケジューラのシミュレーションでそのタスクをリモートラックで実行することを選択した場合、シミュレータには入力が提供できないランタイムが必要です。これらのギャップを埋めるために、Rumen はダイジェストの統計分析を実行して、トレースが提供しない変数を推定します。Rumenトレースは、Gridmix(Hadoop MapReduceクラスタのベンチマーク)とSLS(リソースマネージャスケジューラのシミュレータ)の両方を駆動します。

動機

  • JobHistory ログから有意義なデータを抽出することは、MapReduce で動作するように構築されたツールにとって一般的なタスクです。 MapReduce フレームワークと緊密に結合されたカスタムツールを作成するのは面倒です。そのため、ログの解析と分析というフレームワークレベルのタスクを実行するための組み込みツールが必要です。このようなツールは、ジョブ履歴形式に加えられた変更から、ジョブ履歴に依存する外部システムを隔離します。

  • タスクランタイム、タスク障害など のような MapReduceジョブ のさまざまな属性の統計分析を実行することは、ベンチマークおよびシミュレーションツールが必要とするもう1つの一般的なタスクです。 Rumen は、Map/Reduceタスクランタイムの 累積分布関数(CDF) を生成します。ランタイムCDFを使用して、不完全、欠落、および合成タスクのタスクランタイムを外挿できます。同様に、CDFは、試行ごとに成功したタスクの総数についても計算されます。

コンポーネント

Rumen は2つのコンポーネントで構成されています

  • トレースビルダーJobHistory ログを解析しやすい形式に変換します。現在、TraceBuilder はトレースを JSON 形式で出力します。

  • *フォルダー*:入力トレースをスケーリングするためのユーティリティ。 TraceBuilder から取得したトレースは、入力フォルダーとファイル内のジョブを要約したものです。特定のトレース内のすべてのジョブが終了するまでの期間は、トレースランタイムと見なすことができます。 フォルダー を使用して、トレースのランタイムをスケーリングできます。トレースランタイムを短縮するには、入力トレースから一部のジョブを削除し、残りのジョブのランタイムを縮小する必要があります。トレースランタイムを延長するには、結果のトレースにダミージョブを追加し、個々のジョブのランタイムを拡大する必要があります。

Rumenの使い方

JobHistory ログを目的のジョブトレースに変換するには、次の2つの手順が必要です

  1. 中間形式への情報の抽出

  2. 中間トレースから取得したジョブトレースを調整して、目的のプロパティを持つようにします。

JobHistory ログからの情報の抽出は、1回限りの操作です。このいわゆる ゴールドトレース は、output-durationconcentration などのプロパティの目的の値を持つトレースを生成するために再利用できます。

Rumen は2つの基本コマンドを提供します

  • TraceBuilder
  • フォルダー

まず、ゴールドトレース を生成する必要があります。そのため、最初の手順は、ジョブ履歴フォルダーで TraceBuilder を実行することです。 TraceBuilder の出力は、ジョブトレースファイル(およびオプションのクラスタートポロジファイル)です。出力をスケーリングする場合、Folder ユーティリティを使用して現在のトレースを目的の長さに折りたたむことができます。このセクションの残りの部分では、これらのユーティリティについて詳しく説明します。

トレースビルダー

コマンド

hadoop rumentrace [options] <jobtrace-output> <topology-output> <inputs>

このコマンドは、RumenTraceBuilder ユーティリティを呼び出します.

TraceBuilder は JobHistory ファイルを JSON オブジェクトのシリーズに変換し、それらを <jobtrace-output> ファイルに書き込みます。また、クラスタレイアウト (トポロジ) を抽出して <topology-output> ファイルに書き込みます。 <inputs> は、JobHistory ファイルとフォルダのスペース区切りリストを表します.

1) TraceBuilder への入力と出力は、完全修飾ファイルシステムパスである必要があります。そのため、local ファイルシステム上のファイルを指定するには file:// を使用し、HDFS 上のファイルを指定するには hdfs:// を使用します。入力ファイルまたはフォルダはファイルシステムパスであるため、グロブ化できます。これは、正規表現を使用して複数のファイルパスを指定する場合に役立ちます.

2) デフォルトでは、TraceBuilder はジョブ履歴ファイルの入力フォルダを再帰的にスキャンしません。入力フォルダの直下に配置されているファイルのみが、トレースの生成時に考慮されます。入力ディレクトリを再帰的にスキャンすることで、入力ディレクトリの下にあるすべてのファイルを追加するには、 `-recursive` オプションを使用します.

クラスタートポロジは次のように使用されます

  • 分割を再構築し、実際の実行で見られる距離/レイテンシが正しくモデル化されていることを確認するため.

  • 分割の詳細が欠落しているタスクまたは合成的に生成されたタスクの分割情報を外挿するため.

オプション

パラメータ 説明 備考
-demuxer jobhistory ファイルを読み取るために使用されます。デフォルトは DefaultInputDemuxer です. Demuxer は、入力ファイルが jobhistory ファイルにどのようにマップされるかを決定します。ジョブ履歴ログとジョブ構成ファイルは通常小さなファイルであり、SequenceFile や TFile などのコンテナファイル形式に埋め込むと、より効果的に保存できます。このようなユースケースをサポートするために、ソースファイルから個々のジョブ履歴ログとジョブ構成ファイルを抽出できるカスタマイズされた Demuxer クラスを指定できます.
-recursive ジョブ履歴ログの入力パスを再帰的に走査します. このオプションは、TraceBuilder に入力パスを再帰的にスキャンし、その下のすべてのファイルを処理するように指示するために使用されます。デフォルトでは、入力フォルダの直下にある履歴ログのみがトレースの生成時に考慮されることに注意してください.

hadoop rumentrace \
  file:///tmp/job-trace.json \
  file:///tmp/job-topology.json \
  hdfs:///tmp/hadoop-yarn/staging/history/done_intermediate/testuser

これは、HDFS ファイルシステムに保存されている /tmp/hadoop-yarn/staging/history/done_intermediate/testuser 内のすべてのジョブを分析し、local ファイルシステムに保存されている /tmp/job-trace.json にジョブトレースを出力し、/tmp/job-topology.json にトポロジ情報を出力します.

フォルダー

コマンド

hadoop rumenfolder [options] [input] [output]

このコマンドは、RumenFolder ユーティリティを呼び出します。フォールディングとは、本質的に、結果のトレースの出力期間が固定され、ジョブのタイムラインが最終出力期間を尊重するように調整されることを意味します.

Folder への入力と出力は、完全修飾ファイルシステムパスである必要があります。そのため、local ファイルシステム上のファイルを指定するには file:// を使用し、HDFS 上のファイルを指定するには hdfs:// を使用します.

オプション

パラメータ 説明 備考
-input-cycle フォールディング操作の基本的な時間単位を定義します。 input-cycle のデフォルト値はありません。 入力サイクルを指定する必要があります. ` `-input-cycle 10m` ` は、トレース全体の実行が 10 分間隔でスライスされることを意味します。基本的な操作は 10 分チャンクで行われます。 *Rumen* は、 m(分)、h(時間)、d(日) など のさまざまな時間単位を理解していることに注意してください.
-output-duration このパラメータは、トレースの最終ランタイムを定義します。デフォルト値は 1 時間 です. ` `-output-duration 30m` ` は、結果のトレースの最大ランタイムが 30 分になることを意味します。入力トレースファイル内のすべてのジョブは、このウィンドウに収まるように折りたたまれ、スケーリングされます.
-concentration 結果のトレースの濃度を設定します。デフォルト値は 1 です. 結果のトレースの合計ランタイムが入力トレースの合計ランタイムよりも短い場合、結果のトレースには入力トレースよりも少ない数のジョブが含まれます。これは本質的に出力が希釈されていることを意味します。ジョブの密度を高めるには、濃度を高い値に設定します.
-debug デバッグモードで Folder を実行します。デフォルトでは false に設定されています. デバッグモードでは、Folder はデバッグ用の追加ステートメントを出力します。また、スクラッチディレクトリに生成された中間ファイルはクリーンアップされません.
-seed 乱数ジェネレータの初期シード。デフォルトでは、乱数ジェネレータを使用してシードが生成され、シード値が将来使用するためにユーザーに報告されます. 初期シードが渡された場合、乱数ジェネレーターは同じシーケンスで乱数を生成します。つまり、同じシードが使用された場合、乱数シーケンスは同じままです。Folderは、ジョブを発行するかどうかを決定するために乱数ジェネレーターを使用します。
-temp-directory Folderの一時ディレクトリ。デフォルトでは、出力フォルダの親ディレクトリがスクラッチスペースとして使用されます。 これはFolderによって使用されるスクラッチスペースです。Folderがデバッグモードで実行されていない限り、すべての一時ファイルは最後にクリーンアップされます。
-skew-buffer-length Folderが偏ったジョブを許容できるようにします。デフォルトのバッファ長は0です。 '-skew-buffer-length 100'は、ジョブがウィンドウサイズ100内で順序どおりに表示されない場合、フォルダによって順番に発行されることを示します。ジョブがこのウィンドウ外で順序どおりに表示されない場合、-allow-missortingが設定されていない限り、Folderは処理を中止します。Folderは、将来の使用のために、入力トレースで見られる最大のスキューサイズを報告します。
-allow-missorting Folderが順序どおりのジョブを許容できるようにします。デフォルトでは、並べ替えの誤りは許可されていません。 並べ替えの誤りが許可されている場合、Folderは、-skew-buffer-lengthを使用して指定されたサイズのスキューバッファを使用してスキューを解消できない、順序どおりのジョブを無視します。並べ替えの誤りが許可されていない場合、スキューバッファがスキューを許容できない場合、Folderは処理を中止します。

合計実行時間が10時間の入力トレースを折り畳んで、合計実行時間が1時間の出力トレースを生成する
hadoop rumenfolder \
  -output-duration 1h \
  -input-cycle 20m \
  file:///tmp/job-trace.json \
  file:///tmp/job-trace-1hr.json

折り畳まれたジョブの順序が正しくない場合、コマンドは処理を中止します。

合計実行時間が10時間の入力トレースを折り畳んで、合計実行時間が1時間の出力トレースを生成し、ある程度のスキューを許容する
hadoop rumenfolder \
  -output-duration 1h \
  -input-cycle 20m \
  -allow-missorting \
  -skew-buffer-length 100 \
  file:///tmp/job-trace.json \
  file:///tmp/job-trace-1hr.json

折り畳まれたジョブの順序が正しくない場合、最大100個のジョブのスキューが解消されます。101番目のジョブが順序どおりでない場合、コマンドは処理を中止します。

合計実行時間が10時間の入力トレースを折り畳んで、合計実行時間が1時間の出力トレースをデバッグモードで生成する
hadoop rumenfolder \
  -output-duration 1h \
  -input-cycle 20m \
  -debug -temp-directory file:///tmp/debug \
  file:///tmp/job-trace.json \
  file:///tmp/job-trace-1hr.json

これは、10時間のジョブトレースファイルfile:///tmp/job-trace.jsonを1時間以内に終了するように折り畳み、file:///tmp/debugを一時ディレクトリとして使用します。一時ディレクトリの中間ファイルはクリーンアップされません。

合計実行時間が10時間の入力トレースを折り畳んで、合計実行時間が1時間の出力トレースをカスタム濃度で生成する
hadoop rumenfolder \
  -output-duration 1h \
  -input-cycle 20m \
  -concentration 2 \
  file:///tmp/job-trace.json \
  file:///tmp/job-trace-1hr.json

これは、10時間のジョブトレースファイルfile:///tmp/job-trace.jsonを濃度2で1時間以内に終了するように折り畳みます。10時間のジョブトレースが1時間に折り畳まれると、デフォルトではジョブの10%が保持されます。濃度が2の場合、合計入力ジョブの20%が保持されます。

付録

リソース

MAPREDUCE-751は、RumenMapReduceに導入した主要なJIRAです。詳細は、MapReduceのrumenコンポーネントを参照してください。