我使用hadoop级联来处理hdfs上的数据,如下所示:
Tap inTap_file = new Hfs(new TextDelimited(true, "|~|"), data_hadoop_inPath + "order_summary/*.txt");
Tap outTap_file = new Hfs(new TextDelimited(true, "|~|"), data_hadoop_workingPath + "order_summary");
Pipe copyFilePipe = new Pipe("copy");
Pipe filePipe = null;
try {
filePipe = PipeFactory.getPipe("order_summary_Pipe", order_summary_fields);
} catch (Exception e) {
LOGGER.error("Failed to get order summary pipe!", e);
}
FlowDef flowDef_fileType = FlowDef.flowDef().addSource(copyFilePipe, inTap_file)
.addTailSink(filePipe, outTap_file);
flowDef_fileType.setName("OrderSumDailyFlow");
问题是:收件箱下有多个文件。我使用*.txt匹配所有文件。处理完第一个文件后,就创建了“data\uhadoop\uworkingpath+order\u summary”目的地。在处理第二个文件时,出现了一个错误:data\uhadoop\uworkingpath+order\u summary已经存在。我注意到级联中有sinkmode,但sinkmode.update对hadoop不起作用。如何为每个文件使用不同的接收器路径?这里的最佳做法是什么?谢谢您!
1条答案
按热度按时间ewm0tg9j1#
一种选择是不将输出文件放入
outTap_file
. 它将生成零件文件。只提到你想写的路径。就像下面提到的