Проблема либеральной компиляции hadoop java
я пытаюсь выполнить и скомпилировать этот код java mapreduce на моем eclipse в local, но эта проблема обнаруживается, пожалуйста, помогите, где проблема?
и вот эта ошибка обнаружилась:
WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 1 at LogFile.TraitServeur.main(TraitServeur.java:63)"
ошибка строки 63 относится к выходному формату:
FileOutputFormat.setOutputPath(conf, new Path(args[1]))
Что я уже пробовал:
это мой исходный код
import java.io.IOException ; import java.util.* ; import org.apache.hadoop.fs.Path ; //import org.apache.hadoop.conf.* ;/*Package de apache hadoop utilisé dans le développement*/ import org.apache.hadoop.io.* ; import org.apache.hadoop.mapred.* ; //import org.apache.hadoop.util.* ; public class TraitServeur { //phase Map public static class TokenizerMapper extends MapReduceBase implements Mapper<LongWritable, Text, Text, IntWritable> { private final static IntWritable one = new IntWritable(1) ; private Text map = new Text(); public void map(LongWritable key, Text value, OutputCollector<Text, IntWritable> output, Reporter reporter) throws IOException { String line = value.toString() ; String[] rows = line.split("\\s+") ; StringTokenizer tokenizer = new StringTokenizer(rows[3]); tokenizer = new StringTokenizer(rows[3]) ; int count = 0 ; String date = rows[0] ; String day = rows[1] ; String gravite = rows[3] ; while (tokenizer.hasMoreTokens()) { map.set(tokenizer.nextToken()) ; map.set(date + day + "\t" + gravite) ; output.collect(map, one) ; count= count+1; } } } //phase reduce public static class Reduce extends MapReduceBase implements Reducer<Text, IntWritable, Text, IntWritable> { public void reduce(Text key, Iterator<IntWritable> values, OutputCollector<Text, IntWritable> output, Reporter reporter) throws IOException { int sum = 0 ; while (values.hasNext()) { sum += values.next().get() ; } output.collect(key, new IntWritable(sum)) ; } } } public static void main(String[] args) throws Exception { JobConf conf = new JobConf(TraitServeur.class) ; conf.setJobName("dpgs") ; conf.setOutputKeyClass(Text.class) ; conf.setOutputValueClass(IntWritable.class) ; conf.setMapperClass(TokenizerMapper.class) ; conf.setCombinerClass(Reduce.class) ; conf.setReducerClass(Reduce.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) ; }
Jochen Arndt
Прочтите сообщение об ошибке. Он содержит имя файла и номер строки (63). Найдите эту строку в своем коде. В этой строке используется индекс, который находится за пределами допустимого диапазона.