Gridmix



概要

GridMixは、Hadoopクラスタのベンチマークツールです。本番環境の負荷からマイニングされたプロファイルをモデル化し、合成ジョブの組み合わせを送信します。このバージョンのツールは、ボトルネックを特定し、開発をガイドするために、本番ジョブリソースのプロファイルをモデル化しようとします。

GridMixを実行するには、特定のクラスタのジョブミックスを記述したMapReduceジョブトレースが必要です。このようなトレースは、通常Rumenによって生成されます。GridMixは、合成ジョブがバイトを読み取る入力データも必要とします。合成ジョブは現在バイナリリーダーであるため、入力データは特定の形式である必要はありません。新しいクラスタで実行している場合は、入力データを生成するオプションの手順が実行の前に実行される場合があります。特定のクラスタの本番ジョブの負荷を同じまたは別のクラスタでエミュレートするには、次の手順に従います。

  1. 本番クラスタでジョブ履歴ファイルを見つけます。この場所は、クラスタの`mapreduce.jobhistory.done-dir`または`mapreduce.jobhistory.intermediate-done-dir`設定プロパティで指定されます。(MapReduce historyserverは、ジョブ履歴ファイルを`mapreduce.jobhistory.done-dir`から`mapreduce.jobhistory.intermediate-done-dir`に移動します。)

  2. すべてまたは選択したジョブのJSON形式のジョブトレースを構築するために、Rumenを実行します。

  3. ベンチマーククラスタでジョブトレースを使用してGridMixを使用します。

GridMixによって送信されたジョブの名前は、「`GRIDMIXnnnnnn`」の形式です。ここで、「`nnnnnn`」は先行ゼロで埋められたシーケンス番号です。

使用方法

Gridmixは、hadoopサブコマンドとして提供されます。設定パラメータなしの基本的なコマンドラインの使い方

$ hadoop gridmix [-generate <size>] [-users <users-list>] <iopath> <trace>

設定パラメータを使用した基本的なコマンドラインの使い方

$ hadoop gridmix \
  -Dgridmix.client.submit.threads=10 -Dgridmix.output.directory=foo \
  [-generate <size>] [-users <users-list>] <iopath> <trace>

上記のように、`-Dgridmix.client.submit.threads=10`や`-Dgridmix.output.directory=foo`のような設定パラメータは、他のGridMixパラメータの*前*に使用する必要があります。

`<iopath>`パラメータは、GridMixの作業ディレクトリです。これは、ローカルファイルシステムまたはHDFSのいずれかになりますが、GridMixがローカルファイルシステムとHDFSにそれぞれ同じ負荷をかけるように、元のジョブミックスと同じにすることを強くお勧めします。

`-generate`オプションは、合成ジョブの入力データと分散キャッシュファイルを生成するために使用されます。標準のサイズ接尾辞(例:`100g`は入力データとして100 * 2 ^ 30バイトを生成します)を受け入れます。圧縮形式の入力データの最小サイズ(デフォルトでは128MB)は、`gridmix.min.file.size`で定義されます。`<iopath>/input`は、生成された入力データの保存先ディレクトリ、または入力データの読み取り元ディレクトリです。HDFSベースの分散キャッシュファイルは、分散キャッシュディレクトリ`<iopath>/distributedCache`の下に生成されます。必要な分散キャッシュファイルの一部がすでに分散キャッシュディレクトリに存在する場合、`-generate`オプションが指定されていると、残りの存在しない分散キャッシュファイルのみが生成されます。

`-users`オプションは、ユーザーリストファイルを指すために使用されます(ユーザーとキューのエミュレーションを参照)。

`<trace>`パラメータは、Rumenによって生成されたジョブトレースへのパスです。このトレースは圧縮(クラスタでサポートされている圧縮コーデックのいずれかを使用して読み取り可能である必要があります)または非圧縮にすることができます。GridMixの標準入力ストリームを介して*非圧縮*トレースを渡す場合は、このパラメータの値として「-」を使用します。

サポートされている設定パラメータについては、以下のセクションで説明します。

一般的な設定パラメータ

パラメータ 説明
gridmix.output.directory 出力が書き込まれるディレクトリ。指定されている場合、`iopath`はこのパラメータを基準にします。送信ユーザーはこのディレクトリへの読み取り/書き込みアクセス権を持っている必要があります。また、ユーザーは実行中に発生する可能性のあるクォータの問題にも注意する必要があります。デフォルトは「`gridmix`」です。
gridmix.client.submit.threads クラスタにジョブを送信するスレッドの数。これは、トレースの送信時間まで、一度にメモリにロードされる分割数も制御します。分割は送信期限に間に合うように事前に生成されるため、特に密度の高いトレースでは、より多くの送信スレッドが必要になる場合があります。ただし、分割をメモリに格納するのはかなり費用がかかるため、慎重に増やす必要があります。デフォルトは、SERIALジョブ送信ポリシーの場合は1(ジョブ送信ポリシーを参照)、他のポリシーの場合はクライアントマシンのプロセッサ数より1つ多くなります。
gridmix.submit.multiplier ジョブの送信を加速または減速するための乗数。 2つのジョブを区切る時間は、この係数で乗算されます。デフォルト値は1.0です。これは、ジョブトレースをクラスタにサイズ変更するための粗いメカニズムです。
gridmix.client.pending.queue.depth 分割生成を待っているジョブ記述のキューの深さ。トレースから読み取られたジョブは、送信スレッドによって処理される前に、この深さのキューを占有します。これを設定することはまれです。デフォルトは5です。
gridmix.gen.blocksize 生成されたデータのブロックサイズ。デフォルト値は256 MiBです。
gridmix.gen.bytes.per.file ファイルあたりに書き込まれる最大バイト数。デフォルト値は1 GiBです。
gridmix.min.file.size 入力ファイルの最小サイズ。デフォルトの制限は128 MiBです。比較的小さな入力データセットでGridMixをテストしているときに「満足のいくファイルが見つかりません」のようなエラーメッセージが表示された場合は、このパラメータを調整してください。
gridmix.max.total.scan 入力ファイルの最大サイズ。デフォルトの制限は100 TiBです。
gridmix.task.jvm-options.enable Gridmixが、元のタスクから取得した値(つまり、トレース経由)を使用して、シミュレートされたタスクの最大ヒープオプションを設定できるようにします。

ジョブタイプ

GridMixは、基本的にJSONエンコードされたジョブ記述のストリームであるジョブトレースを入力として受け取ります。ジョブ記述ごとに、送信クライアントは元のジョブ送信時間と、そのジョブの各タスクのバイト数とレコード数の読み取りと書き込みを取得します。このデータがあれば、トレースに記録されているのと同じバイトパターンとレコードパターンを持つ合成ジョブを構築します。 2種類のジョブを構築します

ジョブタイプ 説明
LOADJOB Rumenトレースに記載されているワークロードをエミュレートする合成ジョブ。現在のバージョンでは、I/Oをサポートしています。ベンチマーククラスタでI/Oワークロードを再現します。これを行うために、読み書きされたバイト数やレコード数など、すべてのマップタスクとリデュースタスクの詳細なI/O情報を各ジョブの入力分割に埋め込みます。マップタスクは、中間マップ出力データを介してリデュースタスクのI/Oパターンをさらにリレーします。
SLEEPJOB 本番トレースで観測されたように、各タスクが一定時間スリープするだけの合成ジョブです。ResourceManagerのスケーラビリティは、毎秒処理できるハートビートの数によって制限されることがよくあります。(ハートビートは、NodeManagerから定期的に送信されるメッセージで、ステータスを更新し、ResourceManagerから新しいタスクを取得します。)ベンチマーククラスタは通常、本番クラスタのサイズよりも小さいため、スレーブノードによって生成されるハートビートトラフィックは、本番クラスタのレベルをはるかに下回ります。考えられる解決策の1つは、各スレーブノードで複数のNodeManagerを実行することです。これは、合成ジョブによって生成されるI/Oワークロードがスレーブノードにスラッシングを引き起こすという明らかな問題につながります。そのため、このようなジョブが必要になります。

以下の設定パラメータは、ジョブタイプに影響します

パラメータ 説明
gridmix.job.type このキーの値は、LOADJOBまたはSLEEPJOBのいずれかです。デフォルト値はLOADJOBです。
gridmix.key.fraction LOADJOBタイプのジョブの場合、キーのデータに使用されるレコードの割合です。デフォルト値は0.1です。
gridmix.sleep.maptask-only SLEEPJOBタイプのジョブの場合、ジョブのreduceタスクを無視するかどうかを指定します。デフォルトはfalseです。
gridmix.sleep.fake-locations SLEEPJOBタイプのジョブの場合、ジョブのmapタスクの偽の場所の数を指定します。デフォルトは0です。
gridmix.sleep.max-map-time SLEEPJOBタイプのジョブの場合、ジョブのmapタスクの最大実行時間をミリ秒単位で指定します。デフォルトは無制限です。
gridmix.sleep.max-reduce-time SLEEPJOBタイプのジョブの場合、ジョブのreduceタスクの最大実行時間をミリ秒単位で指定します。デフォルトは無制限です。

ジョブ送信ポリシー

GridMixは、ジョブの送信レートを制御します。この制御は、トレース情報に基づくことも、ResourceManagerから収集した統計に基づくこともできます。ユーザーが定義した送信ポリシーに基づいて、GridMixはそれぞれのアルゴリズムを使用してジョブ送信を制御します。現在、3種類のポリシーがあります

ジョブ送信ポリシー 説明
STRESS クラスタに負荷がかかり続けるように、ジョブを送信し続けます。このモードでは、クラスタのリアルタイム負荷を監視することにより、ジョブの送信レートを制御し、クラスタのワークロードの安定したストレスレベルを維持できるようにします。収集した統計に基づいて、クラスタが*アンダーロード*なのか*オーバーロード*なのかを定義します。次の3つの条件がすべて真の場合にのみ、クラスタは*アンダーロード*と見なされます
  1. 保留中および実行中のジョブの数がしきい値TJ未満である
  2. 保留中および実行中のmapの数がしきい値TM未満である
  3. 保留中および実行中のreduceの数がしきい値TR未満である
しきい値TJ、TM、およびTRは、それぞれクラスタのサイズとmap、reduceスロット容量に比例します。クラスタが*オーバーロード*の場合、ジョブの送信を抑制します。実際の計算では、各実行中のタスクに残りの作業量で重み付けも行います。つまり、90%完了したタスクは、計算では0.1としてのみカウントされます。最後に、非常に大きなジョブが他のジョブをブロックするのを防ぐために、各ジョブが貢献できる保留中/待機中のタスクの数を制限します。
REPLAY このモードでは、ジョブトレースを忠実に再現します。このモードは、実際のジョブトレースで指定された時間間隔に正確に従います。
SERIAL このモードでは、先に送信されたジョブが完了した後にのみ、次のジョブを送信します。

以下の設定パラメータは、ジョブ送信ポリシーに影響します

パラメータ 説明
gridmix.job-submission.policy このキーの値は、STRESS、REPLAY、またはSERIALのいずれかです。ほとんどの場合、キーの値はSTRESSまたはREPLAYになります。デフォルト値はSTRESSです。
gridmix.throttle.jobs-to-tracker-ratio STRESSモードでは、クラスタが*オーバーロード*と見なされるために必要な、クラスタ内の実行中のジョブとNodeManagerの最小比率です。これは、前述のしきい値TJです。デフォルトは1.0です。
gridmix.throttle.maps.task-to-slot-ratio STRESSモードでは、クラスタが*オーバーロード*と見なされるために必要な、保留中および実行中のmapタスク(つまり、未完了のmapタスク)とmapスロット数の最小比率です。これは、前述のしきい値TMです。実行中のmapタスクは部分的にカウントされます。たとえば、40%完了したmapタスクは、0.6 mapタスクとしてカウントされます。デフォルトは2.0です。
gridmix.throttle.reduces.task-to-slot-ratio STRESSモードでは、クラスタが*オーバーロード*と見なされるために必要な、保留中および実行中のreduceタスク(つまり、未完了のreduceタスク)とreduceスロット数の最小比率です。これは、前述のしきい値TRです。実行中のreduceタスクは部分的にカウントされます。たとえば、30%完了したreduceタスクは、0.7 reduceタスクとしてカウントされます。デフォルトは2.5です。
gridmix.throttle.maps.max-slot-share-per-job STRESSモードでは、過負荷計算でジョブの未完了のmapタスクにカウントできる、クラスタのmapスロット容量の最大シェアです。デフォルトは0.1です。
gridmix.throttle.reducess.max-slot-share-per-job STRESSモードでは、過負荷計算でジョブの未完了のreduceタスクにカウントできる、クラスタのreduceスロット容量の最大シェアです。デフォルトは0.1です。

ユーザーとキューのエミュレーション

典型的な本番クラスタは、多くの場合、異なるユーザーと共有され、クラスタ容量はジョブキューを介して異なる部門に分割されます。すべてのユーザーのジョブ間の公平性を確保し、キュー容量割り当てポリシーを尊重し、動作不良のジョブがクラスタを乗っ取るのを回避することは、Hadoopソフトウェアに大きな複雑さを追加します。これらの分野で十分にテストしてバグを発見するには、GridMixは、異なるユーザーからのジョブまたは異なるキューに送信されたジョブの競合をエミュレートする必要があります。

複数のキューのエミュレートは簡単です。本番クラスタと同じキュー構成でベンチマーククラスタを設定し、トレースに記録されているのと同じキューに送信されるように合成ジョブを構成するだけです。ただし、トレースに表示されているすべてのユーザーがベンチマーククラスタにアカウントを持っているわけではありません。代わりに、いくつかのテストユーザーアカウントを設定し、トレース内の各一意のユーザーをラウンドロビン方式でテストユーザーに関連付けます。

以下の設定パラメータは、ユーザーとキューのエミュレーションに影響します

パラメータ 説明
gridmix.job-submission.use-queue-in-trace trueに設定すると、トレースに記載されているのと同じキューセットが使用されます。デフォルト値はfalseです。
gridmix.job-submission.default-queue すべてのジョブが送信されるデフォルトのキューを指定します。このパラメータが指定されていない場合、GridMixはクラスタで送信ユーザーに定義されているデフォルトのキューを使用します。
gridmix.user.resolve.class 使用するUserResolver実装を指定します。現在、3つの実装があります
  1. org.apache.hadoop.mapred.gridmix.EchoUserResolver - 元のジョブを送信したユーザーとしてジョブを送信します。この場合、ジョブトレースで識別された本番クラスタのすべてのユーザーも、ベンチマーククラスタにアカウントを持っている必要があります。
  2. org.apache.hadoop.mapred.gridmix.SubmitterUserResolver - 現在のGridMixユーザーとしてすべてのジョブを送信します。この場合、トレース内のすべてのユーザーを現在のGridMixユーザーにマップし、ジョブを送信するだけです。
  3. org.apache.hadoop.mapred.gridmix.RoundRobinUserResolver - トレースユーザーをラウンドロビン方式でテストユーザーにマップします。この場合、いくつかのテストユーザーアカウントを設定し、トレース内の各一意のユーザーをラウンドロビン方式でテストユーザーに関連付けます。
デフォルトはorg.apache.hadoop.mapred.gridmix.SubmitterUserResolverです。

パラメータgridmix.user.resolve.classorg.apache.hadoop.mapred.gridmix.RoundRobinUserResolverに設定されている場合、テストユーザーのリストを含むユーザーリストファイルを定義する必要があります。これは、GridMixに-usersオプションを使用して指定します。

ラウンドロビンユーザーリゾルバーを使用する場合、-usersオプションを使用してユーザーリストファイルを指定することは必須です。他のユーザーリゾルバーはこのオプションを無視します。

ユーザーリストファイルには、1行に1人のユーザーが記載されており、各行は次の形式です

<username>

たとえば、

user1
user2
user3

上記の例では、3人のユーザーuser1user2、およびuser3を定義しました。ここで、トレース内の各一意のユーザーを、ラウンドロビン方式で定義された上記のユーザーに関連付けます。たとえば、トレースのユーザーがtuser1tuser2tuser3tuser4、およびtuser5の場合、マッピングは次のようになります。

tuser1 -> user1
tuser2 -> user2
tuser3 -> user3
tuser4 -> user1
tuser5 -> user2

下位互換性のために、ユーザーリストファイルの各行には、username[,group]*の形式でユーザー名とグループ名を続けることができます。グループ名はGridmixによって無視されます。

分散キャッシュ負荷のエミュレーション

Gridmixは、LOADJOBタイプのジョブのデフォルトで分散キャッシュ負荷をエミュレートします。これは、別のMapReduceジョブの一部として、すべてのシミュレートされたジョブに必要な分散キャッシュファイルを事前に作成することによって行われます。

gridmixシミュレートジョブにおける分散キャッシュ負荷のエミュレーションは、プロパティgridmix.distributed-cache-emulation.enablefalseに設定することで無効にすることができます。ただし、gridmixによる分散キャッシュデータの生成は-generateオプションによって駆動され、この構成プロパティとは無関係です。

分散キャッシュファイルの生成と分散キャッシュ負荷のエミュレーションの両方が無効になるのは、次の場合です。

  • 入力トレースがファイルではなく標準入力ストリームからのものである場合、または
  • 指定された<iopath>がローカルファイルシステム上にある場合、または
  • 分散キャッシュディレクトリ、つまり<iopath>/distributedCache(分散キャッシュディレクトリを含む)の上位ディレクトリのいずれかに、他のユーザーの実行権限がない場合。

シミュレートされたジョブの構成

Gridmix3は、送信されたシミュレートされたジョブにいくつかの構成プロパティを設定して、入力ジョブトレースの対応するジョブにマップバックできるようにします。これらの設定パラメータには、次のものが含まれます。

パラメータ 説明
gridmix.job.original-job-id このシミュレートされたジョブに対応する元のクラスタのジョブのジョブID。
gridmix.job.original-job-name このシミュレートされたジョブに対応する元のクラスタのジョブのジョブ名。

圧縮/解凍のエミュレーション

MapReduceは、データの圧縮と解凍をサポートしています。MapReduceジョブへの入力は圧縮できます。同様に、MapタスクとReduceタスクの出力も圧縮できます。GridMixでの圧縮/解凍エミュレーションは重要です。圧縮/解凍をエミュレートすると、タスクのCPUとメモリ使用量に影響を与えるためです。圧縮/解凍をエミュレートするタスクは、同じノードで実行されている他のタスクとデーモンに影響を与えます。

gridmix.compression-emulation.enabletrue に設定されている場合、圧縮エミュレーションが有効になります。デフォルトでは、圧縮エミュレーションはタイプ LOADJOB のジョブに対して有効になっています。圧縮エミュレーションが有効になっている場合、GridMix は一定の圧縮率で圧縮されたテキストデータを生成します。そのため、シミュレートされた GridMix ジョブは、実際のジョブで観測された圧縮率に関係なく、圧縮可能なテキストデータ(一定の圧縮率を持つ)を使用して圧縮/解凍をエミュレートします。

典型的な MapReduce ジョブは、以下のフェーズでデータの圧縮/解凍を処理します。

  • ジョブ入力データの解凍: 圧縮エミュレーションが有効になっている場合、GridMix は圧縮可能な入力データを生成します。元のジョブの構成に基づいて、シミュレートされた GridMix ジョブは、解凍ツールを使用して圧縮された入力データを読み取ります。現在、GridMix は mapreduce.input.fileinputformat.inputdir を使用して、元のジョブが圧縮された入力データを使用したかどうかを判断します。元のジョブの入力ファイルが圧縮されていない場合、シミュレートされたジョブは解凍ツールを使用せずに圧縮された入力ファイルを読み取ります。

  • 中間データの圧縮と解凍: 元のジョブでマップ出力の圧縮が有効になっている場合、GridMix もシミュレートされたジョブでマップ出力の圧縮を有効にします。したがって、リデューサーは解凍ツールを使用してマップ出力データを読み取ります。

  • ジョブ出力データの圧縮: 元のジョブの出力が圧縮されている場合、GridMix もシミュレートされたジョブでジョブ出力の圧縮を有効にします。

以下の設定パラメータは、圧縮エミュレーションに影響します。

パラメータ 説明
gridmix.compression-emulation.enable シミュレートされた GridMix ジョブで圧縮エミュレーションを有効にします。デフォルトは true です。

圧縮エミュレーションが有効になっていると、GridMix は圧縮された入力データを生成します。そのため、入力データの合計サイズは、予想されるサイズよりも小さくなります。GridMix が圧縮を正しくエミュレートできるように、gridmix.min.file.size を小さい値(gridmix.gen.bytes.per.file の約 10%)に設定します。

High-Ram ジョブのエミュレート

MapReduce では、ユーザーはジョブを High-Ram ジョブとして定義できます。High-Ram ジョブのタスクは、タスクプロセスでより大きなメモリを占有できます。この動作をエミュレートすることは、以下の理由により重要です。

  • スケジューラへの影響: High-Ram ジョブのタスクのスケジューリングは、リソースの予約と使用率に影響を与える可能性があるため、スケジューリング動作に影響を与えます。

  • ノードへの影響: High-Ram タスクはより大きなメモリを占有するため、NodeManager はこれらのタスクに追加のリソースを割り当てるためのブックキーピングを行います。そのため、これはメモリ エミュレーションの前兆となり、高いメモリ要件を持つタスクは High-Ram タスクとして考慮する必要があります。

High-Ram 機能のエミュレーションは、以下を設定することで無効にできます。
gridmix.highram-emulation.enablefalse に設定します。

リソース使用量の emulate

CPU、物理メモリ、仮想メモリ、JVM ヒープなどのリソースの使用量は、MapReduce によってタスクカウンターを使用して記録されます。この情報は、GridMix がシミュレートされたタスクのリソース使用量をエミュレートするために使用されます。リソース使用量の emulate は、GridMix が実際のクラスタで見られるのと同様の負荷をテストクラスタに与えるのに役立ちます。

MapReduce タスクは、そのライフタイム全体にわたってリソースを使用します。GridMix も、シミュレートされたタスクのライフタイム全体にわたってリソース使用量のエミュレーションを実行することで、この動作を模倣しようとします。エミュレートされる各リソースには、それに関連付けられた *エミュレータ* が必要です。そのような各 *エミュレータ* は、org.apache.hadoop.mapred.gridmix.emulators.resourceusage.ResourceUsageEmulatorPlugin インターフェースを実装する必要があります。GridMix のリソース *エミュレータ* は、実行前に設定(プラグインまたはプラグアウト)できる *プラグイン* です。GridMix ユーザーは、gridmix.emulators.resource-usage.plugins パラメータの値として、カンマ区切りの *エミュレータ* リストを渡すことで、複数のエミュレータ *プラグイン* を設定できます。

GridMix に付属の *エミュレータ* のリスト

  • 累積 CPU 使用量 *エミュレータ*: GridMix は、Rumen によって公開された累積 CPU 使用量の値を使用し、シミュレートされたタスクの累積 CPU 使用量の合計が Rumen によって公開された値に近くなるようにします。GridMix は、org.apache.hadoop.mapred.gridmix.emulators.resourceusage.CumulativeCpuUsageEmulatorPlugingridmix.emulators.resource-usage.plugins パラメータに設定されたエミュレータ *プラグイン* のリストに追加することで、累積 CPU 使用量をエミュレートするように設定できます。CPU 使用量エミュレータは、タスクの特定の進捗境界でのみエミュレートするように設計されています。この間隔は、gridmix.emulators.resource-usage.cpu.emulation-interval を使用して設定できます。このパラメータのデフォルト値は 0.1 つまり 10% です。

  • 合計ヒープ使用量 *エミュレータ*: GridMix は、Rumen によって公開された合計ヒープ使用量の値を使用し、シミュレートされたタスクの合計ヒープ使用量が Rumen によって公開された値に近くなるようにします。GridMix は、org.apache.hadoop.mapred.gridmix.emulators.resourceusage.TotalHeapUsageEmulatorPlugingridmix.emulators.resource-usage.plugins パラメータに設定されたエミュレータ *プラグイン* のリストに追加することで、合計ヒープ使用量をエミュレートするように設定できます。ヒープ使用量エミュレータは、タスクの特定の進捗境界でのみエミュレートするように設計されています。この間隔は、gridmix.emulators.resource-usage.heap.emulation-interval を使用して設定できます。このパラメータのデフォルト値は 0.1 つまり 10% の進捗間隔です。

GridMix は、タイプ LOADJOB のジョブに対してのみリソース使用量をエミュレートすることに注意してください。

単純化の仮定

GridMix は、コミュニティからのフィードバックとパッチを取り入れながら、段階的に開発されます。現在、その目的は MapReduce と HDFS のパフォーマンスを評価することであり、その上のレイヤー(つまり、広範な lib とサブプロジェクトスペース)を評価することではありません。これらの 2 つの制限を考えると、ジョブロードの以下の特性は現在ジョブトレースにキャプチャされておらず、GridMix で正確に再現できません。

  • ファイルシステムのプロパティ - ブロックサイズ、名前空間階層、または特定のタスクで消費および出力されるバイト/レコード以外の入力、中間、または出力データのプロパティを一致させる試みは行われません。これは、システムの最も頻繁に使用される部分(テキスト処理、ストリーミングなど)の一部は、現在の実装では有意義にテストできないことを意味します。

  • I/O レート - レコードが消費/出力されるレートは、リーダー/ライターの速度によってのみ制限され、タスク全体で一定であると想定されます。

  • メモリプロファイル - 最大ヒープサイズは保持されますが、タスクのメモリ使用量に関するデータは時間経過とともに利用できません。

  • スキュー - 特定のタスクで消費および出力されるレコードは、観測された平均に従うと想定されます。つまり、レコードは実際よりも規則的になります。各マップはまた、各リデュースに対して比例配分されたデータパーセンテージを生成するため、入力のバランスが取れていないジョブはフラット化されます。

  • ジョブの失敗 - ユーザーコードは正しいと想定されます。

  • ジョブの独立性 - あるジョブの出力または結果は、後続のジョブがいつ、または実行されるかどうかに影響を与えません。

付録

GridMix ツールの古いバージョンが存在します。GridMix1GridMix2、および GridMix3 の元の実装を追跡する問題は、Apache Hadoop MapReduce JIRA にあります。GridMix の現在の開発を追跡するその他の問題は、Apache Hadoop MapReduce JIRA を検索することで見つけることができます。