使用Cronjob(crontab)运行PySpark不起作用

时间:2020-06-12 02:31:54

标签: python pyspark cron

我正在尝试通过cron作业提交我的pyspark代码。当我手动运行时,它的工作正常。通过cron无法正常工作。

这是我拥有的项目结构:

my-project
|
|--src
|----jobs
|------execute_metrics.py
|----utils
|------get_spark_session.py

主要代码位于execute_metrics.py中的src/jobs中。我正在使用get_spark_session.py execute_metrics.py中使用from src.utils import get_spark_session

我创建了一个shell脚本execute_metric.sh,其中包含以下内容,用于执行cron作业

#!/bin/bash
PATH=<included entire path here>
spark-submit <included required options> src/jobs/execute_metrics.py
my-project
|
|--src
|----jobs
|------execute_metrics.py
|----utils
|------get_spark_session.py
|--execute_metric.sh

当我使用./execute_metric.sh运行此shell脚本时,我可以看到结果。

现在,我需要这样做才能每分钟运行一次作业。因此,我创建了一个具有以下内容的cron文件,并复制到了同一目录

* * * * * ./execute_metric.sh > execute_metric_log.log

my-project
|
|--src
|----jobs
|------execute_metrics.py
|----utils
|------get_spark_session.py
|--execute_metric.sh
|--execute_cron.crontab

此cron每分钟运行一次,但给我错误: ModuleNotFoundError: No module named 'src'

有人可以告诉我这里出了什么问题吗?

预先感谢

2 个答案:

答案 0 :(得分:1)

您的模块目录未进入python路径。尝试以下操作之一:

明确设置PYTHONPATH

#!/bin/bash
PATH=<included entire path here>
PYTHONPATH=somewhere/my-project/src
spark-submit <included required options> src/jobs/execute_metrics.py

从您的项目目录中调用spark shell:

#!/bin/bash
PATH=<included entire path here>
cd somewhere/my-project/src
spark-submit <included required options> execute_metrics.py

答案 1 :(得分:0)

我通过在项目目录中添加main.py文件来解决此问题,并更改了cron以执行main.py。现在,项目结构如下:

my-project
|
|--src
|----jobs
|------execute_metrics.py
|----utils
|------get_spark_session.py
|--execute_metric.sh
|--execute_cron.crontab
|--main.py

main.py中,我正在调用execute_metrics.py的功能。

相关问题