hive分区表

时间:2018-04-04 16:22:24

标签: apache-spark hive partitioning

我使用Spark 2。

实际上我不是执行查询的人,所以我不能包含查询计划。我被数据科学团队问过这个问题。

我们将hive表分区为2000个分区并以镶木地板格式存储。当在spark中使用这个相应的表时,执行程序中正好执行了2000个任务。但是我们的块大小为256 MB,我们预计(总大小/ 256)分区数肯定会小于2000。是否有任何内部逻辑可以使用数据的物理结构来创建分区。任何参考/帮助将不胜感激。

更新:反过来说。实际上我们的表非常庞大,就像拥有2000个分区的3 TB一样。 3TB / 256MB实际上会达到11720但我们的分区数量与表物理分区完全相同。我只想了解如何在数据量上生成任务。

2 个答案:

答案 0 :(得分:1)

通常,Hive分区不会以1:1的方式映射到Spark分区。 1 Hive分区可以拆分为多个Spark分区,一个Spark分区可以容纳多个Hive分区。

加载配置单元表时Spark分区的数量取决于参数:

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

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

spark.table(yourtable).rdd.partitions

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

为什么你从2000个hive分区获得2000个Spark分区似乎是我的巧合,根据我的经验,这是不太可能发生的。请注意,spark 1.6中的情况不同,火花分区的数量与文件系统上的文件数量相似(1个文件的1个火花分区,除非文件非常大)

答案 1 :(得分:0)

  

我只想了解如何在数据量上生成任务。

任务是一个运行时工件,它们的编号正好是分区数。

任务数量与数据量无关。 Spark开发人员有责任拥有足够的分区来保存数据。