java/scala

pexxcrt2  于 2021-06-02  发布在  Hadoop
关注(0)|答案(2)|浏览(293)

我创建了一个3节点(1个主节点,2个工作节点) Apache Spark aws中的群集。我可以从主服务器向集群提交作业,但是我不能远程工作。

/* 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配置看起来像一个文件。我甚至可以telnet到那个公共dns和端口,我也配置了 /etc/hosts 每个 EC2 示例。我想能够提交作业到这个远程主机,我错过了什么?

ndasle7k

ndasle7k1#

要绑定master host name/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-启动脚本

vcirk6k6

vcirk6k62#

在远程集群上重新加载启动本地代码时遇到了另一个问题:作业正在提交,资源分配正确,但本地计算机上的驱动程序进程声明集群不被接受
warn taskschedulerimpl:初始作业未接受任何资源;检查集群ui以确保worker已注册并且具有足够的资源
在远程机器的日志中,我注意到它正在接受来自本地网络的带有驱动程序url的作业
执行torrunner:54 - 启动命令:“/opt/jdk1.8.0_/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.grossgrainedeexecutbackend”“--驱动程序url”spark://coarsegrainedscheduler@192.168.88.227:59399“--执行器id”“0”“--主机名”“172.31.50.134”“--核心”“4”“--应用程序id”“app-2019031812936-0000”“--工作程序url”spark://worker@172.31.50.134:45999"
所以我的问题是驱动程序进程的主机名解析错误

相关问题