Spark partition详解

一:spark读取hdfs分片机制

spark  sc.textFile底层调用的是hadoop的代码,所以分片机制也是hadoop的机制

goalSize=totalSize是文件的总字节数/numSplits是有多少个分区,没有配置的话默认 minPartitions=2。就是算每个分区有多少数据

long goalSize = totalSize / (numSplits == 0 ? 1 : numSplits);

long minSize = Math.max(job.getLong(org.apache.hadoop.mapreduce.lib.input.
  FileInputFormat.SPLIT_MINSIZE, 1), minSplitSize);

SPLIT_MINSIZE="mapreduce.input.fileinputformat.split.minsize"
private long minSplitSize = 1;
long blockSize = file.getBlockSize();
long splitSize = computeSplitSize(goalSize, minSize, blockSize);
protected long computeSplitSize(long goalSize, long minSize,
                                     long blockSize) {
  return Math.max(minSize, Math.min(goalSize, blockSize));
}

computeSplitSize方法中当每个分区的数据比blockSize(128M)大时,返回blockSize,当goalSize小,返回goalSize。

 while (((double) bytesRemaining)/splitSize > SPLIT_SLOP) {
            String[][] splitHosts = getSplitHostsAndCachedHosts(blkLocations,
                length-bytesRemaining, splitSize, clusterMap);
            splits.add(makeSplit(path, length-bytesRemaining, splitSize,
                splitHosts[0], splitHosts[1]));
            bytesRemaining -= splitSize;
          }

其中

long bytesRemaining =file.getLen();
private static final double SPLIT_SLOP = 1.1;   // 10% slop

splits=文件长度/splitSize(blockSize或者goalSize) >1.1 来循环的增加分区

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值