Map-Reduce浅析

Map-Reduce简介

map-reduce是hadoop中第二个核心,用于对hdfs中的文件作映射-归集处理。map阶段能够将文件中的数据以行的方式读取出来处理成想要的基本数据类型或者自定义数据类型,生成key-value到文件中,reduce阶段拿到已作过度组的key-value(多值),而后能够对value循环作分组操做。灵活的使用key能够完成很是强大的功能。sql

适合处理离线大批量数据的场景,不过编写代码有点麻烦,后面有了hive提供的sql接口,使用hql能够像写sql同样操做数据,不用再写繁琐的mr代码。可是hive并非万能的,面对杂乱无章的数据文件,仍是须要编写特定的mr程序作数据清洗,入到hdfs后方便hive操做网络

MR工做流程

工做流程说明:app

1.在HDFS中准备好要处理的文件,大小200Moop

​ 2.与NameNode交互拿到文件信息,造成一个任务分配的规划性能

​ 3.提交运行所需资源到HDFS中spa

​ 4.与ResourceManager交互,申请mr-AppMaster,由mr-AppMaster向ResouceManage申请执行MapTask和ReduceTask,有多少个切片就有多少个MapTask,ReduceTask依赖与分区数设计

​ 5.MapTask经过InputFormat->RecordReader(图中的RecorderReader是错误的)读取文件到内存。默认是TextInputFormat,也能够自定义InputFormat和RecordReaderorm

​ 6.由本身编写的Mapper对内存中的文件一行行的进行处理,好比将一行的数据转换为自定义的对象,而后作出value输出给ReduceTask。若是没有配置ReduceTask阶段,那么就会经过OutputCollector输出文件到hdfs中对象

​ 7.有ReduceTask,Mapper会将数据送到环形缓冲区,由缓冲区决定何时批量将数据写入到磁盘中。默认缓冲区使用到80%,缓冲区的数据通过分区和排序就会溢出写到磁盘文件中。设计一个缓冲区在这里能够极大的提升性能排序

​ a.写内存比写磁盘快太多

​ b.数据批量从内存写到磁盘,能够提升数据在磁盘中存放的集中程度,不管是写仍是之后的读都会颇有帮助

​ c.若是没有达到溢出的条件,ReduceTask直接从内存中拿数据

​ 8.对将要溢出的数据进行分区和排序

​ 9.溢出数据写到磁盘文件中

​ 10.对溢出的多份数据作归并和排序,造成新的文件

​ 11.若是设置了combiner(须要自定义),则会进行工做,它的做用将前面的内容进一步作聚合,减小磁盘开销和网络传输时间

​ 12.待MapTask结束,启动ReduceTask任务(这个不是绝对的,有配置能够干预ReduceTask启动触发条件)

​ 13.从各个MapTask任务哪里拿到须要作Reduce的数据(内存或者文件),并作合并

​ 14.对数据作分组(分组的字段为MapTask的输出key)----此处和图中有出入,以文字描述为准

​ 15.读取合并后的数据,作Reduce操做----此处和图中有出入,以文字描述为准

​ 16经过OutputFormat->RecordWriter把数据写到hdfs的文件中。默认是TextOutputFormat,能够自定义OutputFormat和RecordReader,好比根据不一样的业务,将数据输出到不一样的文件中。

 

YARN做业提交流程

​ 0.Mr 程序提交到客户端所在的节点。 1.Yarnrunner 向 Resourcemanager 申请一个 Application。 2.rm 将该应用程序的资源路径返回给 yarnrunner。 3.该程序将运行所需资源提交到 HDFS 上。 4.程序资源提交完毕后,申请运行 mrAppMaster。 5.RM 将用户的请求初始化成一个 task,该task会放入FIFO队列中(task是客户端提交的job,不是maptask和reducetask)。 6.其中一个 NodeManager 领取到 task 任务。 7.该 NodeManager 建立容器 Container, 并产生 MRAppmaster。 8.Container 从 HDFS 上拷贝资源到本地。 9.MRAppmaster 向 RM 申请运行 maptask 资源。 10.RM 将运行 maptask 任务分配给另外两个 NodeManager, 另两个 NodeManager 分别领取任务并建立容器。 11.MR 向两个接收到任务的 NodeManager 发送程序启动脚本, 这两个 NodeManager 分别启动 maptask, maptask 对数据分区排序。 12.MrAppMaster 等待全部 maptask 运行完毕后,向 RM 申请容器, 运行 reduce task。 13.reduce task 向 maptask 获取相应分区的数据。 14.程序运行完毕后, MR 会向 RM 申请注销本身。

FIFO调度器

先进先出调度器先按照做业优先级高低,再按照提交时间顺序依次执行。

容量调度器

容量调度器包含多个队列,每一个队列分配必定比例的硬件资源,每一个队列采用FIFO策略,同一用户的做业所占资源会被限制,防止该用户独占计算资源。当一个做业提交上来时,按照以下策略进行:

1.计算每一个队列中正在运行的任务数与该队列所分配资源比值,选择其中最小的队列

2.根据做业优先级和提交顺序,参考提交做业用户的资源限制重排队列内任务顺序,而后执行做业中的task

公平调度器

公平调度器包含多个队列,每一个队列分配必定比例的硬件资源,每一个队列采用缺额越大越优先执行的策略

缺额:每一个做业理论上应该得到硬件资源与实际得到硬件资源的差值

相关文章
相关标签/搜索