概述
mapReduce是hadoop中的分布式计算框架
TaskTracker就是NodeManager
JobTacker就是ResourceManager
.
.
序列化
要求数据能被序列化,默认采用avro,mapreduce对avro做了封装,有writable接口
.
.
分区
不设置默认一个分区,编号从0开始
分区数决定reduce的数量
.
.
排序
继承Comparable接口或者WritableComparable接口
.
.
combiner - 合并
job.setCombinerClass(XXXX.class)
combiner在不改变reduce的结果前提下减少其计算量
求和这些可以用combiner,求平均值不行
.
.
数据本地化策略
- split和block的大小保持一致
- TrackTask和datanode部署在同一节点上
将split的map任务直接在其节点上运行,减少网络带宽的占用
.
.
Job流程
.
.
数据倾斜
| map | 多源输入,文件大小不均,不可切 | 不可处理 |
|---|---|---|
| reduce | 大小表联立 ,二阶段聚合 |
二阶段聚合
先将数据随机分区,再按业务要求操作聚合
小文件
小文件会造成大量元数据,内存占用,降低查询效率
小文件会造成大量切片,产生大量线程,提高瞬间并发量
合并小文件,打包工具将多个小文件打包成一个jar包