1

官方spark 文档仅包含有关spark-submit将代码部署到 spark 集群的方法的信息。它提到我们必须在 kubernetes api 服务器的地址前面加上k8s://. 通过Spark Operator部署时我们应该怎么做?

例如,如果我有一个像这样启动的基本 pyspark 应用程序,我该如何设置 master:

from pyspark import SparkConf, SparkContext
from pyspark.sql import SQLContext
from pyspark.sql.types import *
from pyspark import SparkConf, SparkContext

sc = SparkContext("local", "Big data App")
spark = SQLContext(sc)
spark_conf = SparkConf().setMaster('local').setAppName('app_name')

在这里我有local,如果我在非 k8 的集群上运行,我会提到带有spark://前缀或的主地址yarnk8s://如果通过 Spark Operator 部署,我还必须使用前缀吗?如果不是,主参数应该使用什么?

4

1 回答 1

2

最好不要setMaster在代码中使用,而是在通过 spark-submit 运行代码时指定它,如下所示(有关详细信息,请参阅文档):

./bin/spark-submit \
    --master k8s://https://<k8s-apiserver-host>:<k8s-apiserver-port> \
    --deploy-mode cluster \
    your_script.py

我没有使用 Spark 运算符,但它应该自动设置 master,正如我从文档中了解到的那样。

您还需要转换此代码:

sc = SparkContext("local", "Big data App")
spark = SQLContext(sc)
spark_conf = SparkConf().setMaster('local').setAppName('app_name')

更现代(见doc):

from pyspark.sql import SparkSession

spark = SparkSession \
    .builder \
    .appName("Python Spark SQL basic example") \
    .config("spark.some.config.option", "some-value") \
    .getOrCreate()

SQLContext弃用。

PS 我建议阅读学习 Spark 的第一章,第 2版可从 Databricks 网站免费获得

于 2020-09-16T20:02:40.730 回答