2012-03-18 8 views
4

新しいHadoopバージョンのMultithreadedMapperクラスに出くわしました。ドキュメントでは、従来の(シングルスレッドの)マッパークラスの代わりに使用できると書かれています。 しかし、私はこの新しいクラスを使用するためのデモの例を見逃すことはありませんでした。 また、私はsetNumberOfThreads()メソッドを使用するのが幸せです。 これを使用するためのコード例はありますか?事前にHadoop MapreduceでMultithreadedMapperクラスを使用するには?

おかげで、あなたのため

答えて

8

小さなコードスニペット:

Configuration conf = new Configuration(); 
Job job = new Job(conf); 
job.setMapperClass(MultithreadedMapper.class); 
conf.set("mapred.map.multithreadedrunner.class", WebGraphMapper.class.getCanonicalName()); 
conf.set("mapred.map.multithreadedrunner.threads", "8"); 
job.setJarByClass(WebGraphMapper.class); 
// rest ommitted 
job.waitForCompletion(true); 

私はそれはかなり自己説明だと思います。マルチスレッドマッパーをメインクラスとして使用して、実行するクラス(実際のマッパー)を構成します。 このような便利な静的メソッドもあります。電話は次のようになります。

MultithreadedMapper.setMapperClass(job, WebGraphMapper.class); 
MultithreadedMapper.setNumberOfThreads(job, 8); 
+0

私はそれを試しましたが、私が得た出力は一貫していません。スレッドは、各入力レコードで別々に動作していません。つまり、いくつかのスレッドが同じレコードで作業していて、出力が冗長です:( – Harsh

+0

あなたのコードで何かが静的であると宣言しています。 2)。 –

関連する問題