首页 > 代码库 > hadoop-mapreduce总结1

hadoop-mapreduce总结1

准备知识:            

    1.在InputFormat<k,v>这个接口中,有两个方法,InputSplit[] getSplits();

                                            RecordReader<k,v> getRecordReader();

    2.mapreduce作业提交与初始化过程。

        作业提交:

                (1)命令行提交。。。。

                (2)获取作业ID,

                     创建HDFS目录(你指定的存放结果的目录)

                     上传文件到HDFS(应用程序Jar包,xml文件等)

                     生成split文件(就是调用你指定的InputFormat中的getSplits)

                 (3) 向JobTracker提交作业。

        作业初始化:

                调度器调用JobTracker.initJob()来构造Map Task 和Reduce Task并对他们进行

                初始化。

    3.Task运行过程分析

                Map Task整体流程:

                Read:   通过RecodReader(你指定的InputFormat中的getRecordreader()),从输入

                        的InputSplit中解析出一个个key/value

                Map:   将上一步的key/value交给map()处理,形成新的key/value。

                Collect:在map()中,调用Partition.getPartition(),形成三元组                                     <key,value,partition>,写入内存环形缓冲区中。

                Spill:  (1)当内存缓冲区满了之后,对其中的数据排序(先按照partition,然                                后再按照key)

                         (2)如果有Combiner,对数据做一次聚集

                         (3)写入临时文件

                Combine:将临时文件合并(以分区为单位,并且排序)

                Ruduce Task整体流程:

                shuffle:  从各个Map Task上拷贝一片数据(按照partition)

                merge:   合并文件

                sort:     排序,reduce()函数的输入数据时按照key进行聚集的一组数据,

                Reduce:   

        


                一个Map(这里指的是哪个类)处理的是一个分片,map()函数,处理的是一对

                key/value。

                

    



本文出自 “厚积薄发” 博客,请务必保留此出处http://duanzhenyue.blog.51cto.com/9360091/1553372

hadoop-mapreduce总结1