如何将代码从边缘节点部署到 hadoop 集群以使用 Oozie 对其进行调度?

How to deploy code from an edge node to an hadoop cluster to schedule it with Oozie?

我有一个 pyspark 代码,它 运行 在 Hadoop 集群的边缘节点上。此 pyspark 代码执行从特征工程到 ML 训练和预测的各种步骤。代码在 github 上,我可以将它拉到边缘节点上。可以使用 yarn/client 或 yarn/cluster 模式的 spark-submit 提交代码。到目前为止一切顺利。

现在我想定期安排其中一些任务:

  1. 我对边缘节点有些限制,无法使用crontab
  2. 可能最好的选择是使用 Oozie 提交作业。

我的问题是每次我做一些修改时如何在 Haddop 集群上以 clean/easy 的方式部署代码,以便可以使用 Oozie 进行调度(我想 Oozie 是调度的最佳选择,因为它已安装)

  1. 我可以从边注上的 github 中提取代码,然后复制并覆盖 hdfs 上的 de 文件
  2. CI/CD尚未到位,计划用于生产Hadoop集群。
  3. 还有其他解决方案吗?

此类任务的最佳实践是什么? (这是数据 Science/ML 代码,所以我们有自己的 Hadoop 集群,它与生产集群分开(数据摄取,使用 scala 进行数据处理 ...)

Oozie 需要 运行 来自 HDFS 的 JAR。

您可以在 SCP 或 git pull + package 命令后加上 hdfs put。

如果使用 Maven,您可以尝试找到 Maven Wagon SSH 或 Maven Exec 插件并将它们绑定到 Maven 生命周期的部署阶段。然后 mvn deploy 将 运行 将代码放在边缘节点和 HDFS 上的必要命令。这基本上与您的 CD 引擎需要执行的任务相同,尽管您需要为 CI/CD 服务器上的 Hadoop 集群配置 Hadoop 客户端以执行 运行 hdfs 命令。

如果您设置了一个 Oozie 协调器,并且只需替换 HDFS 上的 JAR 或 Oozie 作业 属性 文件,则无需在您的部署周期内编辑任何其他 Oozie 设置。

另外,Oozie 有一个 REST API 如果您想尝试 restart/kill 运行 以编程方式执行任务