我有一个要求,分裂成2个输出文件的基础上过滤条件我的输入文件。我的输出目录如下所示:
/hdfs/base/dir/matched/YYYY/MM/DD
/hdfs/base/dir/notmatched/YYYY/MM/DD
我正在使用 MultipleOutputs
类来分割Map函数中的数据。在我的驱动程序类中,我使用如下:
FileOutputFormat.setOutputPath(job, new Path("/hdfs/base/dir"));
在mapper中,我使用的是:
mos.write(key, value, fileName); // File Name is generating based on filter criteria
这个程序一天内运行良好。但在第二天,我的程序失败了:
Exception in thread "main" org.apache.hadoop.mapred.FileAlreadyExistsException: Output directory hdfs://nameservice1/hdfs/base/dir already exists
我不能在第二天使用不同的基目录。
我如何处理这种情况?
注意:我不想通过读取输入来创建两个单独的文件。
2条答案
按热度按时间hts6caw31#
输出值中可以有一个标志列。稍后您可以处理输出并按标志列将其拆分。
rqdpfwrv2#
创建自定义o/p格式类,如下所示
并在驱动程序类中使用:
它将跳过是否存在o/p目录的检查。