【问题标题】:Connecting to a remote Spark master - Java / Scala连接到远程 Spark master - Java / Scala
【发布时间】:2017-06-22 06:07:10
【问题描述】:

我在 AWS 中创建了一个 3 节点(1 个主节点,2 个工作节点)Apache Spark 集群。我可以从主服务器向集群提交作业,但是我无法让它远程工作。

/* SimpleApp.scala */
import org.apache.spark.SparkContext
import org.apache.spark.SparkContext._
import org.apache.spark.SparkConf

object SimpleApp {
  def main(args: Array[String]) {
    val logFile = "/usr/local/spark/README.md" // Should be some file on your system
    val conf = new SparkConf().setAppName("Simple Application").setMaster("spark://ec2-54-245-111-320.compute-1.amazonaws.com:7077")
    val sc = new SparkContext(conf)
    val logData = sc.textFile(logFile, 2).cache()
    val numAs = logData.filter(line => line.contains("a")).count()
    val numBs = logData.filter(line => line.contains("b")).count()
    println(s"Lines with a: $numAs, Lines with b: $numBs")
    sc.stop()
  }
}

我可以从主人那里看到:

Spark Master at spark://ip-171-13-22-125.ec2.internal:7077
URL: spark://ip-171-13-22-125.ec2.internal:7077
REST URL: spark://ip-171-13-22-125.ec2.internal:6066 (cluster mode)

所以当我从本地机器执行SimpleApp.scala 时,它无法连接到Spark Master

2017-02-04 19:59:44,074 INFO  [appclient-register-master-threadpool-0] client.StandaloneAppClient$ClientEndpoint (Logging.scala:54)  [] - Connecting to master spark://ec2-54-245-111-320.compute-1.amazonaws.com:7077...
2017-02-04 19:59:44,166 WARN  [appclient-register-master-threadpool-0] client.StandaloneAppClient$ClientEndpoint (Logging.scala:87)  [] - Failed to connect to spark://ec2-54-245-111-320.compute-1.amazonaws.com:7077
org.apache.spark.SparkException: Exception thrown in awaitResult
    at org.apache.spark.rpc.RpcTimeout$$anonfun$1.applyOrElse(RpcTimeout.scala:77) ~[spark-core_2.10-2.0.2.jar:2.0.2]
    at org.apache.spark.rpc.RpcTimeout$$anonfun$1.applyOrElse(RpcTimeout.scala:75) ~[spark-core_2.10-2.0.2.jar:2.0.2]
    at scala.runtime.AbstractPartialFunction.apply(AbstractPartialFunction.scala:33) ~[scala-library-2.10.0.jar:?]
    at org.apache.spark.rpc.RpcTimeout$$anonfun$addMessageIfTimeout$1.applyOrElse(RpcTimeout.scala:59) ~[spark-core_2.10-2.0.2.jar:2.0.2]

但是,我知道如果我将主服务器设置为local,它会起作用,因为这样它就会在本地运行。但是,我想让我的客户端连接到这个远程主机。我怎样才能做到这一点? Apache 配置外观文件。我什至可以远程登录到该公共 DNS 和端口,我还为每个 EC2 实例配置了公共 DNS 和主机名 /etc/hosts。 我希望能够向这个远程主人提交作业,我错过了什么?

【问题讨论】:

    标签: java scala hadoop apache-spark amazon-ec2


    【解决方案1】:

    要绑定主主机名/IP,请转到您的 spark 安装 conf 目录 (spark-2.0.2-bin-hadoop2.7/conf) 并使用以下命令创建 spark-env.sh 文件。

    cp spark-env.sh.template spark-env.sh
    

    在 vi 编辑器中打开 spark-env.sh 文件,并在下面添加您的主机的主机名/IP。

    SPARK_MASTER_HOST=ec2-54-245-111-320.compute-1.amazonaws.com
    

    使用 stop-all.sh 和 start-all.sh 停止和启动 Spark。现在您可以使用它来连接远程主机了

    val spark = SparkSession.builder()
      .appName("SparkSample")
      .master("spark://ec2-54-245-111-320.compute-1.amazonaws.com:7077")
      .getOrCreate()
    

    有关设置环境变量的更多信息,请查看http://spark.apache.org/docs/latest/spark-standalone.html#cluster-launch-scripts

    【讨论】:

    • Abaghel,我可以在 AWS 中创建一个实例,然后编辑 spark-env?
    • 你能发布你的完整堆栈跟踪吗?您是否使用相同版本的火花进行连接?请查看stackoverflow.com/questions/38559597/…
    • 是的,我会发帖的。我正在使用相同的版本:spark 2.0.2。我将创建一个可以在这个问题中分享的 spark 实例(单个节点)。
    • @perrohunter 只需按照此解决方案中提到的步骤操作即可。
    • 有人能解释一下为什么这个答案应该起作用以及我要在哪台机器上施放这些咒语吗?这就像超级没有帮助。
    【解决方案2】:

    我在远程集群上重新启动本地代码时遇到了另一个问题: 作业已提交,资源已正确分配,但我本地计算机上的驱动程序进程声称集群不接受

    WARN TaskSchedulerImpl:初始作业没有接受任何资源; 检查您的集群 UI 以确保工作人员已注册并拥有 资源充足

    我注意到在远程机器的日志中,它正在接受来自本地网络的带有驱动程序 URL 的作业

    ExecutorRunner:54 - 启动命令: "/opt/jdk1.8.0_131/bin/java" "-cp" “/opt/spark-2.3.3-bin-hadoop2.7/conf/:/opt/spark-2.3.3-bin-hadoop2.7/jars/*” “-Xmx16384M” “-Dspark.driver.port=59399” “org.apache.spark.executor.CoarseGrainedExecutorBackend” "--driver-url" "spark://CoarseGrainedScheduler@192.168.88.227:59399" “--executor-id” “0” “--hostname” “172.31.50.134” “--cores” “4” “--app-id” “app-20190318121936-0000” “--worker-url” "spark://Worker@172.31.50.134:45999"

    所以我的问题是驱动程序进程解析错误的主机名

    【讨论】:

    • @nEO 抱歉,差不多一年前了,我不记得我是如何解决这个问题的
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-05-08
    • 2017-12-23
    • 2018-02-11
    • 2017-02-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多