如何使用oozie检查文件是不是存在于HDFS位置?

Posted

技术标签:

【中文标题】如何使用oozie检查文件是不是存在于HDFS位置?【英文标题】:How to check whether the file exist in HDFS location, using oozie?如何使用oozie检查文件是否存在于HDFS位置? 【发布时间】:2016-12-26 07:10:42 【问题描述】:

如何使用 Oozie 检查 HDFS 位置的文件是否存在?

在我的 HDFS 位置,我每天晚上 11 点都会收到类似 test_08_01_2016.csv 的文件。

我想在晚上 11.15 之后检查此文件是否存在。我可以使用 Oozie 协调器作业来安排批处理。

但是如何验证文件是否存在于 HDFS 中?

【问题讨论】:

【参考方案1】:

您可以在 oozie 中使用 EL 表达式,例如:

<decision name="CheckFile">
         <switch>
            <case to="nextOozieTask">
              $fs:exists('/path/test_08_01_2016.csv') <!--do note the path which should be in ''-->
            </case>
            <default to="MailActionFileMissing" />
         </switch>
</decision>

您还可以使用简单的 shell 脚本使用捕获输出来构建文件的名称。

【讨论】:

嗨 Abhiieor,感谢您的回复。它按预期工作:),我想将今天的日期值动态获取到文件名,即 test_08_22_2016。我已经尝试协调工作来获取日期值,但它不起作用..请建议我如何获取并附加文件中的日期值。 使用 ***.com/questions/1401482/…,将 - 转换为 _(比如 date1)然后 export path='/path/test_'$date1'.csv' 谢谢,我已经尝试过上面的日期格式,它将在今天的日期按预期工作。但在我的情况下,如果今天的文件不存在意味着即(test_08_22_2016),我必须验证最后一周的文件( test_08_21_2016、test_08_20_2016...等)。在那种情况下我该如何使用这个 生成最后一周的日期并创建文件名并签入 oozie 决策。 对不起,请您详细解答。我试图从 oozie 协调作业生成日期,我能够从协调作业中获取日期值,但我无法在 oozie 作业的文件名中添加/附加日期值。

以上是关于如何使用oozie检查文件是不是存在于HDFS位置?的主要内容,如果未能解决你的问题,请参考以下文章

如何检查图像是不是存在于特定位置?

使用 OOZIE 在文件到达 NFS 时触发执行的最佳方法

apache spark - 检查文件是不是存在

Java中如何检查文件是不是存在于目录中

Shell如何检查文件中的一行中是不是存在模式

如何检查文件是不是存在于 Firebase 存储中?