4

wordcount mapreduce プログラムで新しいオブジェクトを作成する場合と、書き込み可能なオブジェクトを再利用する場合のパフォーマンス上の利点を見つけようとしています。ただし、入力データがいくら大きくても、2 つのバージョンの完了にはほぼ同じ時間がかかります。

また、変更してタスクのヒープスペースを低くしてみましたが、

<property>
    <name>mapred.child.java.opts</name>
    <value>-Xmx120m</value>
</property>

ただし、どちらのバージョンも、ヒープ スペースが大きい場合と比べて、実行速度が少し遅くなりました。書き込み可能なものを再利用してパフォーマンスを向上させるプログラムを取得することはできませんでした。ここで何か不足していますか?

私が修正した wordcount の部分は、

public void map(Object key, Text value, Context context
                ) throws IOException, InterruptedException {
  StringTokenizer itr = new StringTokenizer(value.toString());
  while (itr.hasMoreTokens()) {
    context.write(new Text(itr.nextToken()), new IntWritable(1));
  }
}
4

2 に答える 2

1

次の 2 つの理由から、これは大した問題ではありません。

  1. IOこれは遅いため、入力行ごとにいくつかの新しいオブジェクトを作成し、ガベージコレクションを行うことは大したことではありません。
  2. とにかく、メモリ使用量が非常に少ない可能性があります。したがって、オブジェクトを作成すると、特定のメモリしきい値を超えている限り、オブジェクトはヒープ メモリに格納されます。そのため、他のソリューションが他のソリューションよりも多くのヒープ メモリを使用する可能性があります。ヒープ メモリを減らすGarbage Collectorと、しきい値を超える頻度が高くなるため、 をより頻繁に実行する必要があります。これをオンにすると、GC ログに表示されます。

もう 1 つの理由は、時間の測定方法にある可能性がありますMap task。バックグラウンドで多くの RPC 通信が行われるため、ネットワークの輻輳やその他の環境の影響によってデータが歪んでいないことを常に 100% 保証できるとは限りません。

于 2012-12-28T09:27:34.467 に答える
0

問題は、ここでのパフォーマンスのボトルネックであるか、パフォーマンスにさらに影響を与えるか、再利用可能なIntVariableまたはIOです。

再利用変数は理論的には優れていますが、アムダールの法則http://en.wikipedia.org/wiki/Amdahl%27s_lawに基づくと、改善は目立たない場合もあります。

于 2012-12-28T01:01:35.120 に答える