在cloudera上执行Hadoop Pragram时获取ArrayIndexOutOfBoundsException:3
Getting ArrayIndexOutOfBoundsException: 3 while executing Hadoop Pragram on cloudera
在 cloudera linux 机器上我收到 ArrayIndexOutOfBoundsException: 3 .
我不明白为什么这个程序会出现这个异常,只有其他人对我来说很好。
public class TransactionCount extends Configured implements Tool {
@Override
public int run(String[] arg0) throws Exception {
if(arg0.length<2)
{
System.out.println("Please provide inpt and output directory properly");
return -1;
}
JobConf conf=new JobConf(com.ankur.MRpractice.TransactionCount.class);
FileInputFormat.setInputPaths(conf, new Path(arg0[0]),new Path(arg0[1],new Path(arg0[2])));
FileOutputFormat.setOutputPath(conf,new Path(arg0[3]));
conf.setMapperClass(TransMapper.class);
conf.setReducerClass(TransReducer.class);
conf.setMapOutputKeyClass(Text.class);
conf.setMapOutputValueClass(IntWritable.class);
conf.setOutputKeyClass(Text.class);
conf.setOutputValueClass(IntWritable.class);
conf.setPartitionerClass(TransPartioner.class);
conf.setNumReduceTasks(4);
JobClient.runJob(conf);
return 0;
}
public static void main(String [] args) throws Exception
{
int exitCode=ToolRunner.run(new TransactionCount(), args);
System.exit(exitCode);
}
}
我认为在 if 条件下你应该使用 arg0.length<=3 而不是 arg0.length<2。因为你在你的程序中也使用了 arg0[2] 和 arg0[3],分别是第三个和第四个参数。
替换行,
FileInputFormat.setInputPaths(conf, 新路径(arg0[0]),新路径(arg0[1],新路径(arg0[2])));
和
FileInputFormat.setInputPaths(conf, 新路径(arg0[0]),新路径(arg0[1]),新路径(arg0[2]));
请尝试,我希望它会有所帮助,args1 的右括号在 arg2 之后闭合,这会产生问题。
在 cloudera linux 机器上我收到 ArrayIndexOutOfBoundsException: 3 .
我不明白为什么这个程序会出现这个异常,只有其他人对我来说很好。
public class TransactionCount extends Configured implements Tool {
@Override
public int run(String[] arg0) throws Exception {
if(arg0.length<2)
{
System.out.println("Please provide inpt and output directory properly");
return -1;
}
JobConf conf=new JobConf(com.ankur.MRpractice.TransactionCount.class);
FileInputFormat.setInputPaths(conf, new Path(arg0[0]),new Path(arg0[1],new Path(arg0[2])));
FileOutputFormat.setOutputPath(conf,new Path(arg0[3]));
conf.setMapperClass(TransMapper.class);
conf.setReducerClass(TransReducer.class);
conf.setMapOutputKeyClass(Text.class);
conf.setMapOutputValueClass(IntWritable.class);
conf.setOutputKeyClass(Text.class);
conf.setOutputValueClass(IntWritable.class);
conf.setPartitionerClass(TransPartioner.class);
conf.setNumReduceTasks(4);
JobClient.runJob(conf);
return 0;
}
public static void main(String [] args) throws Exception
{
int exitCode=ToolRunner.run(new TransactionCount(), args);
System.exit(exitCode);
}
}
我认为在 if 条件下你应该使用 arg0.length<=3 而不是 arg0.length<2。因为你在你的程序中也使用了 arg0[2] 和 arg0[3],分别是第三个和第四个参数。
替换行,
FileInputFormat.setInputPaths(conf, 新路径(arg0[0]),新路径(arg0[1],新路径(arg0[2])));
和
FileInputFormat.setInputPaths(conf, 新路径(arg0[0]),新路径(arg0[1]),新路径(arg0[2]));
请尝试,我希望它会有所帮助,args1 的右括号在 arg2 之后闭合,这会产生问题。