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

时间:2015-07-05 06:14:31

标签: hadoop oozie

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

.myClass {
    color: #bbb;
}

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

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

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

我的workflow.properties中的参数值是:

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

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

在Pig中,可以指定以逗号分隔的输入路径列表。我还遇到了这两个涉及问题的帖子(post1post2)。但在我的情况下,我既不想在不同的输入路径上应用不同的映射器,也没有不同的输入格式。我只想为同一个映射器指定多个输入目录。

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

感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

mapred.input.dir文档声明它是

  

以逗号分隔的输入目录列表

所以你可以在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>

但是如果你只想运行一次,那么将所需内容复制/移动到一个单独的目录并将其传递给输入会更容易。