【Hadoop---12】MapReduce:InputFormat『TextInputFormat | CombineFileInputFormat』

1. InputFormat阶段流程

InputFormat阶段是MapReduce的一个阶段。

其详细流程见:MapReduce详细流程

2. InputFormat与其子类关系图

在这里插入图片描述

接下来主要介绍以下两个类的切片机制和读取机制:TextInputFormat类 和 CombineFileInputFormat

3. TextInputFormat(默认)

假如集群中有n台主机,有一个 jobmap 阶段需要 kMapTask进行处理,那么会调用 k 台主机进行处理。

所以,MapTask 的并行度决定 Map 阶段的任务处理并发度,进而影响到整个 Job 的处理速度

那么问题来了?怎么判断一个job应该分成几个MapTask???

先理解两个概念:

  1. 数据块:Block 是 HDFS 物理上把数据分成一块一块,它是 HDFS 存储数据的单元。
  2. 数据切片:数据切片只是在逻辑上对输入进行分片,并不会在磁盘上将其切分成片进行存储。一个切片会对应启动一个 MapTask

3.1 切片机制

  1. 默认逐个对job提交的每个数据文件按照splitSize大小切片默认splitSize的值就是块大小,其计算公式为:
    在这里插入图片描述
    比如:
    在这里插入图片描述

    注意:如果文件小于块大小,那么会表现为按文件切片。

  2. 每次切片时,都要判断切完剩下的部分是否大于块的1.1倍,不大于1.1倍就划分一块切片。【主要用于判断最后剩余的部分切还是不切】

3.2 读取机制

对于每个MapTask一行一行的读取。

  1. key:离文件开始处的偏移量。
  2. value:为该行的内容。

3.3 如何设置?

默认使用TextInputFormat切片机制,故不需要设置。

  1. job如何输入多个文件:
    在这里插入图片描述
  2. 如何查看切了几片:
    在这里插入图片描述

4. CombineFileInputFormat

CombineFileInputFormat用于小文件多的场景。

4.1 切片机制

  1. 先将文件按字典顺序由小到大排序
  2. 对每个文件按maxInputSplitSize(默认等于4)进行分割成更多更小的文件
  3. 然后将小文件结合起来做为一个片
    在这里插入图片描述

4.2 读取机制

和TextInputFormat一样。

4.3 如何设置?

如何使用CombineTextInputFormat进行切片?如何设置maxInputSplitSize大小?
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ElegantCodingWH

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值