我有一个kubernetes集群,其中部署了一个自定义的spark集群。 Spark在名称空间“ spark”中具有一个主容器和一个工作容器。主容器具有服务“ spark-master-svc”,它公开了端口7077。
我有另一个运行Python应用程序的Pod,有时我需要从其中发送数据来激发火花。吊舱提供无头服务。
该应用会像这样连接到火花
import json
from pyspark import SparkConf
from pyspark.sql import SparkSession
def get_spark(app):
spark = (SparkSession.builder.master(f'spark://spark-master-svc.spark:7077')
.config(conf=SparkConf())
.config('spark.ui.showConsoleProgress', 'false')
.config('spark.executor.extraJavaOptions',
'-XX:-UseGCOverheadLimit -XX:+PrintGCDetails -XX:+PrintGCTimeStamps')
.appName(app))
spark = spark.getOrCreate()
spark.sparkContext.setLogLevel('WARN')
spark = get_spark('demo')
rdd = spark.sparkContext.parallelize(json.dumps([{'a':1,'b':'test'}])) # demo purpose
df = spark.read.json(rdd)
问题在于,由于某种原因,spark无法连接回我的演示应用程序以绑定到随机端口(或我指定的任何其他端口)上。这是一个示例日志:
Exception in thread "main" java.lang.reflect.UndeclaredThrowableException
...
Caused by: org.apache.spark.rpc.RpcTimeoutException: Cannot receive any reply from demo:37493 in 120 seconds. This timeout is controlled by spark.rpc.askTimeout
...
这告诉我spark正在尝试通过随机端口连接到我的演示容器,但无法连接。 我将如何解决这个问题?