表在 YARN 中广播,但不在 K8s 中

问题描述 投票:0回答:1

我在 Spark on YARN 和 Spark on K8s 中运行相同的查询。 K8s 和 YARN 都引用相同的 hive 元存储和 hdfs 路径。当我在 YRAN 中运行作业时,某些表正在被广播(在连接中),而在 K8s 中却没有发生同样的情况。在这两种环境中,广播阈值是相同的。表也一样。但是在 YARN 与 K8s 上运行时计划存在差异。并且两地广播均已启用。

为什么会有这种行为差异?

apache-spark apache-spark-sql
1个回答
0
投票

发现问题:

我尝试的第一件事是在连接中显式传递广播提示,它确实有效。现在可以肯定的是,广播不会以某种方式自动发生。我在桌子上运行

DESCRIBE FORMATTED <TBL_NAME>
,发现
numRows
rawDataSize
都是
-1
。所以问题是 hive 元存储中的表统计信息未更新。但问题是,它在 YARN 中是如何工作的。在运行时获取 YARN 和 K8s 中使用的 Spark 配置后,我们发现了差异。因此,在 YARN 中,此属性
spark.sql.statistics.fallBackToHdfs
设置为
true
,而在 K8s 中则未设置 (
default is false
)。因此,YARN 从 hdfs 获取统计数据,因此它能够广播,而在 K8s 上却没有发生。一旦在 K8s 中将其设置为 true,广播就会发生。

© www.soinside.com 2019 - 2024. All rights reserved.