【问题标题】:How to deploy code from an edge node to an hadoop cluster to schedule it with Oozie?如何将代码从边缘节点部署到 hadoop 集群以使用 Oozie 进行调度?
【发布时间】:2018-05-20 09:26:01
【问题描述】:

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

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

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

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

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

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

【问题讨论】:

    标签: git hadoop continuous-integration scheduled-tasks oozie


    【解决方案1】:

    Oozie 需要从 HDFS 运行 JAR。

    您可以使用 hdfs put 跟随 SCP 或 git pull + package 命令。

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

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

    另外,如果您想尝试以编程方式重新启动/终止正在运行的任务,Oozie 有一个 REST API

    【讨论】:

    • 刚刚做了一个 shell 脚本,将必要的文件复制到 HDFS 上(从边缘节点),然后使用命令行从边缘节点提交 oozie。在 egde 笔记上,我可以在 Git/Github 上拉/推代码。正如你在命令行中所说,我可以监控 oozie 作业的运行、重新启动或终止它们。非常适合运行 ML 混合 pyspark-sciki-learn 代码。
    猜你喜欢
    • 2013-05-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多