gpt4 book ai didi

hadoop - 如何根据文件名将hadoop层叠水龙头定义到不同的路径?

转载 作者:行者123 更新时间:2023-12-02 21:41:58 24 4
gpt4 key购买 nike

我使用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_hadoop_workingPath + order_summary”目标。处理第二个文件时,错误提示“data_hadoop_workingPath + order_summary已存在”。我注意到级联中有SinkMode,但SinkMode.UPDATE不适用于Hadoop。如何为每个文件使用不同的接收器路径?这里的最佳做法是什么?
谢谢!

最佳答案

一种选择是不将输出文件放在outTap_file中。它将生成零件文件。

Tap outTap_file = new Hfs(new TextDelimited(true, "|~|"),
data_hadoop_workingPath + "order_summary");

仅提及您要写入的路径。像下面提到的
Tap outTap_file = new Hfs(new TextDelimited(true, "|~|"),
data_hadoop_workingPath);

关于hadoop - 如何根据文件名将hadoop层叠水龙头定义到不同的路径?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28106936/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com