1、MapReduce 介绍
MapReduce是一种可用于数据处理的编程框架。MapReduce采用"分而治之"的思想,把对大规模数据集的操作,分发给一个主节点管理下的各个分节点共同完成,然后通过整合各个节点的中间结果,得到最终结果。简单地说,MapReduce就是"任务的分解与结果的汇总"。
MapReduce如何分而治之呢? map->“分” ==》 reduce->“合并”
在MapReduce过程详细:input -> map -> shuffle ->reduce -> output
在分布式计算中,MapReduce框架负责处理了并行编程中分布式存储、工作调度、负载均衡、容错均衡、容错处理以及网络通信等复杂问题,把处理过程高度抽象为两个函数:map和reduce,map负责把任务分解成多个任务,reduce负责把分解后多任务处理的结果汇总起来。
1.1、MapReduce结构图
上图其实就是这句话:input -> map -> shuffle ->reduce -> output
MapReduce运行模式:
* 本地模式运行、例如(运行Hadoop JAR—运行参数—输入源—输出源)
bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.5.0.jar wordcount /user/root/chenzhengy
ou/mapreduce/wordcount/input /user/root/chenzhengyou/mapreduce/wordcount/output
* yarn模式例如、(运行YARN JAR—运行参数—输入源—输出源)
bin/yarn jar jars/hadoop-mapreduce.jar /chenzhengyou/mapreduce/wordcount/input/wc.input /chenzhengyou/map
reduce/wordcount/output
1.2、MapReduce在YARN?
1)用户程序 (JobClient) 提交了一个 job,job 的信息会发送到 Job Tracker 中,Job Tracker 是 Map-reduce 框架的中心,他需要与集群中的机器定时通信 (heartbeat), 需要管理哪些程序应该跑在哪些机器上,需要管理所有 job 失败、重启等操作。 2)TaskTracker 是 Map-reduce 集群中每台机器都有的一个部分,他做的事情主要是监视自己所在机器的资源情况。 3)TaskTracker 同时监视当前机器的 tasks 运行状况。TaskTracker 需要把这些信息通过 heartbeat 发送给 JobTracker,JobTracker 会搜集这些信息以给新提交的 job 分配运行在哪些机器上。 从上图可以看出 YARN 帮助我们管理整个资源的管理和调度、管理每个节点的资源与调度,还有更好管理Hadoop生态圈技术、比如HIve、Hbase等。
1.3、 shuffle 过程
MapReduce处理过程、其中Shuffle过程是MapReduce的核心、红色部分是shuffle的过程:
在 input 阶段: InputFormat (输入格式化):读取数据、转换成<key,value>
在 map 阶段:
ModuleMapper:map(KEYIN,VALUEIN,KEYOUT,VALUEOUT)
在 shuffle 阶段:
接收map的输出:output<key,value>
spill:溢写到磁盘中
* 分区parttition、排序sort
* 合并,merge、copy
在 Reduce Task阶段:回到Map Task运行的机器上,拷贝要处理的数据
* 合并、merge、排序、分组group、将相同Key 的value放在一起
2、YARN 介绍
MapReduce has undergone a complete overhaul in hadoop-0.23 and we now have, what we call, MapReduce 2.0 (MRv2) or YARN(官网的介绍)
在hadoop 2.0版本中后,YARN引入了一种新的调度策略:基于标签的调度机制。该机制的主要引入动机是更好地让YARN运行在异构集群中,进而更好地管理和调度混合类型的应用程序。
YARN架构图2.1、YARN 组件
ResourceManager组件:整个集群资源的管理和调度、处理客户端请求、启动与监控ApplicationMaster、监控NodeManager、资源分配与调度。NodeManager组件:管理每个节点的资源与调度、单个节点上的资源管理、处理来自ResourceManager的命令、处理来自己ApplicationMaster的命令。
ApplicationMaster组件(图App Mstr):数据切分、为应用程序申请资源,并且分配给内部任务、任务监控与容错。 Container组件:对任务运行环境的抽象、把CPU、内存等资源以及环境变量、启动命令等任务运行相关的信息。
2.2、YARN 在Haoop生态圈
可以看出 YARN 在 HADOOP 生态圈占有极大的地位、比如MapReduce、Tez等都运行在YARN在,统一的管理。虽然MapReduce没有YARN也可以运行操作、但是为了资源的调度与分配、更好的管理集群(实际一般都是集群),更好的协调合作。 Hadoop是处理离线大量数据的、但是Spark是基于内存级别的计算框架,都知道Spark速度比hadoop快,各取优点。那么?谁来管理这个协调合作呢?这就是需要YARN来管理协调了。