2026/3/29 4:01:34
网站建设
项目流程
建站不用域名直接用ip可以吗,网站开发建设合同书,邯郸网站建设唯辛ls15227,浙江网站建设方案一、MapReduce思想
1.1 理解MapReduce思想
MapReduce的思想核心是“先分再合#xff0c;分而治之”。
所谓“分而治之”就是把一个复杂的问题#xff0c;按照一定的“分解”方法分为等价的规模较小的若干部分#xff0c;然后逐个解决#xff0c;分别找出各部分的结果#…一、MapReduce思想1.1 理解MapReduce思想MapReduce的思想核心是“先分再合分而治之”。所谓“分而治之”就是把一个复杂的问题按照一定的“分解”方法分为等价的规模较小的若干部分然后逐个解决分别找出各部分的结果然后把各部分的结果组成整个问题的最终结果。这种思想来源于日常生活与工作时的经验。即使是发布过论文实现分布式计算的谷歌也只是实现了这种思想而不是自己原创。1Map表示第一阶段负责“拆分”即把复杂的任务分解为若干个“简单的子任务”来并行处理。可以进行拆分的前提是这些小任务可以并行计算彼此间几乎没有依赖关系。2) Reduce表示第二阶段负责“合并”即对map阶段的结果进行全局汇总。3) 这两个阶段合起来正是MapReduce思想的体现.1.2 Hadoop MapReduce设计构思MapReduce的思想很好理解关键在于如何基于这个思想设计出一款分布式计算程序下面看看Hadoop团队针对MapReduce的设计构思是怎样的1如何对付大数据处理场景对相互间不具有计算依赖关系的大数据计算任务实现并行最自然的办法就是采取MapReduce分而治之的策略。首先Map阶段进行拆分把大数据拆分成若干份小数据多个程序同时并行计算产生中间结果然后是Reduce聚合阶段通过程序对并行的结果进行最终的汇总计算得出最终的结果。不可拆分的计算任务或相互间有依赖关系的数据无法进行并行计算2构建抽象编程模型MapReduce借鉴了函数式语言中的思想用Map和Reduce两个函数提供了高层的并行编程抽象模型。map: 对一组数据元素进行某种重复式的处理reduce: 对Map的中间结果进行某种进一步的结果整理。MapReduce中定义了如下的Map和Reduce两个抽象的编程接口由用户去编程实现:map: (k1; v1) → (k2; v2)reduce: (k2; [v2]) → (k3; v3)通过以上两个编程接口大家可以看出MapReduce处理的数据类型是key,value键值对。3统一架构、隐藏底层细节如何提供统一的计算框架如果没有统一封装底层细节那么程序员则需要考虑诸如数据存储、划分、分发、结果收集、错误恢复等诸多细节为此MapReduce设计并提供了统一的计算框架为程序员隐藏了绝大多数系统层面的处理细节。MapReduce最大的亮点在于通过抽象模型和计算框架把需要做什么(what need to do)与具体怎么做(how to do)分开了为程序员提供一个抽象和高层的编程接口和框架。程序员仅需要关心其应用层的具体计算问题仅需编写少量的处理应用本身计算问题的业务程序代码。至于如何具体完成这个并行计算任务所相关的诸多系统层细节被隐藏起来,交给计算框架去处理从分布代码的执行到大到数千小到单个节点集群的自动调度使用。二、Hadoop MapReduce介绍分布式计算概念分布式计算是一种计算方法和集中式计算是相对的。随着计算技术的发展有些应用需要非常巨大的计算能力才能完成如果采用集中式计算需要耗费相当长的时间来完成。分布式计算将该应用分解成许多小的部分分配给多台计算机进行处理。这样可以节约整体计算时间大大提高计算效率。Hadoop MapReduce是一个分布式计算框架用于轻松编写分布式应用程序这些应用程序以可靠容错的方式并行处理大型硬件集群数千个节点上的大量数据多TB数据集。MapReduce是一种面向海量数据处理的一种指导思想也是一种用于对大规模数据进行分布式计算的编程模型。MapReduce产生背景MapReduce最早由Google于2004年在一篇名为《MapReduce:Simplified Data Processingon Large Clusters》的论文中提出。论文中谷歌把分布式数据处理的过程拆分为Map和Reduce两个操作函数受到函数式编程语言的启发随后被Apache Hadoop参考并作为开源版本提供支持叫做Hadoop MapReduce。它的出现解决了人们在最初面临海量数据束手无策的问题同时它还是易于使用和高度可扩展的使得开发者无需关系分布式系统底层的复杂性即可很容易的编写分布式数据处理程序并在成千上万台普通的商用服务器中运行。MapReduce特点易于编程Mapreduce框架提供了用于二次开发的接口简单地实现一些接口就可以完成一个分布式程序。任务计算交给计算框架去处理将分布式程序部署到hadoop集群上运行集群节点可以扩展到成百上千个等。良好的扩展性当计算机资源不能得到满足的时候可以通过增加机器来扩展它的计算能力。基于MapReduce的分布式计算得特点可以随节点数目增长保持近似于线性的增长这个特点是MapReduce处理海量数据的关键通过将计算节点增至几百或者几千可以很容易地处理数百TB甚至PB级别的离线数据。高容错性Hadoop集群是分布式搭建和部署得任何单一机器节点宕机了它可以把上面的计算任务转移到另一个节点上运行不影响整个作业任务得完成过程完全是由Hadoop内部完成的。适合海量数据的离线处理可以处理GB、TB和PB级别得数据量。MapReduce实例进程一个完整的MapReduce程序在分布式运行时有三类1 MRAppMaster负责整个MR程序的过程调度及状态协调。2 MapTask负责map阶段的整个数据处理流程。3 ReduceTask负责reduce阶段的整个数据处理流程。阶段组成一个MapReduce编程模型中只能包含一个Map阶段和一个Reduce阶段或者只有Map阶段1. 不能有诸如多个map阶段、多个reduce阶段的情景出现2. 如果用户的业务逻辑非常复杂那就只能多个MapReduce程序串行运行。MapReduce数据类型1注意整个MapReduce程序中数据都是以kv键值对的形式流转的2 在实际编程解决各种业务问题中需要考虑每个阶段的输入输出kv分别是什么3 MapReduce内置了很多默认属性比如排序、分组等都和数据的k有关所以说kv的类型数据确定及其重要的。三、Hadoop MapReduce官方示例wordcount单词词频统计WordCount中文叫做单词统计、词频统计指的是统计指定文件中每个单词出现的总次数。WordCount编程实现思路step1.map阶段的核心把输入的数据经过切割全部标记1因此输出就是单词1。step2. shuffle阶段核心经过MR程序内部自带默认的排序分组等功能把key相同的单词会作为一组数据构成新的kv对。step3. reduce阶段核心处理shuffle完的一组数据该组数据就是该单词所有的键值对。对所有的1进行累加求和就是单词的总次数。上传文本文件1.txt到HDFS文件系统的/input目录下如果没有这个目录使用shell创建hadoop fs-mkdir/input hadoop fs-put 1.txt/input准备好之后执行官方MapReduce实例对上述文件进行单词次数统计第一个参数wordcount表示执行单词统计任务第二个参数指定输入文件的路径第三个参数指定输出结果的路径该路径不能已存在hadoop jar hadoop-mapreduce-examples-3.3.0.jar wordcount/input/output四、MapReduce执行流程MapReduce整体执行流程图4.1 Map阶段执行流程第一阶段把输入目录下文件按照一定的标准逐个进行逻辑切片形成切片规划。默认Split size Block size128M每一个切片由一个MapTask处理getSplits第二阶段对切片中的数据按照一定的规则读取解析返回key,value对。默认是按行读取数据。key是每一行的起始位置偏移量value是本行的文本内容。TextInputFormat第三阶段调用Mapper类中的map方法处理数据。每读取解析出来的一个key,value 调用一次map方法。第四阶段按照一定的规则对Map输出的键值对进行分区partition。默认不分区因为只有一个reducetask。分区的数量就是reducetask运行的数量。第五阶段Map输出数据写入内存缓冲区达到比例溢出到磁盘上。溢出spill的时候根据key进行排序sort。默认根据key字典序排序。第六阶段对所有溢出文件进行最终的merge合并成为一个文件。4.2 Reduce阶段执行流程第一阶段ReduceTask会主动从MapTask复制拉取属于需要自己处理的数据。第二阶段把拉取来数据全部进行合并merge即把分散的数据合并成一个大的数据。再对合并后的数据排序。第三阶段是对排序后的键值对调用reduce方法。键相等的键值对调用一次reduce方法。最后把这些输出的键值对写入到HDFS文件中。4.3 Shuffle机制shuffle概念Shuffle的本意是洗牌、混洗的意思把一组有规则的数据尽量打乱成无规则的数据。而在MapReduce中Shuffle更像是洗牌的逆过程指的是将map端的无规则输出按指定的规则“打乱”成具有一定规则的数据以便reduce端接收处理。一般把从Map产生输出开始到Reduce取得数据作为输入之前的过程称作shuffle。Map端Shuffle1Collect阶段将MapTask的结果收集输出到默认大小为100M的环形缓冲区保存之前会对key进行分区的计算默认Hash分区。2Spill阶段当内存中的数据量达到一定的阀值的时候就会将数据写入本地磁盘在将数据写入磁盘之前需要对数据进行一次排序的操作如果配置了combiner还会将有相同分区号和key的数据进行排序。3 Merge阶段把所有溢出的临时文件进行一次合并操作以确保一个MapTask最终只产生一个中间数据文件。Reducer端shuffle1Copy阶段 ReduceTask启动Fetcher线程到已经完成MapTask的节点上复制一份属于自己的数据。2 Merge阶段在ReduceTask远程复制数据的同时会在后台开启两个线程对内存到本地的数据文件进行合并操作。3 Sort阶段在对数据进行合并的同时会进行排序操作由于MapTask阶段已经对数据进行了局部的排序ReduceTask只需保证Copy的数据的最终整体有效性即可。shuffle机制弊端Shuffle是MapReduce程序的核心与精髓是MapReduce的灵魂所在。Shuffle也是MapReduce被诟病最多的地方所在。MapReduce相比较于Spark、Flink计算引擎慢的原因跟Shuffle机制有很大的关系。Shuffle中频繁涉及到数据在内存、磁盘之间的多次往复。五、Hadoop YARN介绍YARN简介Apache Hadoop YARN Yet Another Resource Negotiator另一种资源协调者是一种新的Hadoop资源管理器。 YARN是一个通用资源管理系统和调度平台可为上层应用提供统一的资源管理和调度。 它的引入为集群在利用率、资源统一管理和数据共享等方面带来了巨大好处。YARN功能说明1资源管理系统集群的硬件资源和程序运行相关比如内存、CPU等。2调度平台多个程序同时申请计算资源如何分配调度的规则算法。3 通用不仅仅支持MapReduce程序理论上支持各种计算程序。YARN不关心你干什么只关心你要资源在有的情况下给你用完之后还我。YARN概述1可以把Hadoop YARN理解为相当于一个分布式的操作系统平台而MapReduce等计算程序则相当于运行于操作系统之上的应用程序YARN为这些程序提供运算所需的资源内存、CPU等。2 Hadoop能有今天这个地位YARN可以说是功不可没。因为有了YARN 更多计算框架可以接入到 HDFS中而不单单是 MapReduce正是因为YARN的包容使得其他计算框架能专注于计算性能的提升。3 HDFS可能不是最优秀的大数据存储系统但却是应用最广泛的大数据存储系统 YARN功不可没。六、Hadoop YARN6.1 YARN架构、组件YARN官方架构图官方架构图中出现的概念ResourceManagerRMYARN集群中的主角色决定系统中所有应用程序之间资源分配的最终权限即最终仲裁者。接收用户的作业提交并通过NM分配、管理各个机器上的计算资源。NodeManagerNMYARN中的从角色一台机器上一个负责管理本机器上的计算资源。根据RM命令启动Container容器、监视容器的资源使用情况。并且向RM主角色汇报资源使用情况。ApplicationMasterAM用户提交的每个应用程序均包含一个AM。应用程序内的“老大”负责程序内部各阶段的资源申请监督程序的执行情况。6.2 程序提交YARN交互流程核心交互流程MR作业提交 Client–RM资源的申请 MrAppMaster–RMMR作业状态汇报 ContainerMap|Reduce Task–ContainerMrAppMaster节点的状态汇报 NM–RM当用户向 YARN 中提交一个应用程序后 YARN将分两个阶段运行该应用程序 。第一个阶段是客户端申请资源启动运行本次程序的ApplicationMaster第二个阶段是由ApplicationMaster根据本次程序内部具体情况为它申请资源并监控它的整个运行过程直到运行完成。MR提交YARN交互流程第1步、用户通过客户端向YARN中ResourceManager提交应用程序比如hadoop jar提交MR程序第2步、ResourceManager为该应用程序分配第一个Container容器并与对应的NodeManager通信要求它在这个Container中启动这个应用程序的ApplicationMaster。第3步、ApplicationMaster启动成功之后首先向ResourceManager注册并保持通信这样用户可以直接通过ResourceManage查看应用程序的运行状态处理了百分之几;第4步、AM为本次程序内部的各个Task任务向RM申请资源并监控它的运行状态;第5步、一旦 ApplicationMaster 申请到资源后便与对应的 NodeManager 通信要求它启动任务。第6步、NodeManager 为任务设置好运行环境后将任务启动命令写到一个脚本中并通过运行该脚本启动任务。第7步、各个任务通过某个 RPC 协议向 ApplicationMaster 汇报自己的状态和进度以让 ApplicationMaster 随时掌握各个任务的运行状态从而可以在任务失败时重新启动任务。在应用程序运行过程中用户可随时通过RPC 向 ApplicationMaster 查询应用程序的当前运行状态。第8步、应用程序运行完成后ApplicationMaster 向 ResourceManager 注销并关闭自己。MR程序提交YARN交互流程6.3 YARN资源调度器Scheduler如何理解资源调度在理想情况下应用程序提出的请求将立即得到YARN批准。但是实际中资源是有限的并且在繁忙的群集上应用程序通常将需要等待其某些请求得到满足。YARN调度程序的工作是根据一些定义的策略为应用程序分配资源。在YARN中负责给应用分配资源的就是Scheduler它是ResourceManager的核心组件之一。Scheduler完全专用于调度作业它无法跟踪应用程序的状态。一般而言调度是一个难题并且没有一个“最佳”策略为此YARN提供了多种调度器和可配置的策略供选择。调度器策略三种调度器FIFO Scheduler先进先出调度器、Capacity Scheduler容量调度器、Fair Scheduler公平调度器。Apache版本YARN默认使用Capacity Scheduler。如果需要使用其他的调度器可以在yarn-site.xml中的yarn.resourcemanager.scheduler.class进行配置。FIFO Scheduler概述FIFO Scheduler是Hadoop1.x中JobTracker原有的调度器实现此调度器在YARN中保留了下来。FIFO Scheduler是一个先进先出的思想即先提交的应用先运行。调度工作不考虑优先级和范围适用于负载较低的小规模集群。当使用大型共享集群时它的效率较低且会导致一些问题。FIFO Scheduler拥有一个控制全局的队列queue默认queue名称为default该调度器会获取当前集群上所有的资源信息作用于这个全局的queue。优势无需配置、先到先得、易于执行。坏处任务的优先级不会变高因此高优先级的作业需要等待。不适合共享集群。Capacity Scheduler概述Capacity Scheduler容量调度是Apache Hadoop3.x默认调度策略。该策略允许多个组织共享整个集群资源每个组织可以获得集群的一部分计算能力。通过为每个组织分配专门的队列然后再为每个队列分配一定的集群资源这样整个集群就可以通过设置多个队列的方式给多个组织提供服务了。Capacity可以理解成一个个的资源队列这个资源队列是用户自己去分配的。队列内部又可以垂直划分这样一个组织内部的多个成员就可以共享这个队列资源了在一个队列内部资源的调度是采用的是先进先出(FIFO)策略。Capacity Scheduler特性优势层次化的队列设计Hierarchical Queues层次化的管理可以更容易、更合理分配和限制资源的使用。容量保证Capacity Guarantees每个队列上都可以设置一个资源的占比保证每个队列都不会占用整个集群的资源。安全Security每个队列有严格的访问控制。用户只能向自己的队列里面提交任务而且不能修改或者访问其他队列的任务。弹性分配Elasticity空闲的资源可以被分配给任何队列。当多个队列出现争用的时候则会按照权重比例进行平衡。Fair Scheduler概述Fair Scheduler叫做公平调度提供了YARN应用程序公平地共享大型集群中资源的另一种方式。使所有应用在平均情况下随着时间的流逝可以获得相等的资源份额。Fair Scheduler设计目标是为所有的应用分配公平的资源对公平的定义通过参数来设置。公平调度可以在多个队列间工作允许资源共享和抢占。Fair Scheduler特性优势分层队列队列可以按层次结构排列以划分资源并可以配置权重以按特定比例共享集群。基于用户或组的队列映射可以根据提交任务的用户名或组来分配队列。如果任务指定了一个队列,则在该队列中提交任务。资源抢占根据应用的配置抢占和分配资源可以是友好的或是强制的。默认不启用资源抢占。