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

简介:

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

1.1 设计模式

近些年来,设计模式使开发者的工作变得更轻松。这些设计模式为解决问题提供了可复用的通用方法,开发者在遇到问题时可以花更少的时间来思考解决问题的策略,从而有更多的时间用来迎接新的挑战。与此同时,开发者积累的丰富经验也有了简洁的方式传递给新入门的开发者。

在软件工程的设计模式领域中,有一个重要里程碑,即《Design Patterns:Elements of Reusable Object-Oriented Software》一书(由Gamma等人所著),通常也被称为“四人组”(Gang of Four)的书。这本畅销书中没有一种模式是新发明的,而且很多模式都是使用了多年的。这本书经久不衰的秘诀在于,作者花了大量的时间记录和整理面向对象编程中最重要的设计模式。因为这本书出版于1994年,所以整理和收录的设计模式都来自于开发者之间口口相传、会议和杂志,以及当时还不太流行的互联网。

设计模式经受了时间的验证,并展示了正确的抽象层次:既避免了太具体,使得细节过于繁杂,从而难以裁剪来满足问题的需要,又不至于太泛泛,使得解决问题的一种模式需要包含大量的工作。这个层面的抽象产生的更大益处是,为开发者在日常交流和代码层面的交互提供了公共语言。简单地引用“抽象工厂”要比一遍遍地解释抽象工厂的原理更便于交流。而且,在读过他人实现的抽象工程代码后,也能同时领会到作者的意图。

MapReduce设计模式同样也是为问题和解决方案之间搭建桥梁的。MapReduce设计模式通过提供通用框架来解决数据计算问题,而不局限于特定领域。经验丰富的MapReduce开发者可以借此将积累的知识传授给新入门的开发者。这一点非常重要,因为MapReduce是一个正在快速成长的新技术,每天都会有新的开发者加入进来。MapReduce设计模式可以成为一起工作的团队之间的通用语言。建议其他开发者使用“reduce端连接”(reduce-side join)代替“map端复制连接”(map-side replicated join),要比分别解释两种机制的底层原理更加简洁与方便。

MapReduce设计模式的现状就像1994年以前设计模式在面向对象语言领域的情况一样。MapReduce设计模式的相关资料目前已经广泛分布在博客、类似StackOverflow的网站、技术类书籍以及世界各地的高级技术团队中。本书的目的不是提供全新的问题解决方案,而是将目前已经广泛应用的模式汇总整理起来,以方便大家分享。

即使已经了解了设计模式,在真实的问题解决实践中,还需要仔细考虑设计模式所适用的场景。当尝试使用从本书或其他地方学到的设计模式来解决新的问题之前,请仔细考量该设计模式的“适用场景”。

在通常情况下,本书涉及的MapReduce设计模式是与平台无关的。MapReduce框架最初是在Google的论文中提出的,但其对应的代码并没有开源。目前已经有多个独立的系统(如Hadoop、Disco和Amazon Elastic MapReduce)实现了MapReduce框架,另外一些大型系统的查询语言(如MongoDB、Greenplum DB和Aster Data)也已经内置了对MapReduce的支持。虽然设计模式的初衷是通用性,但是本书中的MapReduce主要面向的是Hadoop平台。由于各个MapReduce实现都使用了相同的概念架构,因此很多设计模式可以应用在其他的MapReduce系统(如MongoDB)中。然而,各个MapReduce系统实现之间的细节差异也是不容忽视的。“四人组”书中的设计模式是使用C++语言编写的,但是开发者会发现这些概念在其他现代编程语言(如Ruby和Python)中也适用。本书中的设计模式也可以应用在Hadoop之外的其他MapReduce系统中。你可以参考本书中的示例代码来完成你的代码开发工作。

相关文章
|
分布式计算 Hadoop 设计模式
《MapReduce设计模式》一导读
欢迎阅读《MapReduce设计模式》!这是一本既独特又熟悉的书。首先,这显然是一本关于设计模式的书,为大家提供解决问题的模板或通用指南。我们看了一些以前出版的有关设计模式的书,特别是Gamma等人(1995)编著的《Design Patterns: Elements of Reusable Object-Oriented Software》(通常被成为“四人组”书),从中汲取了灵感。
1541 0
|
存储 SQL 分布式计算
MapReduce设计模式学习
一:概要模式 1:简介 概要设计模式更接近简单的MR应用,因为基于键将数据分组是MR范型的核心功能,所有的键将被分组汇入reducer中 本章涉及的概要模式有数值概要(numerical summarization),倒排索引(inverted index),计数器计数(counting with counter)2:概要设计模式包含       2.
993 0
|
26天前
|
设计模式 安全 Java
Kotlin教程笔记(51) - 改良设计模式 - 构建者模式
Kotlin教程笔记(51) - 改良设计模式 - 构建者模式
|
3月前
|
设计模式 数据库连接 PHP
PHP中的设计模式:提升代码的可维护性与扩展性在软件开发过程中,设计模式是开发者们经常用到的工具之一。它们提供了经过验证的解决方案,可以帮助我们解决常见的软件设计问题。本文将介绍PHP中常用的设计模式,以及如何利用这些模式来提高代码的可维护性和扩展性。我们将从基础的设计模式入手,逐步深入到更复杂的应用场景。通过实际案例分析,读者可以更好地理解如何在PHP开发中应用这些设计模式,从而写出更加高效、灵活和易于维护的代码。
本文探讨了PHP中常用的设计模式及其在实际项目中的应用。内容涵盖设计模式的基本概念、分类和具体使用场景,重点介绍了单例模式、工厂模式和观察者模式等常见模式。通过具体的代码示例,展示了如何在PHP项目中有效利用设计模式来提升代码的可维护性和扩展性。文章还讨论了设计模式的选择原则和注意事项,帮助开发者在不同情境下做出最佳决策。
|
29天前
|
设计模式 开发者 Python
Python编程中的设计模式:工厂方法模式###
本文深入浅出地探讨了Python编程中的一种重要设计模式——工厂方法模式。通过具体案例和代码示例,我们将了解工厂方法模式的定义、应用场景、实现步骤以及其优势与潜在缺点。无论你是Python新手还是有经验的开发者,都能从本文中获得关于如何在实际项目中有效应用工厂方法模式的启发。 ###