MapReduce
2019-11-11 14:03:22 0 举报
AI智能生成
大数据之MapReduce总结
作者其他创作
大纲/内容
MR编程模型
Map
map()
输入、输出都是键值对
输入数据从所读的split来
Map的输出作为Reduce的输入
Reduce
reduce()
输入、输出都是键值对;reduce输入的键值对与map的输出的键值对类型相同
MR编程
写三个主要逻辑:自定义的Mapper类、自定义的Reducer类、main方法
运行分两种
要将hadoop集群的配置文件拷贝到resources中
IDEA中本地运行
maven打成jar包,使用hadoop jar集群运行
shuffle
map
溢出写磁盘文件
先写入环形缓冲区;
再溢出写磁盘;
溢出过程中分区
每个区内排序;
combine(可选);
压缩(可选)
合并溢出文件
map任务完成
reduce
merge|sort|分组
每组数据,调用一次reduce方法
中间结果在内存或本地磁盘
最终输出HDFS
自定义分区
自定义分区类继承Partitioner类
实现getPartition()方法
Combiner
map端本地聚合
本质也是reduce
并非所有MR都适合用combiner,使用combine与否,不影响最终结果
压缩
在main方法中,使用Configuration配置压缩选项
自定义InputFormat
自定义InputFormat类,实现getRecordReader()方法
实现RecordReader类
- initialize()
- nextKeyValue()
- getCurrentKey()
- getCurrentValue()
- getProgress()
- close()
自定义OutputFormat
自定义outputformat
覆写getRecordWriter()方法
自定义RecordWriter
覆写具体输出数据的方法write()、close()
二次排序
自定义作为key的类
实现WritableComparable接口
实现compareTo方法
自定义分组
自定义JavaBean
自定义分区类
自定义Mapper|Reducer类
自定义分组类
main
- job.setMapperClass
- job.setPartitionerClass
- job.setReducerClass
- job.setGroupingComparatorClass
分区倾斜
TotalOrderPartitioner
InputSampler
0 条评论
下一页