对相互间不具有计算依赖关系的大数据计算任务,实现并行最自然的办法就是采取MapReduce分而治之的策略。
不可拆分的计算任务或相互间有依赖关系的数据无法进行并行计算!
MapReduce借鉴了函数式语言中的思想,用Map和Reduce两个函数提供了高层的并行编程抽象模型。
MapReduce处理的数据类型是
键值对。
程序员仅需要关心其应用层的具体计算问题,仅需编写少量的处理应用本身计算问题的业务程序代码。
分布式计算是一种计算方法,和集中式计算是相对的。
分布式计算将该应用分解成许多小的部分,分配给多台计算机进行处理。
Hadoop MapReduce是一个分布式计算框架,用于轻松编写分布式应用程序,这些应用程序以可靠,容错的方式并行处理大型硬件集群(数千个节点)上的大量数据(多TB数据集)
特点:易于编程、良好的扩展性、高容错性、适合海量数据的离线处理
局限性:实时计算性能差、不能进行流式计算(数据不能是动态的)
MRAppMaster:负责整个MR程序的过程调度及状态协调
MapTask:负责map阶段的整个数据处理流程
ReduceTask:负责reduce阶段的整个数据处理流程
只能包含一个Map阶段和一个Reduce阶段,或者只有Map阶段
在MapReduce中,指的是将map端的无规则输出按指定的规则“打乱”成具有一
定规则的数据,以便reduce端接收处理。
一般把从Map产生输出开始到Reduce取得数据作为输入之前的过程称作shuffle。
Collect阶段:将MapTask的结果收集输出到默认大小为100M的环形缓冲区,保存之前会对key进行分区的计算,默认Hash分区。
Spill阶段:当内存中的数据量达到一定的阀值的时候,就会将数据写入本地磁盘,在将数据写入磁盘之前需要对数据进行一次排序的操作,如果配置了combiner,还会将有相同分区号和key的数据进行排序。
Merge阶段:把所有溢出的临时文件进行一次合并操作,以确保一个MapTask最终只产生一个中间数据文件。
Copy阶段: ReduceTask启动Fetcher线程到已经完成MapTask的节点上复制一份属于自己的数据。
Merge阶段:在ReduceTask远程复制数据的同时,会在后台开启两个线程对内存到本地的数据文件进行合并操作。
Sort阶段:在对数据进行合并的同时,会进行排序操作,由于MapTask阶段已经对数据进行了局部的排序,ReduceTask只需保证Copy的数据的最终整体有效性即可。
YARN是一个通用资源管理系统和调度平台
可以把Hadoop YARN理解为相当于一个分布式的操作系统平台,而MapReduce等计算程序则相当于运行于操作系统之上的应用程序,YARN为这些程序提供运算所需的资源(内存、CPU等)
Hadoop能有今天这个地位,YARN可以说是功不可没。因为有了YARN ,更多计算框架可以接入到 HDFS中,而不单单是 MapReduce,正是因为YARN的包容,使得其他计算框架能专注于计算性能的提升。
ResourceManager(RM):YARN集群中的主角色,决定系统中所有应用程序之间资源分配的最终权限,即最终仲裁者。接收用户的作业提交,并通过NM分配、管理各个机器上的计算资源。
NodeManager(NM):YARN中的从角色,一台机器上一个,负责管理本机器上的计算资源。根据RM命令,启动Container容器、监视容器的资源使用情况。并且向RM主角色汇报资源使用情况
ApplicationMaster(AM):用户提交的每个应用程序均包含一个AM。应用程序内的“老大”,负责程序内部各阶段的资源申请,监督程序的执行情况。
MR作业提交 Client–>RM
资源的申请 MrAppMaster–>RM
MR作业状态汇报 Container(Map|Reduce Task)–>Container(MrAppMaster)
节点的状态汇报 NM–>RM
在理想情况下,应用程序提出的请求将立即得到YARN批准。但是实际中,资源是有限的,并且在繁忙的群集上,应用程序通常将需要等待其某些请求得到满足。
YARN调度程序的工作是根据一些定义的策略为应用程序分配资源。
先进先出的思想,即先提交的应用先运行。
允许多个组织共享整个集群资源,通过为每个组织分配专门的队列,然后再为每个队列分配一定的集群资源。
提供了YARN应用程序公平地共享大型集群中资源的另一种方式。
公平调度可以在多个队列间工作,允许资源共享和抢占。