《深入理解Hadoop(原书第2版)》——1.3大数据的编程模型

1.3大数据的编程模型

大数据的编程模型主要有以下几种类型:

  • 大规模并行处理(Massively Parallel Processing,MPP)数据库系统:EMC公司的Greenplum系统和IBM公司的Netezza系统就是这样的系统。
  • 内存数据库系统:Oracle公司的Exalytics和SAP公司的HANA正是此类系统。
  • MapReduce系统:这样的系统包括所有大数据系统中最广泛使用的Hadoop。
  • 整体同步并行(Bulk synchronous parallel,BSP)系统:Apache HAMA和Apache Giraph就是这样的系统。

1.3.1大规模并行处理数据库系统

大规模并行处理(MPP)数据库系统的核心思想是把数据按照某一列或者某一组列的值,按照某种形式进行划分,以分别处理。举个例子,上文例子中计算2000年的各州总销售额,并按州排序,我们可以按照各个州来划分数据,这样使用固定的计算节点来处理固定州的相应数据。这样的数据分割方法使得各个计算节点都可以计算出对应州的2000年总销售额。

这样的系统有个明显的缺陷。你需要在算法设计的时候就决定数据如何划分。而划分的准则通常由底层的用例来决定。如此一来,这就不适合临时的数据查询需求。某些数据的查询,由于数据在各个计算节点的划分合理,从而执行速度很快。而有些数据查询,由于数据在各个计算节点的划分不合理(与数据的访问方式不一致)导致其执行速度异常缓慢,为了得到计算结果,系统需要通过网络来进行大量的数据交换。

为了解决这个缺陷,大规模并行处理数据库系统经常采用的办法是把数据存储多份,并按照不同的准则来进行划分。根据不同的查询需求,选择不同的数据集。

下面列出了MPP 编程模型的几个要点,这些要点符合前文中给出的最初的大数据系统定义(想一下按州排序统计计算销售总额的例子):

  • 数据按州划分,分配到不同的计算节点。
  • 各个计算节点都拥有程序所需的执行库,并对分配到该节点的数据进行数据处理。
  • 每个计算节点读取本地数据。一个例外是你未考虑数据的分布情况就进行了数据查询,这时,计算任务会通过网络从其他节点来获取数据。
  • 每个任务都是顺序读取数据。所需要的所有数据都存放在磁盘上的相邻位置,并且被一次性地读取,并在内存中应用过滤条件(year=2000)。

1.3.2内存数据库系统

从系统运行的角度来看,内存数据库系统类似于MPP系统。它们的不同之处在于,内存数据库系统的每个计算节点拥有巨大容量的内存,并且大部分数据会被预先加载到内存中。SAP 公司的HANA系统就是按照这个原则来运行的。另外一些系统,比如Oracle公司的Exalytics系统,利用特殊的硬件,一个应用程序就可以管理执行多个主机。就本质来说,内存数据库系统就像是带有SQL接口的内存MPP数据库系统。

内存数据库系统的商业版本中有个重要的缺点是,其中内置了大量的硬件和软件。诚然,这些系统拥有专用设备和特定硬件,但这通常费用高昂。如果因为这些内存数据库系统准备的商用硬件来扩容内存数据库系统集群是非常方便的。举个例子,假设一个商用服务器有25GB RAM。我们要搭建1TB容量的内存数据库就需要40台以上的主机(考虑到还有其他业务需要使用这个服务器)。1TB也未必够用,但是我们的集群节点数已经达到了40个。

下面列出了内存数据库系统编程模型的几个要点特征,这些特征同样符合前文中给出的最初的大数据系统定义:

  • 如前面的例子中所述,数据按州划分。各个节点把数据加载到内存中。
  • 各个计算节点都拥有程序所需的执行库,并对分配到该节点的数据进行数据处理。
  • 每个计算节点读取本地数据。一个例外是你未考虑数据的分配情况就进行数据查询请求,这时,计算任务会从其他节点来获取所需数据。
  • 由于数据是被缓存到内存的,所以除了最初的数据加载入内存的过程外,这里不适用顺序读取数据的特性。

1.3.3MapReduce系统

MapReduce编程范型是本书所要讲述内容的核心基础重点。截至目前,MapReduce框架已被广泛的用于大数据的处理过程(four methods)。Hadoop系统对MapReduce框架的实现具有如下几个重要特征:

  • 使用商用级别的硬件。需要注意的是这个商用硬件的要求不是指笔记本或者台式机。尽管计算集群是商用级别,但是我们可以使用常用的硬件设备来搭建。
  • 无需事先定义数据划分准则来把数据分配到各个计算节点。
  • 用户仅需要定义两个独立的处理过程:Map和Reduce。

本书会重点深入地讲解MapReduce框架。总体上说,MapReduce框架需要用户定义一个Map处理和Reduce处理。当Hadoop系统实现MapReduce时,数据常常按照64~128MB数据块大小进行分发,每个数据块会被复制两次(Hadoop系统数据备份默认参数为3)。在计算每个州的2000年的总销售额,并按照州排序的例子中,所有的销售数据都会分割为大量的数据块(大小64~128MB),加载到Hadoop分布式文件系统(Hadoop Distributed File System,HDFS)。MapReduce程序启动的时候,Hadoop系统会把程序运行依赖库(包括用户自定义Map处理和Reduce处理)拷贝到各个计算节点。

各个计算节点按照调度执行Map任务,该Map任务会读取包含销售数据的数据块。每个Mapper(各自节点上的)会逐条读取数据块中的数据记录(Record),并过滤掉无用数据,仅保留2000年的数据。对应所输入的数据记录,Mapper会输出一条包含键/值对(key/value pair)的数据记录。如果读入的销售数据是2000年的,那么其键(key)就是州,其值(value)就是从读入数据记录中获取的销售数字。

最后,Reducer会从每个Mapper的输出中获取那些键/值对,运行Reducer的数量是可以配置的。各个键会被发送到特定Reducer进行处理,确保相同的键仅被相同的Reducer处理。各个Reducer把接受的键/值对中的销售数字相加。Reducer接受的数据格式是键(州)和这个键对应的销售数字列表(销售记录是2000年的)。输出结果写回HDFS中。客户端从HDFS上读取结果数据后,对结果按州排序。最后这个步骤也可以交给Reducer完成,因为Reducer在接受它要处理的键时,这些键是已经排序完成的。本例中,为了达到按州排序的目的,我们需要把Reducer的运行数量严格限制为1。可是由于Mapper和Reducer之间传输数据会引起网络I/O,这样可能会导致网络拥塞。本书的后面部分会详细地讨论这个问题。

下面列出了MapReduce编程模型的几个要点特征,这些特征同样符合前文中给出的大数据系统定义:

  • 数据以较大的数据块的形式存放在HDFS上。HDFS是一个分布式文件系统,数据块分散存储到各个节点,数据块是有冗余的。
  • 程序运行依赖库,包括Map和Reduce代码被复制发送到所有的任务节点。
  • 每个计算节点仅读取节点本地数据。集群中所有节点运行Mapper,从节点本地读取数据到Mapper中(大多数情况下,哪个节点的Mapper读取哪个节点磁盘的数据块,这是由调度程序管理决定的。调度程序可能会分配某个节点的Mapper任务来处理远程节点的数据块,以保持集群中的所有节点负载均衡)。
  • 数据被每个节点的任务以数据块的方式一次性顺序读取(数据块大小一般为64~128MB)。

MapReduce编程范型的一个重要不足是它不适合迭代算法。大量的数据科学计算算法很自然就要使用迭代,并最终收敛于一个解。当我们使用这样的算法的时候,MapReduce编程范型需要我们把每个迭代过程放到相互独立的MapReduce任务中去。每次迭代产生的数据输出作为下次迭代计算的数据输入。但是,由于MapReduce任务每次都要从持久性存储中重新读取数据,所以每次迭代产生的结果需要存到持久性存储中供下次迭代计算使用。这个过程导致了不必要的I/O操作,并对系统吞吐量造成重大影响。这样的问题在下面即将讲到的关于BSP类型系统的讲解中,也有论述。

1.3.4整体同步并行系统

整体同步并行(BSP)系统的运行过程跟MapReduce过程非常相似。与MapReduce程序在它的处理循环结束后即可终止不同的是,BSP系统程序执行由一系列的超步(processes)(这个与Map处理的处理过程类似)组成,这些超步保持栅栏同步(synchronize on a barrier),向主节点发送数据并进行相关的信息交换(exchange relevant information)。每当一次迭代执行完毕,主节点会通知每个数据处理节点进行下一次迭代。

间隔通信是在并行计算处理中经常提到的概念。间隔通信指的是许多线程在分别执行各自的任务,这些线程在运行之前需要协商出一个检查点。这种模式是非常必要的,所有的处理线程在到达那个检查点之前就要决定是继续执行剩下的计算任务还是终止它们(并行的或者顺序的),以便所有线程确认何时完成数据处理任务。间隔同步(Synchronizing on a barrier)的方法在我们的日常生活中就经常使用。例如,一起拼车的伙伴们会常常商定在某一个特定的地方等车。整个等待过程的长短,取决于那个最晚到达该指定等车位置的人何时到达。

在BSP方法执行过程中,允许每个类似Map的处理过程缓存上次迭代的结果,如此即可大幅提高整个数据处理过程的吞吐量。我们会在本书第15章中讲解BSP系统。涉及了一些相关的迭代算法。

时间: 2024-07-28 18:38:01

《深入理解Hadoop(原书第2版)》——1.3大数据的编程模型的相关文章

《JavaScript和jQuery实战手册(原书第2版)》——1.1节编程简介

1.1 编程简介对于很多人来说,"计算机编程"使他们脑海里浮现出这样的情景:拥有超常智慧的家伙在键盘前弯腰而坐,连续数小时飞快地敲击着几乎难以理解的.含混不清的语言.确实,某些编程工作就是那样的.编程可能像是非凡之人表演的复杂魔术.虽然很多编程概念很难掌握,但是,在编程语言中,JavaScript对于非程序员来说算是相对友好的.然而,JavaScript比HTML或CSS都要复杂,并且,对于Web设计者来说,编程往往是一个陌生的世界.因此,本书的目标之一是帮助你像一个程序员一样思考.在

《深入理解Hadoop(原书第2版)》——导读

前 言 Hadoop已经进入Apache社区发展五年多了,使用Hadoop系统进行开发的工作仍然富于挑战但收获丰厚.本书第1版在若干年前就已经出版了,在这期间,Hadoop系统已经被越来越多的企业使用,自身也得到了飞速发展. Hadoop2.0基于YARN框架做了全新升级,重写了Hadoop系统的底层平台.本书从Hadoop使用者的角度出发讲解Hadoop的实现原理,浓缩了Hadoop软件系统的精华.作为作者,我们希望可以深入到源代码级别来理解Hadoop的运行原理及其背后的设计目标,渴望与你分

《深入理解Hadoop(原书第2版)》—1.7 本章小结

1.7本章小结 大数据渐成主流,其背后的两大推动力就是开源的Hadoop系统和云计算时代的到来.两者的发展使得以较低成本引入大规模大数据处理方法来解决业务问题成为可能.Hadoop系统是所有大数据解决方案的核心.尽管其他如MPP 或者 BSP 这样的编程模型,可处理一些特殊的问题,但是它们都还是要以某种形式依赖于Hadoop系统,尤其在数据量达到数T之巨时.掌握Hadoop系统,会让开发者更加高效地使用其他编程模型.本书的目的也正在于此. 下面的章节会讲解Hadoop系统的使用,以及使用Hado

《机器学习与R语言(原书第2版)》一2.3 探索和理解数据

本节书摘来自华章出版社<机器学习与R语言(原书第2版)>一书中的第2章,第2.3节,美] 布雷特·兰茨(Brett Lantz) 著,李洪成 许金炜 李舰 译更多章节内容可以访问"华章计算机"公众号查看. 2.3 探索和理解数据 在收集数据并把它们载入R数据结构以后,机器学习的下一个步骤是仔细检查数据.在这个步骤中,你将开始探索数据的特征和案例,并且找到数据的独特之处.你对数据的理解越深刻,你将会更好地让机器学习模型匹配你的学习问题. 理解数据探索的最好方法就是通过例子.在

《机器学习与R语言(原书第2版)》一 第2章 数据的管理和理解

本节书摘来自华章出版社<机器学习与R语言(原书第2版)>一书中的第2章,第2.1节,美] 布雷特·兰茨(Brett Lantz) 著,李洪成 许金炜 李舰 译更多章节内容可以访问"华章计算机"公众号查看. 第2章 数据的管理和理解 任何机器学习项目初期的核心部分都是与管理和理解所收集的数据有关的.尽管你可能发现这些工作不像建立和部署模型那样令人有成就感(建立和部署模型阶段就开始看到了劳动的成果),但是忽视这些重要的准备工作是不明智的.任何学习算法的好坏取决于输入数据的好坏.

Java核心技术 卷Ⅰ 基础知识(原书第10版)

Java核心技术系列 Java核心技术 卷Ⅰ 基础知识 (原书第10版) Core Java Volume I-Fundamentals (10th Edition) [美] 凯S.霍斯特曼(Cay S. Horstmann) 著 周立新 陈 波 叶乃文 邝劲筠 杜永萍 译 图书在版编目(CIP)数据 Java核心技术 卷Ⅰ 基础知识(原书第10版) / (美)凯S. 霍斯特曼(Cay S. Horstmann)著:周立新等译. -北京:机械工业出版社,2016.8 (Java核心技术系列) 书

ROS机器人程序设计(原书第2版).

机器人设计与制作系列 ROS机器人程序设计 (原书第2版) Learning ROS for Robotics Programming,Second Edition 恩里克·费尔南德斯(Enrique Fernández) 路易斯·桑切斯·克雷斯波(Luis Sánchez Crespo) 阿尼尔·马哈塔尼(Anil Mahtani) 亚伦·马丁内斯(Aaron Martinez) 著 刘锦涛 张瑞雷 等译 图书在版编目(CIP)数据 ROS机器人程序设计(原书第2版) / (西)恩里克·费尔南

《Java核心技术 卷Ⅱ 高级特性(原书第10版)》一导读

前 言 致读者 本书是按照Java SE 8完全更新后的<Java核心技术 卷Ⅱ 高级特性(原书第10版)>.卷Ⅰ主要介绍了Java语言的一些关键特性:而本卷主要介绍编程人员进行专业软件开发时需要了解的高级主题.因此,与本书卷Ⅰ和之前的版本一样,我们仍将本书定位于用Java技术进行实际项目开发的编程人员. 编写任何一本书籍都难免会有一些错误或不准确的地方.我们非常乐意听到读者的意见.当然,我们更希望对本书问题的报告只听到一次.为此,我们创建了一个FAQ.bug修正以及应急方案的网站http:/

《JavaScript和jQuery实战手册(原书第3版)》---第1章 编写第一个JavaScript程序 1.1 编程简介

本节书摘来自华章出版社<JavaScript和jQuery实战手册(原书第3版)>一书中的第1章,第1.1节,作者David Sawyer McFarland,姚待艳 李占宣 译,更多章节内容可以访问"华章计算机"公众号查看. 第1章 编写第一个JavaScript程序 HTML自身并没有太多智能:它不能做数学运算,不能判断某人是否正确填写了一个表单,而且不能根据Web访问者的交互来做出判断.基本上,HTML让人们阅读文本.观看图片或视频,并且单击链接转向拥有更多文本.图片