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



我正在尝试通过cron job提交我的pyspark代码。当我手动运行时,它工作正常。通过 cron 它不起作用。

这是我的项目结构:

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

主要代码位于src/jobsexecute_metrics.py。我在execute_metrics.py中使用get_spark_session.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'

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

提前致谢

你的模块目录没有进入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 外壳:

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

我通过在项目目录中添加一个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的函数。

最新更新