【发布时间】:2019-11-19 18:50:10
【问题描述】:
我正在运行具有以下集群和应用程序配置的 Spark 作业:
总节点:3
Master Node Memory 7.5GB, 2 Cores
Worker Node1, Memory 15GB, 4 Cores
Worker Node2, Memory 15GB, 4 Cores
应用配置:
--master yarn --num-executors 2 --executor-cores 2 --executor-memory 2G
我正在尝试使用同一个用户同时提交多个作业,但是我看到只有前两个提交的作业正在执行,第三个必须等待后续的交战。
19/11/19 08:30:49 WARN org.apache.spark.util.Utils: Service 'SparkUI' could not bind on port 4040. Attempting port 4041.
19/11/19 08:30:49 WARN org.apache.spark.util.Utils: Service 'SparkUI' could not bind on port 4041. Attempting port 4042.
我发现 SparkUI 正在为每个提交的作业创建,而我的集群一次只接受两个作业。此外,我观察到,一旦第一个提交的作业完成执行,它就会在端口 4042 上获取第三个作业。我的集群一次只接受两个作业可能有什么问题?
这是我的 Spark 会话代码:
val spark: SparkSession = {
val sparkSession = SparkSession
.builder()
.appName("Data Analytics")
.config("spark.scheduler.mode", "FAIR")
//.master("local[*]")
.getOrCreate()
sparkSession
}
我的进一步问题是: 为什么 SparkSession 为每个作业创建 SparkUI 以及我们如何解决这个问题。 有什么方法可以将同一个 Session 用于多个作业。
【问题讨论】:
-
可能是资源不够 3 个作业。尝试将
executor-cores减为 1,看看是否有效。 -
你是在部署模式下运行它 --> 客户端模式吗?
-
@syadav - 是的,我在客户端模式下运行它
标签: scala apache-spark apache-spark-sql apache-spark-2.3