mapreduce的概念
mapreduce 是分布式计算框架
所谓分布式就是很多机器完成一件事情~~
mapreduce 功能
将用户自己的编写的业务代码+ mr 自带默认组件 组成一个完成一个分布式程序
写一个分布式程序和写单节点程序一样,mr 帮助实现分布式计算
mapreduce的缺点
因为中间数据写磁盘,所以mr速度比较慢
所以不适合做实时
mapreduce的进程??
MrAppMaster:
负责整个程序在的过程调度及状态协调,包括准备资源,以及开启几个MapTask、ReduceTask 数量等等,job资源老大
MapTask:
负责整个map阶段的数据处理
ReduceTask:
负责reduce阶段的数据处理
一个mr 程序称之为一个job
常用数据序列化类型
java 类型+writable
hadoop 在java基础上重新序列化了
array—>ArrayWritable
int —>IntWritable
…
只有这一个特殊
string—>Text
mapreduce编程规范
用户编写的程序分成三个部分:Mapper、Reducer和Driver。
mapper 阶段
a.用户自定义类实现mapper
b.mapper输入数据的kv 类型的,类型可以自定义
c.重写map() 方法,方法内写业务逻辑
d.mapper 输出是kv 类型的,类型也可以自定义
f.map() 对每一个kv 只调用一次,就是 一行数据调用一次map() 方法
reducer阶段
a.用户自定义类实现reducer+
b.reducer输入数据的kv 类型的,mapper的输出近视reducer的输入
c. 重写reduce方法,写业务逻辑
d.reuceTask 进程对每一组
相同k的kv 调用一次reduce方法
driver 阶段
相当于yarn 客户端
用于提交到整个集群
mapreducewordcount案例注意事项??
mapper 端 map() 方法一次处理一行
reducer 端 reduce() 方法 ,每次处理相同k 的kv 数据
那个k先处理??
处理顺序按照k 的字典顺序
driver 端书写7个步骤
apReduce框中的Shuffle过程要求对key必须能排序
mapreduce自定义bean类实现序列化接口注意事项
具体实现bean对象序列化步骤如下7步。
(1)必须实现Writable接口
(2)反序列化时,需要反射调用空参构造函数,所以必须有空参构造
(3)重写序列化方法write()
(4)重写反序列化方法readFields()
(5)注意反序列化的顺序和序列化的顺序完全一致
(6)要想把结果显示在文件中,需要重写toString(),不然对象输出就是地址
(7)如果需要将自定义的bean放在key中传输,则还需要实现Comparable接口,因为MapReduce框中的Shuffle过程要求对key必须能排序所以key是要可排序的
MapReduce中FileInputFormat切片机制总结
TextFileInputFormat 是FileInputFormat 的默认实现
a. 简单按照文件长度进行逻辑切分
b. 默认按照blocksize 切分
c. 切分时候不考虑文件总大小,逐个文件进行单独切分
d.切片时候首先确认剩余大小/blocksize > 1.1 才能进行切分
切片设置
源码中计算切片大小的方法如下
protected long computeSplitSize(long blockSize, long minSize,
long maxSize) {
return Math.max(minSize, Math.min(maxSize, blockSize));
}
minSize 默认为 1
maxSize 默认为 long .MaxValue
不修改block 的大小时候 所以修改切片大小需要改变maxSize minSize
这俩个参数代码,资源文件, 配置文件中修改
inputSplit.getPath().getName()
blockSize: 集群是128M local 是32 M
combineInputFormat 切片机制 **
架默认的TextInputFormat切片机制是对任务按文件规划切片,不管文件多小,都会是一个单独的切片,都会交给一个MapTask,这样如果有大量小文件,就会产生大量的MapTask,处理效率极其低下。
a.应用场景:
CombineTextInputFormat用于小文件过多的场景,它可以将多个小文件从逻辑上规划到一个切片**中,这样,多个小文件就可以交给一个MapTask处理。
b. 虚拟存储切片最大值设置
CombineTextInputFormat.setMaxInputSplitSize(job, 4194304);// 4m
成产中一般设置为128M
注意:虚拟存储切片最大值设置最好根据实际的小文件大小情况来设置具体的值
c.切片机制
生成切片过程包括:虚拟存储过程和切片过程二部分。
mr 提价job 的时候究竟提交了哪些信息
切片信息job.split
job.xml–运行时候所需要的配置信息
jar 包
mapreduce 工作流程