打字猴:1.700432377e+09
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
1700432397 驾驭大数据 [:1700430574]
1700432398 4.6.2 MapReduce优缺点
1700432399
1700432400 MapReduce可以在普通硬件上运行。因此,建立和运行一个MapReduce系统的成本很低,扩容也非常便宜。你只需要购买更多的机器,把它们部署在环境中,系统的能力就自然地得到了扩充,而这些很容易实现。
1700432401
1700432402 前面我们已经讨论过,某些关系型数据库做起来很费劲的事情,MapReduce能做得非常好,如文本解析、网络日志扫描,或者读取一个很大的原始数据。当一个巨大的数据集被导入系统,并且这个数据集中的大部分数据都不需要进行分析,那么MapReduce将是你的最佳选择。如果只有部分数据是非常重要的,但是我们还不清楚哪些数据会成为重要的数据,MapReduce也可以发挥作用。扫描海量的数据,并从中抽取出部分重要数据,这是MapReduce最适合做的事情。
1700432403
1700432404 从水管中啜水
1700432405
1700432406 许多大型的数据流,如网络日志,都包含了大量没有长期价值的信息。MapReduce让你可以从数据流中抽取你想要的数据,让其他没用的数据流走,这就像从水管中吸水,你只喝了一小部分,大部分水都流走了。
1700432407
1700432408 事实上,如果在数据处理的最后阶段大部分数据都要被丢弃,那么耗费大量的时间和存储空间,把全部的原始数据都加载到企业级数据仓库中是完全没有意义的。如果只在一个很短的时间内需要这些数据,那么,把这些数据加载到一些长期保留信息的地方,如数据仓库,就完全没必要。在这种情况下,最适合使用MapReduce,在进入数据库之前,把数据中的多余部分剔除掉。
1700432409
1700432410 在许多场景下,MapReduce的使用方式与ETL工具有一些相近。ETL工具读取源数据的数据集,进行一系列的格式转换与重组处理,然后把结果输出到最终的数据源中。为了支持分析,ETL工具要从生产系统中抽取数据,然后把它们输出到一个关系型数据库中,以便人们可以访问并使用这些数据。MapReduce也会对某个巨大的数据源进行处理,它用一些具有业务意义的方式进行汇总,然后把结果输出到数据库或某个分析流程中。在前面这个例子中,初始的大段文本被转换成了可被分析词语的出现次数。处理的结果可以导入数据库中,然后与已有的信息进行整合分析,从而获得额外的信息。
1700432411
1700432412 MapReduce并不是数据库,它没有内置的安全机制,没有索引,没有查询或处理过程的优化机制,没有其他已完成任务的历史信息,也不知道其他节点拥有的数据内容。MapReduce提供了一种灵活处理各类数据的方式,同时,它也有责任去准确地定义或描述每一个处理过程中产生的数据。所有的一切都或多或少需要用户进行编程,包括数据结构。每一个任务都是一个孤立的实体,它并不了解其他可能正在执行的任务。
1700432413
1700432414 MapReduce还不是非常成熟。知道如何恰当地使用和配置MapReduce的人并不多,也没有很多人懂得开发MapReduce所需要的代码程序。所以在今天,给定一些资源约束条件,打造MapReduce方向的强大优势并不容易。这种情况未来一定会发生改变,因为随着MapReduce的发展,越来越多的人会了解并掌握MapReduce。这也是本书写作时的一大考虑因素。
1700432415
1700432416 驾驭大数据 [:1700430575]
1700432417 4.6.3 MapReduce小结
1700432418
1700432419 随着大数据成为企业需要应对的一大问题,MapReduce也得到了越来越多的使用,影响力也在不断增长。当处理海量数据时,由于其中大部分的数据长期来看都没有价值,MapReduce这种使用普通硬件进行并行处理的能力就变得很有吸引力。通过把大型任务分解成小型任务,MapReduce可以比其他方式更快、更便宜的完成各类数据处理的任务。
1700432420
1700432421 MapReduce不是数据库,它也不会取代数据库,但是MapReduce的确可以给企业的数据库增加巨大的价值。一旦MapReduce被部署完成,并开始从大数据流中抽取部分重要的数据,这些数据就可以被其他传统的数据库使用,并进行深入分析,也可以提供各种类型的查询和分析报表。在某些方面,MapReduce有点类似于ETL。
1700432422
1700432423 在本节的最后,让我们再来看一个简单的例子。网络日志是非常大的,包含了很多无用的信息。就像大海捞针,MapReduce可以从大数据的海洋中找到有价值的针。想象一个MapReduce的处理流程,它对网络日志进行实时扫描,并识别出需要执行的动作。例如,MapReduce可以发现哪些客户浏览了某个产品但是最终却没有购买,这些信息立刻被传递给电子邮件生成流程,企业就可以给这些客户发送后续的促销邮件。这所有的一切都发生在把原始数据导入关系型数据库并执行查询语句之前。
1700432424
1700432425 一旦这个实时扫描任务执行完了,最重要的信息就可以导入数据库了。这些信息可以和其他重要的客户历史记录关联起来,更多跨时间、跨部门的战略型分析就可以进行了。在这个例子里,被识别出来的客户名单会被导入数据库,并记录企业给他们发送过的促销邮件。企业随后可以进行跟踪分析,研究邮件营销的历史记录,就像每一次邮件营销活动中做的事情一样。
1700432426
[ 上一页 ]  [ :1.700432377e+09 ]  [ 下一页 ]