默认情况下,Oozie共享的lib目录为Hive,Pig和Map-Reduce提供了库。如果我想在Oozie上运行Spark作业,最好将Spark lib jar添加到Oozie的共享库中,而不是将它们复制到app的lib目录中。
如何在Oozie的共享库中添加Spark lib jar(包括spark-core及其依赖项)?任何评论/答案都表示赞赏。
答案 0 :(得分:2)
Spark计划将与Oozie 4.2.0一起发布,即使该文档似乎有些落后。在这里查看相关的JIRA: Oozie JIRA - Add spark action executor
Cloudera的发行CDH 5.4已经有了它,请参阅官方文档: CDH 5.4 oozie doc - Oozie Spark Action Extension
使用旧版Oozie,可以通过各种方法共享罐子。第一种方法可能效果最好。完整的列表无论如何:
以下是在工作流程中包含jar的各种方法:
将oozie.libpath = / path /设置为/ jars,将另一个/ path /设置为job.properties中的/ jars。
如果您有许多工作流程都需要相同的jar,这非常有用;您可以将它放在HDFS中的一个位置,并将其与许多工作流程一起使用。罐子将可用于该工作流程中的所有操作。 没有必要在ShareLib位置指出这一点。 (我在很多工作流程中都看到了这一点。)Oozie知道ShareLib的位置,并且如果在job.properties中设置oozie.use.system.libpath = true,它将自动包含它。
在HDFS中的workflow.xml旁边创建一个名为“lib”的目录,并将jar放在那里。
如果您只有一个工作流程需要的罐子,这非常有用。 Oozie将自动将这些罐子提供给该工作流程中的所有操作。
使用单个jar的路径指定动作中的标记;你可以有多个标签。
如果您只想要某个特定操作的jar而不是工作流中的所有操作,这将非常有用。 缺点是您必须在workflow.xml中指定它们,因此如果您需要添加/删除一些jar,则必须更改workflow.xml。
将jar添加到ShareLib(例如/ user / oozie / share / lib / lib_ / pig)
虽然这样可行,但不建议这样做有两个原因: 使用该ShareLib的每个工作流程都将包含其他jar,这些工作流程和用户可能会意外。 升级ShareLib时,您必须将其他jar重新复制到新的ShareLib。
引用Rober Kanter的博客:How-to: Use the ShareLib in Apache Oozie (CDH 5)