2
我有一个Hadoop作业,我想将输出文件夹的复制数设置为1,我想在Java代码中执行此操作。我们服务器上的默认值是3.另一个导入方面是在输出写入之前设置复制编号。这意味着我不想用3个副本写出整个输出,然后将其减少到1.我希望在开始写入输出文件夹之前设置它,以便只有一个复制。原因是输出可能很大,我想腾出一些空间。在执行之前在Java代码中设置Hadoop输出文件夹复制
@Override
public int run(String[] args) throws Exception {
/** Get configuration */
Configuration conf = getConf();
conf.setStrings("args", args);
/** Job configuration */
Job job = Job.getInstance(conf, "HadoopSearch");
job.setJarByClass(Search.class);
job.setOutputKeyClass(Text.class);
job.setOutputValueClass(NullWritable.class);
/** Set Mapper and Reducer, use identity reducer*/
job.setMapperClass(Map.class);
job.setReducerClass(Reducer.class); // identity
/** Set input and output formats */
job.setInputFormatClass(TextInputFormat.class);
job.setOutputFormatClass(TextOutputFormat.class);
/** Set input and output path */
FileInputFormat.addInputPath(job, new Path("IN PATH"));
FileOutputFormat.setOutputPath(job, new Path("OUT PATH"));
job.waitForCompletion(true);
return 0;
}
我知道,我可以把这个使用FileSystem.setReplication(Path p, short s)
但这只是每个文件的工作,我希望它为整个文件夹。我可以循环浏览文件夹内的文件,但更重要的是,这似乎只在作业完成并且文件已存在之后才起作用。正如我所假设的那样,复制的流程已经在运行,我可以用磁盘空间来解决我想避免的问题。