如何使Airflow SparkSubmitOperator从相对路径上传文件?

时间:2019-09-06 03:16:34

标签: python apache-spark pyspark airflow

我有一个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子文件夹中,这导致了这个问题。

0 个答案:

没有答案