问题描述
我正在尝试向我的独立 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,所以我猜我正确设置了集群:
我正在使用以下代码调试设置 (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 (将#修改为@)