【问题标题】:Running scheduled Spark job运行计划的 Spark 作业
【发布时间】:2015-08-03 05:30:20
【问题描述】:

我有一个 Spark 作业,它读取源表,执行一些 map/flatten/reduce 操作,然后将结果存储到我们用于报告的单独表中。目前,此作业是使用spark-submit 脚本手动运行的。我想安排它每天晚上运行,以便在一天开始时预先填充结果。我:

  1. 设置一个 cron 作业来调用 spark-submit 脚本?
  2. 将调度添加到我的作业类中,以便提交一次但每晚执行操作?
  3. Spark 中是否有内置机制或单独的脚本可以帮助我做到这一点?

我们在独立模式下运行 Spark。

任何建议表示赞赏!

【问题讨论】:

标签: apache-spark


【解决方案1】:

Spark 中没有内置机制可以提供帮助。对于您的情况,cron 工作似乎是合理的。如果您发现自己不断向计划作业添加依赖项,请尝试Azkaban

【讨论】:

    【解决方案2】:

    您可以使用 cron 选项卡,但是当您开始拥有依赖于其他 spark 作业的 spark 作业时,我建议您使用 pinball 进行协调。 https://github.com/pinterest/pinball

    要让一个简单的 crontab 工作,我会创建包装脚本,例如

    #!/bin/bash
    cd /locm/spark_jobs
    
    export SPARK_HOME=/usr/hdp/2.2.0.0-2041/spark
    export HADOOP_CONF_DIR=/etc/hadoop/conf
    export HADOOP_USER_NAME=hdfs
    export HADOOP_GROUP=hdfs
    
    #export SPARK_CLASSPATH=$SPARK_CLASSPATH:/locm/spark_jobs/configs/*
    
    CLASS=$1
    MASTER=$2
    ARGS=$3
    CLASS_ARGS=$4
    echo "Running $CLASS With Master: $MASTER With Args: $ARGS And Class Args: $CLASS_ARGS"
    
    $SPARK_HOME/bin/spark-submit --class $CLASS --master $MASTER --num-executors 4 --executor-cores 4 $ARGS spark-jobs-assembly*.jar $CLASS_ARGS >> /locm/spark_jobs/logs/$CLASS.log 2>&1
    

    然后通过

    创建一个crontab
    1. crontab -e
    2. 插入 30 1 * * * /PATH/TO/SCRIPT.sh $CLASS "yarn-client"

    【讨论】:

    • 很好,我以前没有遇到过弹球,我去看看。看起来像一个相当新的项目 - 你知道它是否稳定/生产质量?
    • 正在开发中对其进行评估,尽管我知道 pinterest 在生产中使用它,所以我会说它必须是稳定的。也就是说它将根据 pinterest 的用例量身定制。另一个正在看的是github.com/spotify/luigi,如果它对我们有帮助,我会更新这个问题。
    • 方便的别名:“/usr/hdp/current/spark-client/bin/spark-submit”
    【解决方案3】:

    仅当您不关心高可用性时,Crontab 才足够好,因为它会在可能发生故障的单台机器上运行。

    您在独立模式下运行的事实表明您没有安装 hadoop 和 mesos,它们有一些工具可以使这项任务更加可靠。

    crontab 的替代方案(尽管目前也存在高可用性问题)是 airbnb 的气流。它专为此类用例而构建(除其他外),请参见此处:http://airflow.incubator.apache.org/scheduler.html

    Mesos 用户可以尝试使用 chronos,它是集群的 cron 作业:https://github.com/mesos/chronos

    还有来自hadoop世界的ooziehttp://blog.cloudera.com/blog/2013/01/how-to-schedule-recurring-hadoop-jobs-with-apache-oozie/

    如果这是一项关键任务,您甚至可以自己编程,如果您使用 consul/zookeper 或其他提供领导选举的工具 - 只需让您的流程在多台机器上运行,让它们竞争领导并确保领导提交工作的火花。

    您可以使用 spark job server 使作业提交更优雅:https://github.com/spark-jobserver/spark-jobserver

    【讨论】:

    • Airflow 很棒,虽然 Airflow 不在 Spark Streaming 或 Storm 空间中,但它更适合 Oozie 或 Azkaban。
    • 该问题讨论的是批处理作业不是流式传输,因此气流是正确的工具。
    【解决方案4】:

    所有 Apache Hadoop 发行版中最标准的调度程序是 Oozie。

    https://oozie.apache.org/docs/4.2.0/DG_SparkActionExtension.html

    根据我最初的经验,一旦掌握了 XML,使用它并不难,它就像一个魅力。

    【讨论】:

    • 是否支持定时运行job?我在 oozie 工作流或属性文件中没有看到周期/间隔参数
    【解决方案5】:

    您可以使用Rundeck 安排具有良好 UI 屏幕的作业,以管理作业失败和通知。

    【讨论】:

      【解决方案6】:

      推荐的调度器:

      • Airbnb 气流
      • Apache Oozie
      • Apache Nifi
      • Cron 作业(最不推荐)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-09-12
        • 2018-02-28
        • 1970-01-01
        • 1970-01-01
        • 2021-05-10
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多