我正在实施一个oozie工作流程,在第一项工作中,我使用sqoop从数据库中读取数据并将其写入hdfs。在第二个作业中,我需要读取大量数据并使用我刚刚在作业1中编写的文件来处理大数据。这就是我的想法或尝试:
假设作业将文件写入hdfs上的某个目录,将文件添加到作业2的驱动程序类中的分布式缓存中将无法正常工作,因为oozie工作流只知道作业的mapper和reducer类。 (如果我错了,请纠正我)
我还尝试写入工作流的lib目录,希望文件会自动添加到分布式缓存中,但我知道只有在作业运行时才能读取lib目录。
我还想过如果我可以将文件添加到作业2的setup()
中的分布式缓存中,那么我可以在mapper / reducer中访问它们。我不知道如何在setup()
中添加文件,是否可能?
如何从分布式缓存中读取后续作业中上一个作业的输出文件。我已经在使用作业二的输入目录来读取需要处理的数据,所以我不能使用它。
我在Ubuntu 12.04虚拟机上使用Hadoop 1.2.1,Oozie 3.3.2。
答案 0 :(得分:0)
添加以下属性,将文件或存档添加到map-reduce操作中。 Refer to this documentation for details.
<file>[FILE-PATH]</file>
...
<archive>[FILE-PATH]</archive>
您还可以在java命令行中输入,如下所示。
<main-class>org.apache.oozie.MyFirstMainClass</main-class>
<java-opts>-Dblah</java-opts>
<arg>argument1</arg>
<arg>argument2</arg>