开发者学堂课程【高校精品课-北京理工大学-大数据技术导论:大数据处理(一)】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/857/detail/15610
大数据处理(一)
内容介绍:
一、引言
二、基于 mapreduce 批处理计算框架
三、mapreduce 工作原理
四、map reduce 编程
五、小结
一、引言
大数据技术的两大核心是大数据存储技术与大数据处理技术。在前面的章节中了解到了分布式的大数据存储技术,在处理方面,随着人们对数据特点的认识和需求的变化,以及新型数据类型的不断出现,也有了新的处理架构和处理技术。
从架构的结构上来看,有集中式的处理架构和分布式的处理架构。
(1)在集中式的处理架构中,把数据集中的存储在中心节点上,整个系统的所有的业务单元都集中部署在中心节点上,系统所有的功能都由这个中心节点来做集中的处理。这种部署结构非常的简单,中心节点通常依赖于大型机或者超级计算机,它们有非常卓越的性能和良好的稳定性。同时它也有一些缺陷,它的经济成本非常高,有单点故障问题,当中心节点出现故障的时候,整个系统就不可以再对外进行服务了。同时可扩展性也有一些局限性。
随着大数据时代的到来以及。互联网应用的爆炸式的增长,集中式的处理架构不再足以满足一些应用的需求,同时小型机的性能,例如普通的 PC 机的性能都在不断的提升,互联网的技术也在不断的发展,采用小型机和普通PC机,以较低成本构建分布式平台成为了一些应用的主流选择。
(2)在分布式的架构中,经济和运营成本更加的低廉,同时不存在明显的单点故障问题,也更容易进行横向的水平扩展。根据大数据的特性以及应用的需求,当前存在着很多种不同类型的分布式的计算模型,批处理计算模型、流处理计算模型、混合式的批流融合计算模型以及图处理模型。
在批处理计算模型中,数据的吞吐率非常高,适用于海量的预存数据的批处理,典型的系统,比如说 hadoop平台,之后会详细介绍 hadoop 平台中的 Map Reduce 计算模型,数据计算模型,它的处理时延非常的短,适用于产生速度快,并需要及时处理的实时数据流的处理。代表的典型系统,比如说 Storm 和 S3混合的计算模型能够综合批处理和流处理的优点,然而却有着更高的系统复杂度。典型的系统如 spark 和 flink 系统。图处理计算模型更适合处理大规模的图数据,典型的系统有 Google 的 pregel 、graph lab 等等。
二、基于 mapreduce 批处理计算框架
前面的章节中了解到 hadoop 的 HDFS 分布式文件系统以及 h base 分布式数据库,它们都是以 Google 的系统作为原型来开源实现的。
1.Google 大数据的三驾马车
hadoop 的 mapreduce 同样是来自于 Google 的技术,与 hadoop 的 hdfs mapreduce 与 h base 并称为 Google大数据的三驾马车。
2.hadoop 简介
简单回顾一下 hadoop,Hadoop 是 Apache 软件基金会旗下的一个开源分布式的平台,它的两大核心设计就是HDFS和 mapreduce,hdfs 为海量的数据提供了存储,而 mapreduce 则为海量数据提供了计算框架。
3.HDFS 回顾
HDFS 有着很多优势例如说它可以向下兼容廉价的硬件设备,它采用流失的数据访问,可以提高系统的吞吐量。它更加适合于存储和管理超大型的文件。它采用简单的文件模型,可以支持更高的吞吐量,同时它有非常强大的跨平台的兼容性。
mapreduce 模型简介
mapre duce 是面向大数据并行处理的一个编程框架,它将非常复杂的运行于大规模集群上的并行计算过程。高度的抽象成了 map 和 REDUCE 两个函数。用户不需要掌握分布式并行编程的细节,只需要编写 map 和 reduce 函数就可以完成分布式的程序设计,利用集群的强大的分布式的计算能力来完成海量的数据计算。mapreduce 里面一个非常重要的设计理念就是计算向数据靠拢,而不是数据向计算靠拢。寻找数据块中最近的 map 节点来进行计算,而不是将数据搬运到计算节点上来进行运算。移动数据需要大量的网络传输开销,将大大的降低数据处理的效率。
在 mapreduce 模型里面采用了分而治之的策略。简单来说,就是把一个非常大的数据集切分为许多独立的分片,分发给多个 map 节点进行处理,通过一个或多个 reduce 节点来整合 map 节点处理的中间结果,汇总成为最终的处理结果。
下面具体看一下 Mapreduce 模型中的 map 和 reduce 函数、map 和 reduce 函数都是以<key value>作为输入,通过一定的映射规则转换成另一个或一批<key value pair>这个映射规则是用户在 map 和 reduce 函数里面进行自定义的。具体来看一下,对于 map 来讲,它是把输入的<key value pair>通过映射规则转换成一系列的<key value pair >reduce 函数。是将 key 以及 keep 所关联的 value 作为输入,通过一定的规则转换成了另一系列的<key value pair>。
以一个简单的词频统计的例子来具体的介绍一下 map 和 reduce 函数。在这个例子里面,输入是一个包含三行文本的输入文件,在实际的 mapreduce 的应用中,输入文件可能是一个非常大的数据集,首先对数据集做一个分片的处理,这个例子里面,每一行作为一个分片,每个分片输入到 map 做处理,Map 以一个分片作为输入,输出是针对每一个词的单独的词频统计信息,词频统计信息在输入到 reduce 做最终整合之前,会经历一个 Shuffle 的阶段。shafule是针对每一个词做一个合并的处理,合并的结果交给 reduce 做最终的词频统计。了解了 mapreduce 函数。
三、mapreduce 工作原理
1、Map 阶段:主要执行分片和映射两个操作
(1)在 mapreduce 中,管理节点,Master和工作节点 WORKER 两类节点,执行过程分为 map suffer 和 REDUCE三个阶段。具体来说,在 map 阶段,主要进行分片和 map,两个操作力的操作是将用户数据切分成多个分片,每个分片交由一个 map 处理。在第一个阶段,将用户的应用程序拷贝到 master 节点和工作节点上来,创建相应的进程。
(2)must 节点会为空闲节点分配 map 任务或是 reduce 任务,被分配了 map 任务的工作节点会去读取相应分片里面的输入数据,每一个分片对应一个 map 任务,
(3)maple 会执行用户定义的 map 函数,计算得到一些中间结果写到内存缓冲区里面。
2.shuffle 阶段
shuffle 阶段简单来讲就是将 map 的输出,作为 reduce 输入的一个过程。需要对 map 的输出进行分区排序和合并的操作。
map 会首先把中间产生的结果写到内存缓冲区里面,缓冲区里的结果会被阶段性的写入磁盘,这个过程叫它溢写,在溢写的过程中,会对数据做一个分区。通常分区的数量与后面的 reducer 的数量是相同的。在进行溢写的过程中,在每个分区里面会对 key 进行排序,同时会合并具有相同 key 的值,再去写入磁盘。
接下来执行 reduce 任务的 worker 会根据 master 提供的存储了,Map 的中间结果的地址信息,从 map 端来读取数据,数据可能来自多个map,同样的数据会先写入缓存,之后再溢写到。磁盘上,对于相同的 key,同样会进行合并的操作,这个过程被称为 reduce 端的 shuffle 操作。
3.Reduce 阶段:将 shuffle 最终生成的有序的一个文件作为 reduce 的输入。
最后进入 reduce 阶段 reduce 阶段,执行 reduce 的操作,在这个过程中,执行 reduce 任务的 worker 会建立它的输入文件。对于所有相同的 key,我们把 key 相关联的值这个 list 传给 reduce 函数,然后根据用户定义的逻辑来进行运算,产生的输出会被添加到分区的输出文件里面。当所有的 reduce 执行完毕之后,Master 来负责唤醒用户进程,来完成整个的 mapreduce 过程。
4. shuffle 阶段/过程
在 map 和 reduce 中间,我们会经历一个非常重要的 shuffle 阶段,那么,下面通过这个示意图来重点总结一下shuffle的过程。
shuffle 阶段主要是将 map 的输出,作为 reduce 输入的一个过程,shuffle 会分为 map 端的 shuffle 和 reduce 端的shuffle。在 map 端的 shuffle 里面,Map 产生的中间结果会被首先写到内存缓冲区里面,缓冲区里面的数据。会不定时的做一写操作,进行一写操作的时候,会对数据进行分区的处理,分区的数量取决于 reduce 的数量,在每个分区里面,会按 key 来进行排序。经历了 map 端的 shuffle 之后,数据是一个分区有序的状态,接下来进入到 reduced shephone 阶段,Reduced shuffle 阶段,Reduce 端会。分别从多个 map 去读取相应分区的数据,并把相应分区的数据,做一个按key排序的处理,最终输出到 reduce 里。
四、map reduce 编程
关于 map reduce 编程,可以参考 hadoop 的官方文档,Map reduce tutorial 来学习如何使用 Java API 来编写 map reduce 函数。
五、小结
分布式并行计算是大数据时代的一个必然的趋势,在大数据时代里面,有着来源非常丰富,并且种类多种多样的这样的数据,存储和挖掘的数据量非常的庞大,越来越多的数据处理都要求批量化、实时化。流式化,这一节中,介绍了分布式的数据处理架构,重点介绍了 mapreduce 批处理计算架构,介绍了 mapreduce 的设计思想、编程模型以及它的工作原理。
了解 mapreduce,可以将复杂的运行于大规模集群上的并行计算高度的抽象为 map 和 REDUCE 两个函数,可以非常方便的进行分布式的编程。