私はhadoopでページランクアルゴリズムを使用しようとしていますが、ジョブの初期化に問題があります。
Jobクラスを使用して初期化しようとすると、コンパイル時に次のエラーが発生します。
スレッド「main」の例外java.lang.NoClassDefFoundError:org / apache / commons / logging / LogFactory at org.apache.hadoop.mapreduce.Job。(Job.java:89)at Pagerank.main(Pagerank.java:244)
コードは次のとおりです。
Job job;
job = new Job();
job.setJarByClass(Pagerank.class); // In what class are our map/reduce functions for this job found?
job.setMapperClass(PRMap.class); // What is our map function for this job?
job.setReducerClass(PRReduce.class); // What is our reduce function for this job?
job.setOutputKeyClass(Text.class); // What are the (hadoop.io compliant) datatype for our
job.setOutputValueClass(Text.class); // reducer output's key-value pairs?
job.setInputFormatClass(TextInputFormat.class); // How will the mapper distinguish (key value) record inputs?
FileInputFormat.addInputPath(job, new Path(args[0])); // First command line argument
FileOutputFormat.setOutputPath(job, new Path("temp0"));
job.waitForCompletion(true);
JobConfクラスを使用して初期化を行おうとすると、使用されているいくつかのメソッドの引数に関するエラーが発生します。
コードは次のとおりです。
JobConf conf = new JobConf(Pagerank.class);
conf.setJobName("pagerank");
conf.setOutputKeyClass(Text.class);
conf.setOutputValueClass(Text.class);
conf.setMapperClass(PRMap.class);
conf.setReducerClass(PRReduce.class);
conf.setInputFormat(TextInputFormat.class);
conf.setOutputFormat(TextOutputFormat.class);
FileInputFormat.setInputPaths(conf, new Path(args[0]));
FileOutputFormat.setOutputPath(conf, new Path(args[1]));
JobClient.runJob(conf);
エラーによると:
JobConfクラスのメソッドsetMapperClassは、指定されたタイプには適用できません。
必須:クラスはマッパーを拡張します
見つかった:クラスPRMap
理由:実際の引数Class PRMapをClassに変換できませんか?メソッド呼び出し変換によってMapperを拡張します
私が書いたPRMapクラスはHadoopによるMap関数標準に従っているのに、setMapperClassの引数としてPRMap.classを渡すことができないようです。
public static class PRMap extends Mapper<LongWritable, Text, Text, Text>
{ ... }
これらの2つのアプローチに関するアドバイスはありますか?