PySpark SparkSession Builder与Kubernetes Master

时间:2018-06-14 16:36:25

标签: apache-spark pyspark kubernetes jupyter

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

我的问题是:

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

E.g:

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

我在Kubernetes pod中运行了一个交互式Jupyter笔记本,我正在尝试使用PySpark创建一个{8},它运行在spark-on-k8s而不是使用SparkContext作为local[*]

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

  

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

每当我将master设置为master时。

似乎PySpark总是以k8s://<...>模式运行,目前似乎不支持client - 也许有一些我不知道的解决方法。

提前致谢!

1 个答案:

答案 0 :(得分:1)

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

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