我有一个pyspark项目,应用程序条目为main.py
,etl作业需要打包在jobs.zip
内才能上传。
一些etl作业需要通过模板发送电子邮件。
需要注意的是,模板文件不能打包到jobs.zip
中,或者不能在spark作业中读取。
我的星火提交想要:
spark-submit
--driver-memory 2g
--executor-memory 2g
--num-executors 1
--executor-cores 2
--name report_v2
--py-files jobs.zip,libs.zip
--files templates/accuracy_report_v2.md
main.py
--job report_v2
在气流中,我的dags文件夹结构为:
dc:~/airflow/dags$ tree
.
├── data_wrangling
│ ├── data_wrangling_dag_check.py
└── sf_dags
├── config.py
├── jobs.zip
├── libs.zip
├── main.py
├── sf_report.py
├── templates
│ ├── accuracy_report.md
│ └── accuracy_report_v2.md
└── utils.py
我曾经在这个Spark作业的配置中设置template_path
,只是一个相对路径templates/accuracy_report_v2.md
。
我直接在/airflow/dags/sf_dags
文件夹下运行spark-submit xxxx 很好。
但是气流会抱怨**找不到相对路径文件,显然气流没有在/airflow/dags/sf_dags
文件夹下执行spark-submit。
因此,我必须使用绝对路径,因此,spark Submit会如下所示:
spark-submit
--driver-memory 2g
--executor-memory 2g
--num-executors 1
--executor-cores 2
--name report_v2
--py-files /home/dc/airflow/dags/sf_dags/jobs.zip,/home/dc/airflow/dags/sf_dags/libs.zip
--files /home/dc/airflow/dags/sf_dags/templates/accuracy_report_v2.md /home/dc/airflow/dags/sf_dags/main.py
--job report_v2
--job-args template_path=/home/dc/airflow/dags/sf_dags/templates/accuracy_report_v2.md
我必须添加一个额外的arg --job-args template_path=/home/dc/airflow/dags/sf_dags/templates/accuracy_report_v2.md
,以确保当airflow提交时,我的spark作业不会失败。
我的意思是这是一个多余的论点,我不喜欢这样。
如何使气流在/airflow/dags/sf_dags
文件夹下执行spark-submit,所以我不需要添加额外的参数?
PS:
AIRFLOW_HOME
必须为/home/dc/airflow/dags/
AIRFLOW_HOME
子文件夹中,这导致了这个问题。