在蜂巢隔板上的火花行为



我使用Spark 2。

实际上,我不是执行查询的人,因此我不能包括查询计划。数据科学团队已问我这个问题。

我们将蜂巢表分区分为2000个分区,并以镶木格式存储。当Spark中使用这些表格时,执行者中恰好有2000个任务是执行的。但是我们的块大小为256 MB,我们期望(总尺寸/256(分区数量肯定会比2000年要小得多。是否有任何内部逻辑使用数据的物理结构来创建分区。任何参考/帮助都将不胜感激。

更新:相反。实际上,我们的桌子非常巨大,就像3个TB具有2000个分区一样。3TB/256MB实际上将达到11720,但我们的分区数与表格分区的分区数量完全相同。我只想了解如何在数据卷上生成任务。

在一般蜂巢中,未映射1:1来激发分区。1个蜂巢隔板可以分为多个火花分区,一个火花隔板可以容纳多个蜂巢区。

加载Hive-Table时的火花分区数取决于参数:

spark.files.maxPartitionBytes (default 128MB)
spark.files.openCostInBytes (default 4MB)

您可以检查分区,例如使用

spark.table(yourtable).rdd.partitions

这将为您提供一个FilePartitions的数组,其中包含文件的物理路径。

为什么您从2000架蜂巢隔板中获得2000个火花隔板似乎对我来说是一个巧合,根据我的经验,这不太可能发生。请注意,Spark 1.6中的情况有所不同,Spark分区的数量类似于文件系统上的文件数(1个文件的1个火花分区,除非文件很大(

我只想了解数据卷上的任务是如何生成的。

任务是一个运行时伪像,它们的数字正是分区的数量。

任务的数量与数据量没有任何方式相关。有足够的分区持有数据是Spark Developer的责任。