如何根据文件名定义hadoop级联分接到不同路径?
我使用Hadoop级联处理HDFS上的数据,如下所示:如何根据文件名定义hadoop级联分接到不同路径?,hadoop,cascading,Hadoop,Cascading,我使用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 copyFile
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匹配所有文件。处理完第一个文件后,创建了数据\u hadoop\u workingPath+订单\u摘要目的地。在处理第二个文件时,出现一个错误,即数据\u hadoop\u workingPath+订单\u摘要已经存在。我注意到级联中有SinkMode,但SinkMode.UPDATE不适用于Hadoop。如何为每个文件使用不同的接收器路径?这里的最佳实践是什么?
谢谢大家! 一个选项是不将输出文件放入outTap\u文件中。它将生成零件文件
Tap outTap_file = new Hfs(new TextDelimited(true, "|~|"),
data_hadoop_workingPath + "order_summary");
仅提及您要写入的路径。就像下面提到的
Tap outTap_file = new Hfs(new TextDelimited(true, "|~|"),
data_hadoop_workingPath);