在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 之后闭合,这会产生问题。