我正在尝试建立一个DAG,它将在第一个任务中创建一个Spark集群,在临时任务中将Spark应用程序提交到该集群,最后在最后一个任务中拆除Spark集群。
我现在正在尝试的方法是使用KubernetesPodOperators创建Spark Master和Worker Pod。问题是他们运行了一个不会退出的spark守护程序。吊舱上调用的命令永不退出的事实意味着这些任务在运行阶段会卡在气流中。因此,我想知道是否有一种方法可以运行spark守护程序,然后继续执行DAG中的下一个任务?
答案 0 :(得分:2)
我现在正在尝试的方法是使用KubernetesPodOperators创建Spark Master和Worker Pod。
Apache Spark provides working support,用于在Kubernetes集群中执行作业。它提供了一个驱动程序,该驱动程序能够启动Pod中的执行程序来运行作业。
您不需要直接在Airflow中创建 Master 和 Worker 吊舱。
而是构建一个Docker image containing Apache Spark with Kubernetes backend。 项目中提供了example Dockerfile。
然后根据location ~* \.(js|jpg|png|css)$ {
root /opt/glassfish4/glassfish/domains/domain1/applications/app/;
expires 30d;
}
,submit the given jobs根据此映像将其放置到容器中的群集中。以下示例作业是根据Apache Spark提供的文档改编而成的,以将Spark作业直接提交到Kubernetes集群。
upstream sub.domain.com {
server ip:8080 weight=100 max_fails=5 fail_timeout=5;
}
server {
listen 80;
server_name sub.domain.com;
location / {
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://sub.domain.com/app/;
}
location ~* \.(js|jpg|png|css)$ {
root /opt/glassfish4/glassfish/domains/domain1/applications/app/;
expires 30d;
}
}