我正在使用ToolRunner来运行我的作业
public class ToolRunner1 extends Configured implements Tool {
public static void main(String[] args) throws Exception {
System.out.println("In main");
int exitCode = ToolRunner.run(new ToolRunner1(), args);
System.exit(exitCode);
}
@Override
public int run(String [] args) throws Exception {
Configuration conf = getConf();
FileSystem fs = FileSystem.get(conf);
Path p1 = new Path(conf.get("input1")); //Receving a NULL Value
Path p2 = new Path(conf.get("input2")); //Receving a NULL Value
Path p3 = new Path(conf.get("output")); //Receving a NULL Value
if (fs.exists(p3)) {
fs.delete(p3, true);
}
Job job = new Job(conf, "ToolRunner");
job.setJarByClass(ToolRunner1.class);
job.setOutputKeyClass(Text.class);
job.setOutputValueClass(IntWritable.class);
job.setMapperClass(Map.class);
job.setReducerClass(Reduce.class);
job.setInputFormatClass(TextInputFormat.class);
job.setOutputFormatClass(TextOutputFormat.class);
FileInputFormat.addInputPath(job,p1);
FileOutputFormat.setOutputPath(job, p3);
boolean success = job.waitForCompletion(true);
return(success ? 0 : 1);
}
}
我跑的命令:
hadoop jar toolru.jar -D input1=/home/sreeveni/myfiles/tab -D input2=/home/sreeveni/myfiles/tab -D output =/home/sreeveni/myfiles/OUT/Toll
但是
Exception in thread "main" java.lang.IllegalArgumentException: Can not create a Path from a null string
我做错了吗? 请建议。
被修改 正如克里斯建议我更新了我的代码。并通过eclipse IDE工作正常 当我将jar移植到群集时,它会产生相同的错误
hadoop jar toolru.jar tool.ToolRunner1 -D input1=/home/sreeveni/myfiles/tab -D input2=/home/sreeveni/myfiles/tab -D output =/home/sreeveni/myfiles/OUT/Toll
答案 0 :(得分:4)
我想你想要:
Configuration conf = getConf();
而不是
Configuration conf = new Configuration();
答案 1 :(得分:-2)
试试这个, 而不是使用-D选项,使用命令行参数,然后使用String [] args,创建路径(新路径(args [0])等)。
这可能会为您提供有关-D选项用法的线索(-D选项是否可用于用户定义的键值对,或者该选项仅用于添加配置(核心 - * .xml)级别更改)。
你如何在eclipse中执行?你能在运行期间应用参数(运行配置)吗?