我正在尝试构建一个 Oozie 工作流程来每天执行需要特定库才能运行的 python 脚本。
目前,我在集群的一个节点(由 11 个节点组成)上创建了一个 python 虚拟环境(使用 venv)。通过 Oozie,我发现可以使用指定包含虚拟环境的节点的 SSH 操作来运行脚本。或者,可以使用 Shell 操作来运行 python 脚本,但这需要在将执行 shell 的节点(任何集群节点)上创建虚拟环境,并在库方面具有相同的依赖关系。
我想避免共享密钥或配置所有集群节点来实现这一点,并在文档中查找我发现本节讨论使用 Docker 容器启动应用程序,但在我的集群的 Hadoop 版本中,此功能是实验性的且不完整(Hadoop 3.0 .0)。我认为,如果您可以从 shell 启动 Docker 容器,那么您应该也可以从 Oozie 启动它们。
所以我的问题是:有人尝试过这样做吗?这样使用docker是不是有什么技巧呢?
我遇到过这个问题,但迄今为止 2019/09/30 还没有具体答案。
更新:我尝试这样做,并且它有效(您可以在我对这个问题的回答中找到更多信息)。我仍然想知道这是否是正确的方法。
我有一个 oozie 配置:
<spark xmlns="uri:oozie:spark-action:0.1">
<job-tracker>${jobTracker}</job-tracker>
<name-node>${nameNode}</name-node>
<configuration>
<property>
<name>mapred.job.queue.name</name>
<value>batch_2</value>
</property>
<property>
<name>job.queue.name</name>
<value>batch_1</value>
</property>
</configuration>
<master>yarn-cluster</master>
<mode>cluster</mode>
<name>Batch Search Oozie</name>
<class>eu.inn.ilms.batchSearch.BatchSearch</class>
<jar>hdfs:///user/oozie/workflows/batchsearch/lib/batchSearch-0.0.1-SNAPSHOT.jar
</jar>
<arg>${zookeeperQuorum}</arg>
<arg>${solrQuery}</arg>
<arg>${hdfsFolderPaths}</arg>
<arg>${solrFinalCollection}</arg>
<arg>${mongoServiceUrl}</arg>
</spark>
Run Code Online (Sandbox Code Playgroud)
map-reduce 作业在我想要的队列上执行。但是 spark 作业仍然默认执行。是否有允许我进行设置的属性?
我有一些复杂的 Oozie 工作流程需要从本地 Hadoop 迁移到 GCP Dataproc。工作流程由 shell 脚本、Python 脚本、Spark-Scala 作业、Sqoop 作业等组成。
我遇到了一些包含我的工作流程调度需求的潜在解决方案:
请让我知道哪种选项在性能、成本和迁移复杂性方面最有效。
hadoop google-cloud-dataproc airflow oozie-workflow google-cloud-composer