我知道map任务的数量与输入格式给定的输入拆分的数量相同。在分区或带块的配置单元表上执行操作时,inputformat类如何计算输入拆分,因为数据是以文件的形式存在于分区或带块数据的目录中?在输入分割(Map任务的数量)和分区或存储桶的数量之间有什么关系吗?
zz2j4svz1#
简单的回答是“sortof”。。hive将分割委托给hadoop,hadoop只关心分区中有多少数据,而不关心分区和存储桶。数据量间接地取决于分区的数量,因此为了更正确地回答您的问题,它并不直接取决于分区的数量。在执行查询时,要使splits配置单元在默认情况下使用combinehiveinputformat,它实际上只是hadoop的一个 Package 器 CombineFileInputFormat . 所以实际上hive将委托hadoop如何进行分割。hadoop的 CombineFileInputFormat 将较小的文件分组在一起,以便根据配置的最小拆分大小进行拆分。请注意,它属于hadoop,而不是hive,因此不了解bucket,但它只会根据文件的大小和位置(机架等)对文件进行分组,因为最好是将所有文件都放在同一节点上或至少放在同一机架上。您可以在getsplits函数中查看如何创建拆分。
CombineFileInputFormat
1条答案
按热度按时间zz2j4svz1#
简单的回答是“sortof”。。hive将分割委托给hadoop,hadoop只关心分区中有多少数据,而不关心分区和存储桶。数据量间接地取决于分区的数量,因此为了更正确地回答您的问题,它并不直接取决于分区的数量。
在执行查询时,要使splits配置单元在默认情况下使用combinehiveinputformat,它实际上只是hadoop的一个 Package 器
CombineFileInputFormat
. 所以实际上hive将委托hadoop如何进行分割。hadoop的
CombineFileInputFormat
将较小的文件分组在一起,以便根据配置的最小拆分大小进行拆分。请注意,它属于hadoop,而不是hive,因此不了解bucket,但它只会根据文件的大小和位置(机架等)对文件进行分组,因为最好是将所有文件都放在同一节点上或至少放在同一机架上。您可以在getsplits函数中查看如何创建拆分。