MapReduce原理及编程
MapReduce介绍
1.MapReduce是一个分布式计算框架
- 它将大型数据操作作业分解为可以跨服务器集群并行执行的单个任务。
- 起源于Google
2.适用于大规模数据处理场景
- 每个节点处理存储在该节点的数据
3.每个job包含Map和Reduce两部分
MapReduce的设计思想
1.分而治之
- 简化并行计算的编程模型
2.构建抽象模型:Map和Reduce
- 开发人员专注于实现Mapper和Reducer函数
3.隐藏系统层细节
- 开发人员专注于业务逻辑实现
MapReduce特点
优点
- 易于编程
- 可扩展性
- 高容错性
- 高吞吐量
不适用领域
- 难以实时计算
- 不适合流式计算
MapReduce实现WordCount
编程链接:
MapReduce执行过程
数据定义格式
- map: (K1,V1) → list (K2,V2)
- reduce: (K2,list(V2)) → list (K3,V3)
MapReduce执行过程
- Mapper
- Combiner
- Partitioner
- Shuffle and Sort
- Reducer
Map一定要有,combiner可有可无,paritioner一定要有,reducer在某种情况下可以没有;
mapper数目无法操作有inputsplit决定的(可以改块大小达到mapper数目),但是Reducer可以操作
Hadoop V1 MR引擎
Job Tracker
- 运行在Namenode
- 接受客户端Job请求
- 提交给Task Tracker
Task Tracker
- 从Job Tracker接受任务请求
- 执行map、reduce等操作
- 返回心跳给Job Tracker
Hadoop V2 YARN
重要图:
yarn的时候回香江
MapeReduce的局限性
yarn的变化
yarn环境下的资源管理器
jt resource 任务放在ResourceManager
job
Hadoop及YARN架构
Hadoop2 MR在Yarn上运行流程
InputSplit(输入分片)
在map之前,根据输入文件创建inputSplit
- 每个InputSplit对应一个Mapper任务
- 输入分片存储的是分片长度和记录数据位置的数组
- 记录边界划分的(*)
block和split的区别
- block是数据的物理表示
- split是块中数据的逻辑表示
- split划分是在记录的边界处
- split的数量应不大于block的数量(一般相等)
Shuffle阶段
Key&Value类型
必须可序列化(serializable)
- 作用:网络传输以及持久化存储
- IntWritable、LongWriteable、FloatWritable、Text、DoubleWritable, BooleanWritable、NullWritable等
都继承了Writable接口
- 并实现write()和readFields()方法
Keys必须实现WritableComparable接口
- Reduce阶段需要sort
- keys需要可比较
MapReduce编程模型
有2方法:getinputsplit:又来计算有多少个inputsplit,他就知道启动几个mapper
createReconReader<k,v>: