PySpark SparkSession Builder与Kubernetes Master

Luc*_* Hu 6 apache-spark kubernetes pyspark jupyter

我最近看到一个pull请求被合并到Apache/Spark存储库,显然在K8s上添加了PySpark的初始Python绑定.我在PR上发布了一条评论,询问如何在Python Jupyter笔记本中使用spark-on-k8s,并被告知在这里问我的问题.

我的问题是:

有没有办法使用PySpark的SparkSession.Buildermaster设置为创建SparkContexts k8s://<...>:<...>,并让生成的作业运行spark-on-k8s,而不是local

例如:

from pyspark.sql import SparkSession
spark = SparkSession.builder.master('k8s://https://kubernetes:443').getOrCreate()
Run Code Online (Sandbox Code Playgroud)

我有一个在Kubernetes pod中运行的交互式Jupyter笔记本,我正在尝试使用PySpark创建一个SparkContext在spark-on-k8上运行而不是使用local[*]as master.

直到现在,我一直在收到错误说:

错误:Kubernetes目前不支持Python应用程序.

每当我设置masterk8s://<...>.

似乎PySpark总是在client模式下运行,目前似乎不支持spark-on-k8s- 也许有一些我不知道的解决方法.

提前致谢!

小智 5

pyspark客户端模式适用于Spark最新版本2.4.0

我就是这样做的(在 Jupyter 实验室):

import os
os.environ['PYSPARK_PYTHON']="/usr/bin/python3.6"
os.environ['PYSPARK_DRIVER_PYTHON']="/usr/bin/python3.6"

from pyspark import SparkContext, SparkConf
from pyspark.sql import SparkSession

sparkConf = SparkConf()
sparkConf.setMaster("k8s://https://localhost:6443")
sparkConf.setAppName("KUBERNETES-IS-AWESOME")
sparkConf.set("spark.kubernetes.container.image", "robot108/spark-py:latest")
sparkConf.set("spark.kubernetes.namespace", "playground")

spark = SparkSession.builder.config(conf=sparkConf).getOrCreate()
sc = spark.sparkContext
Run Code Online (Sandbox Code Playgroud)

注意:我在 Mac 上使用 Docker Desktop 本地运行 kubernetes。