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