Spark缓存-数据分发和复制

时间:2019-04-09 19:31:11

标签: apache-spark

spark如何确定复制一个缓存分区多少次? spark UI的“存储”选项卡中的存储级别显示为“磁盘序列化1x已复制”,但看起来分区已复制到多个执行器上。我们注意到使用spark 2.3的DISK_ONLY和OFF_HEAP存储级别都发生了这种情况。我们正在缓存具有101个分区的数据集(磁盘上的大小为468.4 GB)。数据最初分布在101个执行者上(我们共有600个执行者)。当我们在此数据集上运行查询时,磁盘上的大小会增加,执行程序数据的分布也会随之增加。

当我在缓存的数据集上运行spark查询时,然后我可以看到spark作业正在创建101任务并将其分配给101执行者。 很少有执行者是PROCESS_LOCAL,其他很少是NODE_LOCAL或RACK_LOCAL。 对于NODE_LOCAL和RACK_LOCAL,任务执行需要更长的时间,因为它涉及数据复制。

我注意到,在每次查询执行中,如果任务是在NODE_LOCAL或RACK_LOCAL上分配的,则 缓存的大小正在增加。在一个阶段,我已经看到它超过了2.5TB

我想了解为什么查询执行时缓存大小会增加? 如果这是默认的Spark行为,因为它是将数据从DISK复制到NODE_LOCAL或RACK_LOCAL执行程序的方式,那么如何管理缓存大小?

我还注意到,通常在同一节点上的多个执行器上复制一个块/分区-如果存储在磁盘上,为什么在同一节点的执行器之间不共享该块/分区?

0 个答案:

没有答案