2

4 コアのデスクトップがあり、すべてのコアを Hadoop によるローカル データ処理に使用したいと考えています。(つまり、ローカルでデータを処理するのに十分な能力がある場合もあれば、同じジョブをクラスターに送信する場合もあります)。

デフォルトでは、hadoop ローカル モードは 1 つのマッパーと 1 つのレデューサーのみを実行するため、ローカル ジョブは非常に低速です。「面倒な」構成と、毎回jarを作成する必要があるため、最初に単一のマシンにクラスターをセットアップしたくありません。完璧な解決策は、単一のマシンで組み込み Hadoop を実行する方法です

PS 疑似分散モードは、単一ノードでクラスターを作成するため、不適切なオプションです。そのため、マッパーは 1 つしか取得できず、追加の構成に時間を費やす必要があります。

4

3 に答える 3

5

MultithreadedMapRunnerを使用する必要があります- JobConf の setMapRunnerClass メソッドで設定するだけで、mapred.map.multithreadedrunner.threads を望ましい同時実行レベルに設定することを忘れないでください。

また、別の方法があります。

  • MultithreadedMapperを Job タイプのオブジェクトのマッパー クラスとして設定します
  • MultithreadedMapper.setMapperClass実際のマッパークラスを呼び出す
  • MultithreadedMapper.setNumberOfThreads望ましい同時実行レベルでの呼び出し

ただし、マッパー クラスはスレッド セーフである必要があり、セットアップ メソッドとクリーンアップ メソッドが数回呼び出されることに注意してください。そのため、独自の MultithreadedMapper にインスパイアされたクラスを実装しない限り、MultithreadedMapper と MultipulOutput を混在させることは賢明ではありません。

于 2012-09-20T18:18:40.873 に答える
1

Hadoop は、分離を目的として、意図的に 1 つの JVM で同時に複数のタスクを実行しません。また、スタンドアロン (ローカル) モードでは、使用される JVM は 1 つだけです。4 つのコアを利用する場合は、疑似分散モードで実行し、同時実行タスクの最大数を 4 に増やす必要があります。mapred.tasktracker.map.tasks.maximumおよびmapred.tasktracker.reduce.tasks.maximumプロパティを使用してこれを行うことができます。

于 2012-09-20T01:14:54.643 に答える
0
    Configuration conf = new Configuration();

    Job job = new Job(conf, "SolerRandomHit");

    job.setOutputKeyClass(Text.class);

    job.setOutputValueClass(IntWritable.class);


    job.setMapperClass(MultithreadedMapper.class);
于 2016-02-28T12:44:49.713 に答える