《MapReduce设计模式》一设计模式与MapReduce

第1章 设计模式与MapReduce

MapReduce设计模式
MapReduce是处理数据分布在数百台机器上的计算框架,近些年来,随着其在Google、Hadoop及其他一些系统中的应用而越来越流行起来。这个计算框架超乎寻常地强大,但它并不是一种针对“大数据”问题的通用解决方案,因此,虽然可以很好地适用于一些问题,但对有些问题来说,解决起来还是非常具有挑战性的。本书将介绍哪些问题适合使用MapReduce计算框架来解决,以及如何高效地使用MapReduce计算框架。

很多初步了解MapReduce的开发者可能没有意识到,MapReduce不仅仅是一个工具,更是一个框架。我们必须拿问题解决方案去适配框架的map和reduce过程,在很多情况下,这个适配过程将非常具有挑战性。MapReduce更多的是一种约束,而不是一个单独的功能。

这使得问题的解决变得既简单又复杂。简单的一面在于,框架给出了关于可以做什么、不可以做什么的清晰界限,因此相对于过去所用的其他编程模型需要考虑的可选项要少很多。复杂的一面在于,在框架的约束下,找到解决问题的方案将会非常有难度。

初学MapReduce更像是在学习递归过程:寻找问题的递归解决方案会比较有挑战性,但一旦找到了问题的解决方案,问题将变得清晰、精准和优雅。在很多情况下,需要关注MapReduce作业所需要的系统资源,尤其是集群内部网络资源的使用情况。这是MapReduce框架在设计上的取舍,是在需要考虑并发、容错、扩展性以及其他挑战与只关注数据的分布式处理之间的平衡。但是,独特的系统加上独特的问题使解决方案产生了独特的设计模式。

什么是MapReduce设计模式?它是使用MapReduce模型来解决数据处理问题的通用模板。模式不是只针对如文本处理或者图像分析等特定领域的,它更像是解决问题的一种通用方法。使用设计模式是通过使用在实践中被尝试和验证过的一些原则来帮助我们构建更好的软件。

设计优秀的软件要面临一系列的挑战,设计并实现一个优秀的MapReduce程序同样也需要面临相似的挑战。就像缺乏优秀的设计会导致一个优秀的开发者写出差的软件一样,优秀的开发者也有可能实现出不够好的MapReduce算法。在MapReduce程序中,我们不仅要关注代码的简洁和可维护性,同时还要考虑到任务会在数百台机器的共享集群上处理TB级甚至PB级的数据,任务性能也需要格外地重视。同时,该作业与共享集群的机器上数以百计的任务存在竞争关系。一个好的设计可以带来几个数量级的性能提升,因此选择正确的设计来实现MapReduce算法就显得尤为重要。在深入讲解后面章节中的MapReduce设计模式之前,我们先来解释一下为什么将设计模式和MapReduce框架结合起来使用可以帮助我们解决问题,以及是如何得到这些启示的。

时间: 2024-08-02 09:51:03

《MapReduce设计模式》一设计模式与MapReduce的相关文章

您的设计模式,我们的设计模式 java设计模式

http://download.csdn.net/download/yangxin00000000/3212729   您的设计模式,我们的设计模式 java设计模式

javascript设计模式:JavaScript设计模式学习一之接口

看完了<JavaScript王者归来>,在图书馆找了<JavaScript设计模式>来看,之前设计模式方面的书看过:<Head First 设计模式>.<设计模式之禅>,GOF的<Design Patterns: Elements of Reusable Object-Oriented Software>看了一部分.记得以前没这些基础的时候,看<JavaScript设计模式>简直是不知道作者在说什么.言归正传:准确的说,JavaScr

IOS设计模式-组合设计模式

前言:本篇博文将让你学会软件开发中的"何为树形结构"."何为组合模式"."组合模式可以解决的问题"等相关知识. 内容大纲: 1.树形结构 2.组合模式 3.编写文件夹系统   1.树形结构(大神或者计算机基础很好的可以跳过,不过这后面通过用面向对象的代码实现的树形结构,值得一阅) 在介绍组合设计模式之前,有必要先简单讲讲树形结构,百度一下"树形结构",你很容易找到关于树形结构的相关基本概念: 树形结构是一层次的嵌套结构. 一个

java设计模式--Builder设计模式

  在学习Builder设计模式的时候 ,发现 这个Builder 和 工厂设计模式十分相似 ,我甚至说不出来他们之间有着什么样的区别,但可以肯定的是 ,如果我们需要产生一个复杂的对象,这个对象中包含多个其他的对象,以及属性等 . 那么我们应该使用Builder 模式 ,Builder模式减少了 对象部件之间的耦合度 ,所谓的耦合度 也就是对象部件之间的联系 . 其实说的再多也不如自己认真的分析一段代码 并且自己着手实现一个Builder原型 .  下面一段代码实现的功能 是产生一个 MyPro

C#设计模式之Visitor设计模式(访问者设计模式)

一.访问者(Visitor)模式 访问者模式的目的是封装一些施加于某种数据结构元素之上的操作.一旦这些操作需要修改的话,接受这个操作的数据结构则可以保持不变. 问题提出 System.Collection命名空间下提供了大量集合操作对象.但大多数情况下处理的都是同类对象的聚集.换言之,在聚集上采取的操作都是一些针对同类型对象的同类操作.但是如果针对一个保存有不同类型对象的聚集采取某种操作该怎么办呢? 粗看上去,这似乎不是什么难题.可是如果需要针对一个包含不同类型元素的聚集采取某种操作,而操作的细

C#设计模式之Observer设计模式(观察者设计模式)

一.观察者(Observer)模式 观察者模式又叫做发布-订阅(Publish/Subscribe)模式.模型-视图(Model/View)模式.源-监听器(Source/Listener)模式或从属者(Dependents)模式. 观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象.这个主题对象在状态上发生变化时,会通知所有观察者对象,使它们能够自动更新自己. 一个软件系统常常要求在某一个对象的状态发生变化的时候,某些其它的对象做出相应的改变.做到这一点的设计方案有很

java设计模式--原型设计模式 Prototype

所谓的原型即给我们一个对象 我们就可以无限复制出这个对象的副本  ,而不是引用这个对象   .  复制出来的副本 是一个个独立的对象 , 绝不是 原来对象的引用 . 这就要求设计到 java中的对象克隆技术  ,克隆的对象所在的类要实现Cloneable接口  以及覆盖 Object类的  clone()方法  . 我们不能直接调用Object的clone方法  因为  Object类并没有实现 Cloneable接口  如果调用就会抛出 一个  CloneNotSupporteExceptio

《MapReduce设计模式》一导读

前 言 MapReduce设计模式欢迎阅读<MapReduce设计模式>!这是一本既独特又熟悉的书.首先,这显然是一本关于设计模式的书,为大家提供解决问题的模板或通用指南.我们看了一些以前出版的有关设计模式的书,特别是Gamma等人(1995)编著的<Design Patterns: Elements of Reusable Object-Oriented Software>(通常被成为"四人组"书),从中汲取了灵感.在每个模式的描述中,读者都会看到一个我们反复

想学习mapreduce,大神们能不能给推荐一些书或者教程之类的,谢谢了

问题描述 想学习mapreduce,大神们能不能给推荐一些书或者教程之类的,谢谢了 mapreduce教程,想学习mapreduce,大神们能不能给推荐一些书或者教程之类的,谢谢了 解决方案 推荐两本书 MapReduce 2 0源码分析与编程实战 这个比较基础一些 MapReduce设计模式 这个对于提高很有帮助 解决方案二: 网上零零碎碎的东西先不要看,找本书系统学习下,遇到具体问题再上网查.否则误人子弟的东西太多,看来看去浪费时间. 解决方案三: http://www.cnblogs.co