MapReduce整体介绍

  • 时间:
  • 来源:互联网
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/zhanggqianglovec/article/details/103291195

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

本文链接http://element-ui.cn/news/show-329.aspx