您好,登录后才能下订单哦!
这篇文章将为大家详细讲解有关什么是mapreduce编程以及原理是什么,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。
相信关于Hadoop中MapReduce的相关文章会很多,这里只简单介绍一下MapReduce的相关知识。
Hadoop的MapReduce来源于Google公司的三篇论文中的MapReduce,其核心思想是“分而治之”。Map负责“分”,即把复杂的任务分解为若干个“简单的任务”来并行处理。可以进行拆分的前提是这些小任务可以并行计算,彼此间几乎没有依赖关系。Reduce负责“合”,即对map阶段的结果进行全局汇总。
现阶段MapReduce一般运行在Hadoop2.x版本的yarn资源平台上,具体运行过程后面会有详细说明。
MapReduce编程规范
MapReduce 的开发一共有八个步骤, 其中 Map 阶段分为 2 个步骤,Shuffle 阶段 4 个步骤,Reduce 阶段分为 2 个步骤
Map 阶段 2 个步骤
1)设置 InputFormat 类, 将数据切分为 Key-Value(K1和V1) 对, 输入到第二步;
2)自定义 Map 逻辑, 将第一步的结果转换成另外的 Key-Value(K2和V2)对, 输出结果;
Shuffle 阶段 4 个步骤
3)对输出的 Key-Value 对进行分区;
4)对不同分区的数据按照相同的 Key 排序;
5)(可选) 对分组过的数据初步规约, 降低数据的网络拷贝;
6)对数据进行分组, 相同 Key 的 Value 放入一个集合中;
Reduce 阶段 2 个步骤
7)对多个 Map 任务的结果进行排序以及合并, 编写 Reduce 函数实现自己的逻辑, 对输入的 Key-Value 进行处理, 转为新的 Key-Value(K3和V3)输出;
8)设置 OutputFormat 处理并保存 Reduce 输出的 Key-Value 数据;
yarn资源调度
yarn是hadoop集群当中的资源管理系统模块,从hadoop2.0开始引入yarn模块,yarn可为各类计算框架提供资源的管理和调度,主要用于管理集群当中的资源(主要是服务器的各种硬件资源,包括CPU,内存,磁盘,网络IO等)以及调度运行在yarn上面的各种任务。
相比于hadoop1.x版本,yarn核心出发点是为了分离资源管理与作业监控,实现分离的做法是拥有一个全局的资源管理ResourceManager(RM),以及每个应用程序对应一个的应用管理器ApplicationMaster(AM)。
总结一句话就是说:yarn主要就是为了调度资源,管理任务。
YARN总体上是Master/Slave结构,主要由ResourceManager、NodeManager、 ApplicationMaster和Container等几个组件构成。
ResourceManager(RM) 负责处理客户端请求,对各NM上的资源进行统一管理和调度。给ApplicationMaster分配空闲的Container 运行并监控其运行状态。主要由两个组件构成:调度器和应用程序管理器:
调度器(Scheduler):调度器根据容量、队列等限制条件,将系统中的资源分配给各个正在运行的应用程序。调度器仅根据各个应用程序的资源需求进行资源分配,而资源分配单位是Container。Shceduler不负责监控或者跟踪应用程序的状态。总之,调度器根据应用程序的资源要求,以及集群机器的资源情况,为应用程序分配封装在Container中的资源。
应用程序管理器(Applications Manager):应用程序管理器负责管理整个系统中所有应用程序,包括应用程序提交、与调度器协商资源以启动ApplicationMaster 、监控ApplicationMaster运行状态并在失败时重新启动等,跟踪分给的Container的进度、状态也是其职责。
NodeManager (NM) NodeManager:NodeManager (NM) NodeManager 是每个节点上的资源和任务管理器。它会定时地向ResourceManager汇报本节点上的资源使用情况和各个Container的运行状态;同时会接收并处理来自ApplicationMaster 的Container 启动/停止等请求。
ApplicationMaster (AM): 用户提交的应用程序均包含一个ApplicationMaster ,负责应用的监控,跟踪应用执行状态,重启失败任务等。ApplicationMaster是应用框架,它负责向ResourceManager协调资源,并且与NodeManager协同工作完成Task的执行和监控。
Container: Container是YARN中的资源抽象,它封装了某个节点上的多维度资源,如内存、CPU、磁盘、网络等,当ApplicationMaster向ResourceManager申请资源时,ResourceManager为ApplicationMaster 返回的资源便是用Container 表示的。
yarn的架构和工作流程
1. 客户端通过命令(hadoop jar xxx.jar)提交上传任务到主节点ResourceManager(RM)中的ApplicationManager进程;
2. 主节点RM判断集群状态,选择一台NodeManager(NM),开启一块资源Container,用来开启AppMaster进程;
3. AppMaster进程获取RM接收的任务请求,进行任务分配;
4. AppMaster根据任务情况向RM中的ResourceScheduler索要资源分配方案;
5. AppMaster根据资源分配方案找到到各个NodeManager从节点;
6. 在从节点上开启资源Container,并运行任务Task;
7. AppMaster获取各个Task上传的任务执行进度和结果;
8. AppMaster将任务执行的结果返回给ApplicationManager。
关于什么是mapreduce编程以及原理是什么就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。