MapReduce序列化

1.什么是序列化:
序列化就是把内存中的对象,转换成字节序列(或其他数据传输协议)以便于存储到磁盘和网络传输
反序列化是将收到的字节序列或者是磁盘的持久化数据,转换成内存中的对象。
2.为什么要序列化:
序列化可以存储活的对象,可以将活的对象发送到远程计算机
3.数据块:Block是HDFS物理上把数据分成一块一块的。
数据切片():只是在逻辑上对输入进行切片,并不会在磁盘上将其切分成片进行存储。
Map并行度,MapTask
FileInputFormat切片机制:
切片数与MapTask数目一样
切片大小默认为128M
切片对每一个文件单独切片
不管文件多小,都会是一个单独的切片,就会交给一个MapTask
CombineTextInputFormat切片机制:
用于小文件过多,可以把多个小文件逻辑上鬼挂到一个切片中交给一个MapTask
在这里插入图片描述
默认情况下使用的是Text
InputFormat切片机制:
如果想用CombineTextInputFormat:则在Driver运行文件中第5步

job.setInputFormatClass(CombineTextInputFormat.class)
CombineTextInputFormat.setMaxINputSplitSize(job,20971520)//虚拟存储切片最大值设置为20M

FileInputFormat实现类:

1.TextInputFormat:键是存储该行在整个文件中的起始字节偏移量,LongWritable类型,值是这行的内容,不包括任何行终止符(换行符和回车符)Text类型
举个例子 shizhenqi shizhenqi
ss ss
v
<0,shizhenqi shizhenqi>说明有18个字节
<19,ss ss> 从第19个字节偏移量开始,到第21个字节
<22,v>从第22字节偏移量开始

  1. KeyValueTextInputFormat 每一行均为一条记录。默认分隔符为\t 如: line1 Rich Time
    line2 INtnet 每条记录就位<line1,Rich Time><line2,INtet>

3.NLineInputFormat: 不再按block划分,按核定的行数来划分。输入文件的总行数/N=切片数,如果不整除,切片数=商+1

自定义InputFormat步骤:
1.自定义一个类继承FileInputFormat
2.改写RecordReader,实现一次读取一个完整文件封装为KV(V里面是所有文件因为不可切割,K是文件路径加名称)
3.在输出时使用SequenceFileOutPutFormat输出合并文件

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值