Python中kubernetes集群上的Spark submit(2.3)

2024-06-12 18:19:25 发布

您现在位置:Python中文网/ 问答频道 /正文

因此,既然k8s在2.3中直接与spark集成,我从控制台提交的spark在kuberenetes主机上正确执行,而没有运行任何spark master pods,spark处理了k8s的所有细节:

spark-submit \
  --deploy-mode cluster \
  --class com.app.myApp \
  --master k8s://https://myCluster.com \
  --conf spark.kubernetes.authenticate.driver.serviceAccountName=spark \
  --conf spark.app.name=myApp \
  --conf spark.executor.instances=10 \
  --conf spark.kubernetes.container.image=myImage \
  local:///myJar.jar

我要做的是通过AWS lambda向我的k8s集群提交一个spark。以前我直接通过spark master REST API使用命令(不使用kubernetes):

^{pr2}$

而且成功了。现在,我想集成Kubernetes并以类似的方式进行集成,我从python向Kubernetes集群提交一个API请求,并让spark处理k8s的所有细节,理想情况下类似于:

request = requests.Request(
    'POST',
    "k8s://https://myK8scluster.com:443",
    data=json.dumps(parameters))

在Spark 2.3/Kubernetes集成中有可能吗?在


Tags: httpsmastercomapiappconf集群myapp
1条回答
网友
1楼 · 发布于 2024-06-12 18:19:25

如果使用本地Kubernetes支持,恐怕spark2.3是不可能的。在

根据deployment instruction中的描述,提交过程容器有几个步骤:

  1. Spark创建了一个在Kubernetes吊舱内运行的Spark驱动程序。在
  2. 驱动程序创建同样运行在kubernetespods中的执行器并连接到它们,并执行应用程序代码。在
  3. 当应用程序完成时,executor pod将终止并被清理,但驱动程序pod将保留日志并在kubernetesapi中保持“completed”状态,直到最终被垃圾回收或手动清理。在

所以,事实上,你没有地方提交一份工作,直到你开始一个提交过程,这将启动一个第一个Spark的pod(驱动程序)。在应用程序完成后,一切都终止了。在

因为在AWS Lambda上运行一个fat容器并不是一个最佳的解决方案,而且还因为if不是在容器中运行任何命令的方法(这是可能的,但是对于hack,这里是关于在AWS Lambda中执行Bash的blueprint)最简单的方法是编写一些小型的自定义服务,它将在AWS Lambda之外的机器上工作,并在应用程序和spark-submit实用程序之间提供REST接口。我看不出任何其他的方法可以让它不痛苦。在

相关问题 更多 >