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

简介:

本节书摘来异步社区《MapReduce设计模式》一书中的第1章,第1.1节,作者: 【美】Donald Miner , Adam Shook 译者: 徐钊 , 赵重庆 责编: 杨海玲,更多章节内容可以访问云栖社区“异步社区”公众号查看。

第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框架结合起来使用可以帮助我们解决问题,以及是如何得到这些启示的。

相关文章
|
分布式计算 Hadoop 设计模式
《MapReduce设计模式》一导读
欢迎阅读《MapReduce设计模式》!这是一本既独特又熟悉的书。首先,这显然是一本关于设计模式的书,为大家提供解决问题的模板或通用指南。我们看了一些以前出版的有关设计模式的书,特别是Gamma等人(1995)编著的《Design Patterns: Elements of Reusable Object-Oriented Software》(通常被成为“四人组”书),从中汲取了灵感。
1511 0
|
存储 SQL 分布式计算
MapReduce设计模式学习
一:概要模式 1:简介 概要设计模式更接近简单的MR应用,因为基于键将数据分组是MR范型的核心功能,所有的键将被分组汇入reducer中 本章涉及的概要模式有数值概要(numerical summarization),倒排索引(inverted index),计数器计数(counting with counter)2:概要设计模式包含       2.
947 0
|
16天前
|
设计模式 SQL 算法
设计模式了解哪些,模版模式
设计模式了解哪些,模版模式
19 0
|
1月前
|
设计模式 Java uml
C++设计模式之 依赖注入模式探索
C++设计模式之 依赖注入模式探索
37 0
|
2月前
|
设计模式 前端开发 JavaScript
观察者模式 vs 发布-订阅模式:两种设计模式的对决!
欢迎来到前端入门之旅!这个专栏是为那些对Web开发感兴趣、刚刚开始学习前端的读者们打造的。无论你是初学者还是有一些基础的开发者,我们都会在这里为你提供一个系统而又亲切的学习平台。我们以问答形式更新,为大家呈现精选的前端知识点和最佳实践。通过深入浅出的解释概念,并提供实际案例和练习,让你逐步建立起一个扎实的基础。无论是HTML、CSS、JavaScript还是最新的前端框架和工具,我们都将为你提供丰富的内容和实用技巧,帮助你更好地理解并运用前端开发中的各种技术。