Spark 应用程序在客户端模式下工作,但不在集群模式下工作

问题描述

我正在尝试向我的独立 spark-2.4.5-bin-hadoop2.7 集群提交一个简单的 Spark 应用程序。我使用 docker-compose、一个主服务和两个从服务以及一个运行 spark-submit 命令的实例来设置它。

主入口点正在运行以下代码

./sbin/start-master.sh

然后奴隶跑:

./sbin/start-slave.sh -m 2G spark://spark-master:7077

在 master ui 中我可以看到连接到 master 的 slaves,所以我猜我正确设置了集群:

I don't know why css is missing :(

我正在使用以下代码调试设置 (scala-2.11.12):

val spark = SparkSession
    .builder()
    .appName("test-00")
    .config("spark.hadoop.fs.s3a.path.style.access","true")
    .config("spark.hadoop.fs.s3a.endpoint","...")
    .config("spark.hadoop.fs.s3a.access.key","...")
    .config("spark.hadoop.fs.s3a.secret.key","...")
    .config("spark.hadoop.fs.s3a.impl","org.apache.hadoop.fs.s3a.S3AFileSystem")
    .getorCreate()

  val dataSeq = Seq(("Java",20000),("Python",100000),("Scala",3000))   
  val rdd = spark.sparkContext.parallelize(dataSeq)

  rdd.collect().foreach(println)

  spark.close()

当我进入启动器服务并在客户端模式下执行提交时,一切正常:

/spark/bin/spark-submit --master spark://spark-master:7077 --deploy-mode client --name test --class com.foo.bar.Main --conf spark.executor.instances=1 /spark/jars/test-app.jar

但是当我在集群模式下执行submit的时候,看到提交给master的应用却挂了:

/spark/bin/spark-submit --master spark://spark-master:7077 --deploy-mode cluster --name test --class com.foo.bar.Main --conf spark.executor.instances=1 /spark/jars/test-app.jar

我注意到的一个区别是,当我以集群模式提交时,用户应用程序从“节点”更改为“根”。我猜这是因为容器的用户(我为我的启动器服务使用节点容器),但我没有想出任何可能影响的原因。

我知道应用程序启动是因为主应用程序在初始化 spark 上下文之前向兔子代理发送了一条消息,但在它开始从数据库读取时挂起。

据我所知,一种可能是 master 无法为作业任务提供资源,但我不明白为什么它在客户端模式下有效。

有什么想法吗?

提前致谢。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...