无法在hadoop中从空字符串创建路径

zz2j4svz  于 2021-06-02  发布在  Hadoop
关注(0)|答案(2)|浏览(471)

我用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

我做错什么了吗?请建议。
按照克里斯的建议编辑,我更新了代码。当我将jar移植到集群时,它在eclipseide中运行良好,并给出了相同的错误

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
g9icjywg

g9icjywg1#

尝试这样做,而不是使用-d选项,使用命令行参数,然后使用string[]args来创建路径(新路径(args[0])等)。
这可能会给您一个关于-d选项用法的线索(是-d选项可用于用户定义的键值对,还是该选项仅用于添加配置(core-*.xml)级别的更改)。
你在eclipse中是如何执行的?您能给出运行期间应用的参数吗(运行配置)?

snz8szmq

snz8szmq2#

我想你想要:

Configuration conf = getConf();

而不是

Configuration conf = new Configuration();

相关问题