官方 Spark 文档仅包含有关将代码部署到 Spark 群集的spark-submit
方法的信息。它提到我们必须在 kubernetes api 服务器的地址前面加上k8s://
。通过 Spark Operator 进行部署时应该怎么做?
例如,如果我有一个像这样启动的基本 pyspark 应用程序,我该如何设置主节点:
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 的集群上运行,我会提到带有前缀或yarn
的主地址spark://
。如果通过 Spark 运算符进行部署,是否还必须使用k8s://
前缀? 如果不是,主参数应该使用什么?
最好不要在代码中使用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')
到更现代(见文档):
from pyspark.sql import SparkSession
spark = SparkSession
.builder
.appName("Python Spark SQL basic example")
.config("spark.some.config.option", "some-value")
.getOrCreate()
因为SQLContext
已被弃用。
附言我建议阅读Learning Spark的第一章,2ed可以从Databricks网站免费获得。