打字猴:1.700432347e+09
1700432347
1700432348 建模的理念与方法一直都在发展和进步,我们将在第6章中讨论的简易建模方法也获得了越来越广泛的使用,网格计算可以成为一种处理额外建模工作负载的有效方法。
1700432349
1700432350 驾驭大数据 [:1700430572]
1700432351 4.6 MapReduce
1700432352
1700432353 MapReduce是一种并行的编程架构。它不是数据库,更不是数据库的竞争对手。有人宣称,MapReduce将取代数据库以及天底下的任何事物。事实上,MapReduce是对现有技术的补充。很多MapReduce能干的事情,关系型数据库也可以完成。归根到底人们需要确定哪个环境更适合解决手头上的问题。某个工具或技术可以执行某个任务,并不代表它是执行这个任务的最佳选择。我们不应该纠结于理论上MapReduce可以做什么,而应该专注于它最适合做什么,这样才可能将使用MapReduce的利益最大化。
1700432354
1700432355 MapReduce里程序员们内置了两个主要的处理过程:映射过程“map”以及归纳过程“reduce”。这就是MapReduce名字的来源。MapReduce会在一系列的工作结点上并发执行这些处理过程。这让我们联想起了MPP架构的数据库系统,数据被分配到不同节点以进行快速查询。类似于MPP系统,MapReduce也会把数据分配到不同通用设备上运行处理。每一个MapReduce节点都会使用同样的代码对自己管理的那部分数据进行处理。区别在于,MapReduce里的节点之间不会发生信息交互,甚至不知道彼此的存在。
1700432356
1700432357 假如系统有一个巨大且持续的网站日志数据流,这个数据流必须按块分割,然后分配到不同的节点上。当数据流持续不断地进入系统时,一个处理这些数据的简单方法就是建立一个循环运行的程序,或者某种形式的散列(hashing)。在这种情况下,数据在分配至不同节点前,要经过一些数学公式的加工处理,以确保相似的数据能分配到同一个节点上。例如,对顾客ID进行散列处理,就能把某一个顾客的所有记录全部分配到同一个节点上。如果计划使用顾客ID进行分析,这么处理就非常重要。
1700432358
1700432359 Mapreduce.org网站把MapReduce定义为Google发明并推广的一种编程框架。这个框架最初用于简化超大数据集的处理任务。Hadoop是MapReduce一种流行的开源版本,开发者是Apache团队。Hadoop是最出名的MapReduce实施版本。在这一节里,我们会专注于MapReduce的通用概念,这些概念适用于你所使用的任何MapReduce实施版本。
1700432360
1700432361 今天的企业已经发现,对持续生成的海量数据进行快速分析以支持科学决策是非常重要的。MapReduce是帮助企业管理半结构化或非结构化数据的一种工具,而这些数据使用传统的技术和工具是很难进行分析的。大多数企业在使用数据库管理关系型数据之外,也在使用各种方式处理其他类型的数据,包括文本以及机器自动生成的各种数据,如网络日志、传感器数据、图像等。为了获得有意义的启示,企业必须快速并高效地处理各种类型的数据。在MapReduce环境下,计算过程直接发生在存储数据的文件系统中,而无需首先把这些数据导入数据库。这是一项极为重要的特性,我们随后会进行详细阐述。
1700432362
1700432363 MapReduce环境的一个突出特点是处理各种非结构化文本的能力。在关系型数据库中,所有数据都存储在数据表以及数据表里的行与列中。数据内部的关系已经被清晰地定义,而原始数据往往不是这样。这就是MapReduce可以发挥威力的地方。我们确实可以把大段的文本导入数据库内作为一个二进制对象字段,但这并不是处理这类数据的最佳方案。这种情况下应该考虑使用MapReduce。
1700432364
1700432365 驾驭大数据 [:1700430573]
1700432366 4.6.1 MapReduce工作原理
1700432367
1700432368 假设在某个项目中我们有20T的数据,以及20台MapReduce服务器。
1700432369
1700432370 首先,通过简单的文件复制过程将数据均匀分布到20台服务器中,每一台服务器拥有1T的数据。注意,数据分布发生在MapReduce对数据进行处理之前。还需注意的是,数据是以某种用户选择的文件格式保存,而不是关系型数据库那样的标准格式。
1700432371
1700432372 然后,程序员提交了2个程序给调度程序。第一个是映射(Map)程序,另外一个是归纳(Reduce)程序。在这两阶段的处理过程中,映射程序寻找磁盘上的数据,并执行内部的处理逻辑,其在这20台服务器上彼此独立运行,所有处理结果将交给归纳程序进行汇总处理,以获得最终的结果。图4-6说明了这个处理流程。
1700432373
1700432374
1700432375
1700432376
1700432377 图4-6 MapReduce处理过程
1700432378
1700432379 举个例子,企业网站的在线客服人员与客户交流的大量文本记录被不断地导入系统中。分析师可以创建一个映射程序来分析文本记录中的每一个词语。映射程序在文本中简单地搜索每一个词语,并将这些词语从段落中解析出来,然后标上与其相关的计数。映射程序的输出结果是词语与计数的组合,如“<我,1>,”“<产品,1>,”“<坏了,1>,”等。当每个工作节点都执行完映射程序,调度程序会得到通知。
1700432380
1700432381 再一次分工合作!
1700432382
1700432383 MapReduce的核心理念是,让许多机器一起来共同承担海量数据带来的处理压力。当数据的处理逻辑可以在不同数据子集上独立进行时,使用MapReduce进行并行处理可以显著提升处理速度。
1700432384
1700432385 一旦映射程序完成了,归纳程序就开始启动了。在这个例子中,我们的目标是统计每个词语总共出现了多少次。随后发生的处理叫做“洗牌”。在“洗牌”过程中,不同节点的映射程序输出结果被汇集起来,并进行二次分配,每个归纳节点得到它所负责词汇的所有数据。例如,我们有26个归纳节点〔5〕,那么以A开头的所有词语的数据将全部传输给第一台服务器,以B开头的所有词语的数据将传输给第二台服务器,以C开头的所有词语的数据将传输给第三台服务器,依次类推。
1700432386
1700432387 然后,每个归纳节点的归纳程序开始汇总计算每个单词出现的频率。在这个例子里,归纳程序的输出物可能是这样,“<我,10>,”“<产品,25>,”“<坏了,20>,”,这里的数字表明这个词语在文章中出现的总次数。程序会产生26份这种形式的输出物,每个归纳节点产生一份。请注意,此时还要运行另外一个程序来汇总这26份结果。为了获得最终的结果,通常要执行多次MapReduce处理过程。
1700432388
1700432389 一旦获得了词语的出现次数,分析师就可以开始工作了。一些特定产品的名称,以及一些像“坏了”、“愤怒”这类的词语,都将被识别出来并进行重点研究。要点是,原来的文本数据是大段的文字,这是一种完全非格式化的数据,在经过处理后,它转换成了一种简单的格式,以便人们进行分析。MapReduce通常是这类数据处理过程的起点,它的输出则成为其他分析过程的输入。
1700432390
1700432391 可以同时让几千个映射与归纳程序运行在几千台机器上,这让MapReduce变得非常强大。如果你有海量的数据流,且数据的处理任务可以分解成小型任务,那么,MapReduce可能就是你的“大救星”。如果某一个处理节点执行自身的任务时不需要了解其他节点的信息,那么就可以实现彻底的并行处理。在我们举的这个例子中,每个词语都可以独立地进行扫描,在上文的这个映射程序里,每个词语与它上下文的其他词语没有任何关联性。
1700432392
1700432393 刚才提到的这一点非常重要,这也是理解什么时候及如何使用MapReduce的关键。当数据被分配给不同机器后,每台机器就只知道自己的数据。如果处理过程需要不同节点进行数据交互,那就要使用MapReduce之外的其他架构。幸运的是,有很多场景不需要节点进行数据交互,可以支持MapReduce的处理方式。解析一个网页日志文件或一条RFID记录都不需要了解其他的任何信息。如果输出结果前,需要按照客户ID来汇总文本解析的结果,只需要确保这个客户的所有数据都分配给了同一台服务器即可。
1700432394
1700432395 从概念上讲,MapReduce解决了类似于关系型数据库并行处理的问题。再次强调,MapReduce不是数据库,它不需要有预先定义的结构,每个处理过程都不了解之前或之后处理过程中发生的任何事情。确实,MapReduce和数据库能做的事情有部分重合。数据库可以为MapReduce提供数据,而MapReduce也可以把处理结果输入数据库中。关键是要知道谁更适合做哪些任务。能做这件事情,并不代表是做这件事情的最优方案,也许其他工具或方法能做得更好。数据库和MapReduce都应该做它们最适合的事情。
1700432396
[ 上一页 ]  [ :1.700432347e+09 ]  [ 下一页 ]