栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

Hadoop(MapReduce常考面试题)

Hadoop(MapReduce常考面试题)

一、MapReduce工作原理

1.MapTask阶段

1)准备一个200M的文件,submit中对该数据进行切片。

2)客户端向Yarn提交信息(job.split,wc.jar,job.xml),Yarn开启一个MrAppmaster,MrAppmaster读取客户端对应的信息,主要是job.split,然后根据切片个数,开启对应数量的MapTask。

3)MapTask通过InputFormat(默认TextInputFormat)去读取数据(默认按行读取),k是偏移量,v是一行内容,数据读取后交给Mapper,然后根据用户的业务需求来对数据进行处理。

4)数据处理后输送到环形缓冲区(默认100M),环形缓冲区一边是存数据,一边存的是索引(描述数据的元数据),环形缓冲区存储数据达到80%后进行反向溢写,并对数据进行分区,排序。

5)再对分区且区内有序的文件进行归并排序,然后存储到磁盘。

MapTask阶段共分为5个阶段

    Read阶段

    MapTask通过用户编写的RecordReader,从输入的Inputsplit中解析出一个个key/value。
    

    Map阶段

    将解析出来的key/value交给用户编写map()函数进行处理,并产生一系列新的key/value。
    

    Collect阶段

    在用户编写map函数中,当数据处理完成后,一般会调用OutputCollector.collect()输出结果,在这个函数内部,它会将生成的key/value分区(调用Partitioner),写入到环形缓冲区中。
    

    溢写阶段

     当环形缓冲区满后,MapReduce会将数据写入到本地磁盘上,生成一个临时文件,需要注意的是,将数据写入到本地磁盘前,先要对数据进行一次本地排序,并在必要时对数据进行合并,压缩等操作。
    

    Merge阶段

    当所有数据处理完后,MapTask对所有临时文件进行一次合并,以确保最终只会生成一个数据文件。
    

2.ReduceTask阶段

1)当所有MapTask任务完成后,启动相应数量的ReduceTask,并告知ReduceTask处理数据范围(数据分区),注意:不是必须等到所有MapTask结束后才开始,可以自行配置。

2)ReduceTask开启后,ReduceTask主动从MapTask对应的分区拉取数据。

3)再对ReduceTask拉取的数据进行一个全局合并排序。

4)顺序读取数据,按Key分,key相同的数据进入同一个Reducer,一次读取一组数据。

5)Reducer处理完数据,通过OutputFormat往外写数据,形成对应的文件。

ReduceTask阶段共分为三个阶段

    Copy阶段

    ReduceTask 从各个 MapTask 上远程拷贝一片数据,并针对某一片数据,如果其大小超过一定阈值,则写到磁盘上,否则直接放到内存中。
    

    Sort阶段

    在远程拷贝数据的同时,ReduceTask 启动了两个后台线程对内存和磁盘上的文件进行合并,以防止内存使用过多或磁盘上文件过多。按照 MapReduce 语义,用户编写 reduce()函数输入数据是按 key 进行聚集的一组数据。为了将 key 相同的数据聚在一起,Hadoop 采用了基于排序的策略。由于各个 MapTask 已经实现对自己的处理结果进行了局部排序,因此,ReduceTask 只需对所有数据进行一次归并排序即可。
    

    Reduce阶段

    reduce()函数将计算结果写到 HDFS 上。
    
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/762140.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号