У меня есть кластер kubernetes, в котором я развернул собственный искровой кластер.
У Spark есть один главный модуль и один рабочий модуль в пространстве имен «искра». У главного модуля есть служба "spark-master-svc", которая предоставляет порт 7077.
У меня есть еще один модуль, в котором запущено приложение на Python, из которого мне иногда нужно отправлять данные для запуска. Стручок имеет безголовый сервис.
Это приложение подключается к искре так:
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 пытается подключиться к моему демонстрационному контейнеру через произвольный порт, но не может.
Как бы я мог это исправить?