【问题标题】:Run shell script with Oozie: how to get the script path in HDFS inside the script使用 Oozie 运行 shell 脚本:如何在脚本中获取 HDFS 中的脚本路径
【发布时间】:2015-08-26 17:18:18
【问题描述】:

我正在使用 Oozie 运行 Shell 脚本。首先我将脚本上传到 HDFS,然后脚本应该将其日志转发到该脚本存储在 HDFS 中的同一目录中的日志文件,这意味着生成的日志文件应该在 HDFS 中。

有人知道如何实现这个目标吗?

【问题讨论】:

  • 在workflow.xml中将脚本的HDFS目录定义为参数,然后将这个参数值传递给脚本很简单,但是这一步似乎没有必要,可能有一些捷径为了这。有谁知道吗?
  • 您是如何在 HDFS 中实现这一点的。我可以在 Linux 中做到这一点,但在 HDFS 中不行

标签: shell hdfs oozie


【解决方案1】:

...在 HDFS 中存储此脚本的同一目录中的日志文件...

Oozie Shell 操作包含一个<file> 元素和脚本的 HDFS 路径。但它的工作方式并不像你想象的那样:

  1. Oozie 要求 YARN 在某处分配容器
  2. Oozie 要求 YARN 下载一些文件到容器的私有本地文件系统(在 CWD 中),尤其是 <file> 的东西
  3. 最后,Oozie 要求 YARN 运行 本地版本的脚本

底线:执行的脚本无法知道其原始 HDFS 目录。 Action 必须将该目录显式作为脚本参数或环境变量传递。

假设您使用环境变量,运行存档部分的明显解决方案类似于 hdfs dfs -appendToFile ./MySession.log $LOG_ARCHIVE_DIR/archive.log

【讨论】:

  • 非常感谢您的解释 :) 我确实用环境变量解决了这个问题
猜你喜欢
  • 2011-07-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-12
  • 2015-10-07
  • 1970-01-01
  • 2019-01-27
  • 2019-09-06
相关资源
最近更新 更多