MapReduce 数据切片与 MapTask 并行度
MapReduce 核心组件
- MapTask :执行 Map 端计算任务
- ReduceTask : 执行 Reduce 端计算任务
- MRAppMaster : 负责监控、管理所有 Task 计算任务
数据切片原理
-
计算切片块大小
computeSplitSize(Math.max(minSize,Math.min(maxSize,blocksize));
- 默认切片块大小 blocksize =128M(本地模式32 M) minSize = 1 maxSize=0x7fffffffffffffff
- 切片块 SplitSize 的大小默认等于 blockSize
- 想要下调切片块 SplitSize 大小,把 maxSize 调小即可;想要上调 SplitSize 切片大小,把 minSize 调大即可
-
计算切片数量
((double) bytesRemaining)/splitSize > 1.1
- 每次切片时都要判断切完剩余部分是否大于默认切片的1.1倍。不大于则与前一个切片合成一个切片,也就是在这种情况下,切片的大小可以稍大于默认切片大小;大于则需要再创建一个新切片
MapTask 并行度
MapTask 并行度指的是 MapReduce 程序需要运行多少个 MapTask 任务
MapTask 的并行度由文件的切片数量决定
- 文件切片大小(BlockSize)在 本地(Local) 模式默认为 32M,在集群(Cluster)模式默认为 128 M
- 客户端提交 Job 时,一个文件切片对应一个 MapTask 任务
- 文件切片时不考虑数据集整体性,而是逐个针对每个文件单独切片(即不可把多个文件大小加到一起来计算切片数量)