当前位置: 代码迷 >> 综合 >> MapReduce整体介绍
  详细解决方案

MapReduce整体介绍

热度:40   发布时间:2023-09-05 18:32:11.0

MapReduce框架(Map/Reduce) MapTask/ReduceTask 数据分发机制
MapTask接口实现类 : 对一行数据进行处理,map方法
ReduceTask接口实现类:对一组数据进行处理,reduce方法
MapReduce工作机制
划分输入切片: 数据切片
job.split文件
分布式数据处理
K相同的KV数据分配给同个ReduceTask
组合拳:CompareTo + Partation + Group
分区控制/分组控制
MapReduce编程模型
map task的实现
读数据:TextInputFormat
SequenceFileInputFormat
DBInputFormat    

portation 分区
调用Partitaioner 的getPartition 决定数据分区

reduce task的实现
读数据:下载"区"数据,并且合并多个"同区"并且排序
写数据:TextInputFormat
SequenceFileOutputFormat
DBOutputFormat

GroupingComparator:分组
确定那些数据属于同一组

对倾斜数据的处理
1. 通过Combiner组件进行maptask端局部聚合数据减轻倾斜影响
2. 通过打算倾斜数据来消除倾斜的影响,通过在Key值后面添加随机值,这样就可以均衡的分布在ReduceTaks端。


MapReduce编程模型具体实现及处理流程:
MRAppMaster
YarnChild(maptask/reducetask)
main()
1. MapTask:
->TextInputFormat
->LineRecordFromat
->Mapper
->map()
->context   --->  MapOutputCollector 环形缓存,存在大小限制
->spilter (80%) 分区(partation),排序(compare)
->write 溢出文件(可能包含多个文件,有序文件) 写本地磁盘
->merge 分区有序,分区索引文件
多个maptask会生成多个merge文件
2. Shuffle: Store && Rest
map task 生成的数据传输给reduce task 的过程                    多个maptask会生成多个merge文件,这些文件会保存在NodeManager中,NodeManager具有Web服务,ReduceTask会通过Web服务下载merge文件,进行处理        
3. ReduceTask
-> http下载:从多个DataManager中下载merge文件下载单个分区的KV数据,多个文件合并为一个文件
-> Reducer
->reduce
->context    
->KV  ---->   TextInputFormat(可重写)
->getRecordWrite
->recordWrite
->write
->Local/HDFS 文件
多个ReduceMask 会生成多个 Local/HDFS 文件

数据输入输出类型:
TextInputFormat
TextOutputFormat
SequenceFile

Job.setInputFormat
Job.setOutputFormat
Job.setPartation
Job.setGroupComparator
Job.setMapperClass
Job.setReduceClass
Job.setReduceTaskNum
Job.setCombinerClass


YARN框架:
ResourceManager 不一定对应NameNode
ApplicationMaster 可能在任何DataNode上
DataManager    对应DataNode
容器
MapTask/ReduceTask

YARN WEB端口:8088
配置文件:yarn-site.xml,mapred-site.xml        
CPU/MEMERY配置:1Core/2G

Mapper 
map(key,value,context)

Reducer()
reduce(key,interator,content)
cleanUp(content)

Partation(分区) :配合Reducer进行分组处理
WritablePartation
hashCode(key,value,content)

Comparator(分组)
WritableComparator
compare

Content
configuration
spiit
FileSplit/DBSplit
filename/dbname
offset/linenum


### 执行(三种方式):
1. (任务下发)windows下调用yarn启动job:需要在客户端配置configuration
2. (生产) linux下调用yarn启动job:需要在启动jar包的主机配置 相关xml参数
3. (调试) windows下执行local job:需要包含hadoop运行环境,即下载windos执行包,并且配置HADOOP_HOME路径并且添加到PATH

  相关解决方案