• 计算切片数量和大小(注意视频中的是hadoop 2.7.3,每个版本的方法都有变动,以实际为准)

job的文件split计算法则

List<InputSplit> splits = input.getSplits(job);

job的文件split计算法则

  • 切片数量选择过程

job的文件split计算法则 

最小值(肯定>=1):long minSize = Math.max(getFormatMinSplitSize(), getMinSplitSize(job));

返回的是1

最大值(肯定<= Long.Max ,另外也要根据参数mapreduce.input.fileinputformat.split.maxsize=):

long maxSize = getMaxSplitSize(job);

根据参数

getMinSplitSize(job):这个值的参数是mapreduce.input.fileinputformat.split.minsize,然后在下面的配置文件中找到,是0。

C:\Users\yawei.chen\Desktop\Puck\Hadoop\安装包\hadoop-2.7.6\share\doc\hadoop-project\hadoop-mapreduce-client\hadoop-mapreduce-client-core\mapred-default.xmljob的文件split计算法则

 

  • 能否切片条件判断

job的文件split计算法则

 *压缩文件不能切片。 下面的函数用于判断文件是否为压缩,如果不是则返回true,可以切。

job的文件split计算法则

  • 根据block大小,去判断切片大小job的文件split计算法则

 

计算法则

块大小

long blockSize = file.getBlockSize();

 

切片大小

long splitSize = this.computeSplitSize(goalSize, minSize, blockSize);

相当于在minSplit maxSplit blockSize中间取一个中间值

 computeSplitSize方法

job的文件split计算法则

通常情况下,minSplit =1,maxSplit =long.max, blockSize =128M,这时候切片大小是128M。因为HDFS默认的块大小是128M,每个切片都是128M时,正好在一个节点上,此时根据本地优先特例,不需要到其它节点进行网络传输,效率比较高。

假设有的人将maxSplit 设置为1M时,此时切片大小是1M。如果一个128M的文件,需要128个切片去运行。此时Map阶段,如果这些数据同时运算,需要128个节点同时分发128片数据;

如果没有这么多节点,那么单个节点上,会有多个map运行,此时需要依赖其它节点,并行运算。这个时候,就会网络覆盖非常大,对网络带宽的要求非常高,效率不高。

 

相关文章:

  • 2021-09-10
  • 2022-12-23
  • 2021-07-04
  • 2021-12-09
  • 2022-01-23
  • 2022-12-23
  • 2021-04-03
  • 2022-02-25
猜你喜欢
  • 2021-10-06
  • 2021-06-18
  • 2022-03-08
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-09-16
相关资源
相似解决方案