首页 > 解决方案 > Spark 执行器驱动程序未知主机问题

问题描述

目前我在使用 spark 时遇到了问题。这是详细信息。

  1. 我在 VM 上设置了一个具有三个节点的 Spark 集群,一个是主节点,另外两个是工作节点。
  2. Spark 版本为 3.0.0。
  3. 我创建了一个应用程序并将其部署到 K8S pod 中。
  4. 然后我在我的 K8S pod 中触发了应用程序。
  5. 我创建 Spark Context 的代码是这样的。

代码:

val conf = SparkConf().setMaster(sparkMaster).setAppName(appName)
    .set("spark.cassandra.connection.host", hosts)
    .set("spark.cassandra.connection.port", port.toString())
    .set("spark.cores.max", sparkCore)
    .set("spark.executor.memory", executorMemory)
    .set("spark.network.timeout", "50000")

然后我得到了错误:

Spark 执行器命令:“/usr/lib/jvm/java-11-openjdk-11.0.7.10-4.el7_8.x86_64/bin/java”“-cp”“/opt/spark3/conf/:/opt/spark3/ jars/*:/etc/hadoop/conf" "-Xmx1024M" "-Dspark.network.timeout=50000" "-Dspark.driver.port=34471" "-Dspark.cassandra.connection.port=9042" "org. apache.spark.executor.CoarseGrainedExecutorBackend" "--driver-url" "spark://CoarseGrainedScheduler@my-spark-application-gjwd7:34471" "--executor-id" "281" "--hostname" "100.84. 162.9" "--cores" "1" "--app-id" "app-20200722115716-0000" "--worker-url" "spark://Worker@100.84.162.9:33670"

错误是这样的:

Exception in thread "main" java.lang.reflect.UndeclaredThrowableException
Caused by: org.apache.spark.SparkException: Exception thrown in awaitResult:
Caused by: java.io.IOException: Failed to connect to my-spark-application-gjwd7:34471
Caused by: java.net.UnknownHostException: my-spark-application-gjwd7

我认为这个问题是由于工作节点无法回调驱动程序引起的,因为我的驱动程序在 K8S pod 中。

你知道我该如何解决这个问题。我在这里有些担心。1.如何在我的代码中为火花上下文设置驱动程序主机和端口?根据 Spark,端口是随机的。2.Spark executor如何回调到驱动运行的K8S pod?

标签: apache-sparkkubernetesdriver

解决方案


推荐阅读