Oozie 使用一个映射器处理多个目录中的输入

Oozie processing input in multiple directories with one mapper

我正在尝试设置一个 Oozie map-reduce 工作流操作来处理分布在多个目录中的输入文件。具体来说,假设我的输入分布在以下目录中

/data/d_20150629-2200
/data/d_20150630-2210
/data/d_20150530-2220
/data/d_20150531-2230
/data/d_20150701-2240
/data/d_20150702-2250

一般来说,没有一个简单的 glob 模式来捕获我在运行时期望的文件列表。

我的workflow.xml中的输入规范是:

<property>
    <name>mapred.input.dir</name>
    <value>${inputFile}</value>
</property>

而我的workflow.properties中的参数值为:

inputFile=/user/streaming/data/d_*

有了这个,我的 Oozie 工作自然会处理 data 下以 d_ 开头的 所有 个目录。有没有办法修改 workflow.xml 或 workflow.properties 来告诉 Oozie 只处理列出的六个目录下的文件?

在 Pig 中,可以指定以逗号分隔的输入路径列表。我还看到了这两篇文章 (post1, post2),它们都涉及到这个问题。但就我而言,我既不想在不同的输入路径上应用不同的映射器,也不想使用不同的输入格式。我只想为同一个映射器指定多个输入目录。

Hadoop版本:Hadoop 2.3.0-cdh5.1.5 Oozie 客户端构建版本:4.0.0-cdh5.1.5

感谢您的帮助。

mapred.input.dir 文档指出它是

a comma separated list of input directories

所以你可以在 workflow.properties

中定义一个 属性
inputFilePath=/user/streaming/data

并在workflow.xml

中使用
<property>
    <name>mapred.input.dir</name>
    <value>${inputFilePath}/d_20150629-2200,${inputFilePath}/d_20150630-2210, ...</value>
</property>

但是如果您只想 运行 它一次,那么 copy/move 将所需的内容放到一个单独的目录并将其传递给输入会更容易。