Presto Hive数据源Split的生成

本文解析了Presto中如何根据Hive.max-split-size生成split,重点讲解了BackgroundHiveSplitLoader和HiveSplitSource中split策略。详细介绍了文件切割规则和非切割情况下split的处理方式。
摘要由CSDN通过智能技术生成

presto中生成split的基本原理是:

     1. presto先扫描所有所有需要访问的hdfs的数据文件,如果hdfs文件比hive.max-split-size(默认64M) 大,则一个文件生成一个split.

其代码实现在于BackgroundHiveSplitLoader::loadSplits中,loadSplits会扫描分区的所有文件,每个文件创建一个InternalHiveSplit,提交到HiveSplitSource中异步生成真正的HiveSplit。

     2. 在HiveSplitSource中,如果文件不可切割的话,则无论文件大大小多大都只生成一个split,如果可以切割而且文件大于hive.max-split-size,则对文件进行切割成多个split,每个split最大处理hive.max-split-size大小的数据,其实现代码在于:

public CompletableFuture<ConnectorSplitBatch> getNextBatch(ConnectorPartitionHandle partitionHandle, int maxSize)
{
     ....

     if (internalSplit.isSplittable()) {
           splitBytes = min(maxSplitBytes, block.getEnd() - internalSplit.getStart());
     }
     else {
           splitBytes = internalSplit.getEnd() - internalSplit.getStart();
     }
     resultBuilder.add(new HiveSplit())
     internalSplit.increaseStart(splitBytes);
     ....
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值