第十一章·大数据技术与实践

11.1大数据概述
11.1.1大数据产生的背景
家阿尔文,托夫勒便在《第三次浪潮》一书中, 将大数据比作
第三次浪潮的华彩乐章”。
在传统数据处理过程中,单个计算机的性能往往很强,可靠性高(但是造价也很高),用
一台计算机即可处理完所需数据。 当今世界,数据日益增长且增长速度日益加快这里听说的歌根包括人们在更深人了解自然的过程中所需要的数察以及人类自己在名种社会活动中生的海量数据,特别是后者,由于计算机在各个领域的使用越来越广泛,越来越多的人类活动可以GPS位置记录、医学领城中的手术详细记录、社会保障领域的各种记录等都是这类数据。数据已经呈爆炸式增长,足以引发全世界的一次技术变革,于是,”第三次浪瓶”一一大数据技术应运而生。
11.1.2大数据的定义
对于“大数据”(Big data)研究机构Gartner给出了这样的定义。“大数据”是需要新处理模式才能具有更强的决策力、洞察发现力和流程优化能力来适应海量、高增长率和多样化的信息资产。

麦肯锡全球研究所给出的定义是:一种规模大到在获取、存储、管理、分析方面大大超出了传统数据库软件工具能力范围的数据集合,具有海量的数据规模、快速的数据流转、多样的数据类型和价值密度低四大特征。

大数据技术的战略意义不在于掌握庞大的数据信息,而在于对这些含有意义的数据进行专业化处理。换而言之,如果把大数据比作一种产业,那么这种产业实现盈利的关键,在于提高对数据的“加工能力”,通过“加工”实现数据的“增值”。

从技术上看,大数据与云计算的关系就像一枚硬币的正反面一样密不可分。大数据必然无法用单台的计算机进行处理,必须采用分布式架构。它的特色在于对海量数据进行分布式数据挖掘。但它必须依托云计算的分布式处理、分布式数据库和云存储、虚拟化技术。

随着云时代的来临,大数据(Big data)也吸引了越来越多的关注。分析师团队认为,大数据(Big data)通常用来形容一个公司创造的大量非结构化数据和半结构化数据,这些数据在下载到关系型数据库用于分析时会花费过多时间和金钱。大数据分析常和云计算联系到一起,因为实时的大型数据集分析需要像MapReduce一样的框架来向数十、数百或甚至数千的电脑分配工作。
大数据需要特殊的技术,以有效地处理大量的容忍经过时间内的数据。适用于大数据的技术,包括大规模并行处理(MPP)数据库、数据挖掘、分布式文件系统、分布式数据库、云计算平台、互联网和可扩展的存储系统。
最小的基本单位是bit,按顺序给出所有单位:bit、Byte、KB、MB、GB、TB、PB、EB、ZB、YB、BB、NB、DB。
它们按照进率1024(2的十次方)来计算:
1 Byte =8 bit
1 KB = 1,024 Bytes = 8192 bit
1 MB = 1,024 KB = 1,048,576 Bytes
1 GB = 1,024 MB = 1,048,576 KB
1 TB = 1,024 GB = 1,048,576 MB
1 PB = 1,024 TB = 1,048,576 GB
1 EB = 1,024 PB = 1,048,576 TB
1 ZB = 1,024 EB = 1,048,576 PB
1 YB = 1,024 ZB = 1,048,576 EB
1 BB = 1,024 YB = 1,048,576 ZB
1 NB = 1,024 BB = 1,048,576 YB
1 DB = 1,024 NB = 1,048,576 BB
全称:
1 Bit(比特) =Binary Digit
8Bits = 1 Byte(字节)
1,000 Bytes = 1 Kilobyte
1,000Kilobytes = 1 Megabyte
1,000 Megabytes = 1 Gigabyte
1,000 Gigabytes = 1Terabyte
1,000 Terabytes = 1 Petabyte
1,000 Petabytes = 1 Exabyte
1,000Exabytes = 1 Zettabyte
1,000 Zettabytes = 1 Yottabyte
1,000 Yottabytes = 1Brontobyte
1,000 Brontobytes = 1 Geopbyte
11.1.3大数据的4V特征
Volume:体量大
Variety:样式多
Velocity:速度快
Valueless:价值密度低
11.2大数据存储平台
11.2.1HDFS
1.HDFS简介
Hadoop分布式文件系统(HDFS)是指被设计成适合运行在通用硬件(commodity hardware)上的分布式文件系统(Distributed File System)。它和现有的分布式文件系统有很多共同点。但同时,它和其他的分布式文件系统的区别也是很明显的。HDFS是一个高度容错性的系统,适合部署在廉价的机器上。HDFS能提供高吞吐量的数据访问,非常适合大规模数据集上的应用。HDFS放宽了一部分POSIX约束,来实现流式读取文件系统数据的目的。HDFS在最开始是作为Apache Nutch搜索引擎项目的基础架构而开发的。HDFS是Apache Hadoop Core项目的一部分。HDFS有着高容错性(fault-tolerant)的特点,并且设计用来部署在低廉的(low-cost)硬件上。而且它提供高吞吐量(high throughput)来访问应用程序的数据,适合那些有着超大数据集(large data set)的应用程序。HDFS放宽了(relax)POSIX的要求(requirements)这样可以实现流的形式访问(streaming access)文件系统中的数据。
2.HDFS体系结构
1.分布式文件系统存储副本的方式
    1).客户端负责写所有副本。例如每个block要存3个副本,客户端要将3个副本都存到DataNode上才算成功
    2).客户端是负责写一个副本。剩下的副本由NameNode负责,DataNode向其他DataNode复制(形成一个管道),复制和客户端写block是异步的
  2.具体的切分block由客户端负责
  1.NameNode元数据管理机制
  1.客户端上传文件时,NN首先往edits.log文件中记录元数据操作日志
  2.客户端开始上传文件,完成后返回成功信息给NN,NN就在内存中写入这次上传操作新产生的元数据信息
  3.每当editor.log写满时,需要将这一段时间新的元数据信息刷到fsimage中去(将edits.log中的数据域fsimage做合并)

       2.DataNode的作用

1.提供真实文件数据的存储服务。
  2.文件块(block):最基本的存储单位。对于文件内容而言,一个文件的长度大小是size,那么从文件的0偏移开始,按照固定的大小,顺序对文件进行划分并编号,划分好的每一个块称一个Block。HDFS默认Block大小是128MB,以一个256MB文件,共有256/128=2个Block.
dfs.block.size
  3.不同于普通文件系统的是,HDFS中,如果一个文件小于一个数据块的大小,并不占用整个数据块存储空间
  4.Replication。多复本。默认是三个。

3.HDFS副本防止策略
4.HDFS数据块
与一般文件系统一样,HDFS也有块(block)的概念,HDFS上的文件也被划分为块大小的多个分块作为独立的存储单元。与通常的磁盘文件系统不同的是:HDFS中小于一个块大小的文件不会占据整个块的空间(当一个1MB的文件存储在一个128MB的块中时,文件只使用1MB的磁盘空间,而不是128MB)设置数据块的好处:(1)一个文件的大小可以大于集群任意节点磁盘的容量(2)容易对数据进行备份,提高容错能力(3)使用抽象块概念而非整个文件作为存储单元,大大简化存储子系统的设计
5.HDFS用户接口
6.HDFS平台的搭建
11.2.1HBase
1.HBase简介
HBase是一个分布式的、面向列的开源数据库,该技术来源于 Fay Chang 所撰写的Google论文“Bigtable:一个结构化数据的分布式存储系统”。就像Bigtable利用了Google文件系统(File System)所提供的分布式数据存储一样,HBase在Hadoop之上提供了类似于Bigtable的能力。HBase是Apache的Hadoop项目的子项目。HBase不同于一般的关系数据库,它是一个适合于非结构化数据存储的数据库。另一个不同的是HBase基于列的而不是基于行的模式。
2.HBase的特性
1)海量存储Hbase适合存储PB级别的海量数据,在PB级别的数据以及采用廉价PC存储的情况下,能在几十到百毫秒内返回数据。这与Hbase的极易扩展性息息相关。正式因为Hbase良好的扩展性,才为海量数据的存储提供了便利。
2)列式存储这里的列式存储其实说的是列族存储,Hbase是根据列族来存储数据的。列族下面可以有非常多的列,列族在创建表的时候就必须指定。
)极易扩展Hbase的扩展性主要体现在两个方面,一个是基于上层处理能力(RegionServer)的扩展,一个是基于存储的扩展(HDFS)。
通过横向添加RegionSever的机器,进行水平扩展,提升Hbase上层的处理能力,提升Hbsae服务更多Region的能力。备注:RegionServer的作用是管理region、承接业务的访问,这个后面会详细的介绍通过横向添加Datanode的机器,进行存储层扩容,提升Hbase的数据存储能力和提升后端存储的读写能力。
4)高并发由于目前大部分使用Hbase的架构,都是采用的廉价PC,因此单个IO的延迟其实并不小,一般在几十到上百ms之间。这里说的高并发,主要是在并发的情况下,Hbase的单个IO延迟下降并不多。能获得高并发、低延迟的服务。
5)稀疏稀疏主要是针对Hbase列的灵活性,在列族中,你可以指定任意多的列,在列数据为空的情况下,是不会占用存储空间的。
3.HBase的体系架构
1**)Client**
Client包含了访问Hbase的接口,另外Client还维护了对应的cache来加速Hbase的访问,比如cache的.META.元数据的信息。
2**)Zookeeper**
HBase通过Zookeeper来做master的高可用、RegionServer的监控、元数据的入口以及集群配置的维护等工作。具体工作如下:
通过Zoopkeeper来保证集群中只有1个master在运行,如果master异常,会通过竞争机制产生新的master提供服务
通过Zoopkeeper来监控RegionServer的状态,当RegionSevrer有异常的时候,通过回调的形式通知Master RegionServer上下线的信息
通过Zoopkeeper存储元数据的统一入口地址
3**)Hmaster**
master节点的主要职责如下: 为RegionServer分配Region 维护整个集群的负载均衡 维护集群的元数据信息 发现失效的Region,并将失效的Region分配到正常的RegionServer上 当RegionSever失效的时候,协调对应Hlog的拆分
4**)HregionServer**
HregionServer直接对接用户的读写请求,是真正的“干活”的节点。它的功能概括如下: 管理master为其分配的Region 处理来自客户端的读写请求 负责和底层HDFS的交互,存储数据到HDFS 负责Region变大以后的拆分 负责Storefile的合并工作
5**)HDFS**
HDFS为Hbase提供最终的底层数据存储服务,同时为HBase提供高可用(Hlog存储在HDFS)的支持,具体功能概括如下: 提供元数据和表数据的底层分布式存储服务 数据多副本,保证的高可靠和高可用性

其他组件:
1.Write-Ahead logs(简称WAL)
HBase的修改记录,当对HBase读写数据的时候,数据不是直接写进磁盘,它会在内存中保留一段时间(时间以及数据量阈值可以设定)。但把数据保存在内存中可能有更高的概率引起数据丢失,为了解决这个问题,数据会先写在一个叫做Write-Ahead logfile的文件中,然后再写入内存中。所以在系统出现故障的时候,数据可以通过这个日志文件重建。
注:实现WAL的类叫做HLog
参考:https://blog.csdn.net/varyall/article/details/80451897
2.Region(相当于一张表)
Hbase表的分片,HBase表会根据RowKey值被切分成不同的region存储在RegionServer中,在一个RegionServer中可以有多个不同的region。
3.Store(对应一个列簇)
HFile存储在Store中,一个Store对应HBase表中的一个列族。
4.MemStore
顾名思义,就是内存存储,位于内存中,用来保存当前的数据操作,所以当数据保存在WAL中之后,RegsionServer会在内存中存储键值对。
5.HFile
这是在磁盘上保存原始数据的实际的物理文件,是实际的存储文件。StoreFile是以Hfile的形式存储在HDFS的。
4.HBase数据模型
5.HBase支持的数据操作
6.HBase用户接口
7.HBase环境搭建
11.2.3Cassandra
1.Cassandra简介
Cassandra是一套开源分布式NoSQL数据库系统。它最初由Facebook开发,用于储存收件箱等简单格式数据,集GoogleBigTable的数据模型与Amazon Dynamo的完全分布式的架构于一身Facebook于2008将 Cassandra 开源,此后,由于Cassandra良好的可扩展性,被Digg、Twitter等知名Web 2.0网站所采纳,成为了一种流行的分布式结构化数据存储方案。Cassandra是一个混合型的非关系的数据库,类似于Google的BigTable。其主要功能比Dynamo (分布式的Key-Value存储系统)更丰富,但支持度却不如文档存储MongoDB(介于关系数据库和非关系数据库之间的开源产品,是非关系数据库当中功能最丰富,最像关系数据库的。支持的数据结构非常松散,是类似json的bjson格式,因此可以存储比较复杂的数据类型)。Cassandra最初由Facebook开发,后转变成了开源项目。它是一个网络社交云计算方面理想的数据库。以Amazon专有的完全分布式的Dynamo为基础,结合了Google BigTable基于列族(Column Family)的数据模型。P2P去中心化的存储。很多方面都可以称之为Dynamo 2.0。
2.Cassandra数据模型
Cassandra的数据模型可以理解为嵌套的Map,在Cassandra中数据类型主要有四种:Column,SuperColumn,ColumnFamily,Keyspace。
3.分区策略
4.副本储存
5.存储机制
6.一致性保证
7.Cassandra的环境搭建
11.2.4Redis
1.Redis简介
Redis(全称:Remote Dictionary Server 远程字典服务)是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。从2010年3月15日起,Redis的开发工作由VMware主持。从2013年5月开始,Redis的开发由Pivotal赞助。
redis是一个key-value存储系统。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash(哈希类型)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。在此基础上,redis支持各种不同方式的排序。与memcached一样,为了保证效率,数据都是缓存在内存中。区别的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。
Redis 是一个高性能的key-value数据库。 redis的出现,很大程度补偿了memcached这类key/value存储的不足,在部 分场合可以对关系数据库起到很好的补充作用。它提供了Java,C/C++,C#,PHP,JavaScript,Perl,Object-C,Python,Ruby,Erlang等客户端,使用很方便。

Redis支持主从同步。数据可以从主服务器向任意数量的从服务器上同步,从服务器可以是关联其他从服务器的主服务器。这使得Redis可执行单层树复制。存盘可以有意无意的对数据进行写操作。由于完全实现了发布/订阅机制,使得从数据库在任何地方同步树时,可订阅一个频道并接收主服务器完整的消息发布记录。同步对读取操作的可扩展性和数据冗余很有帮助。
redis的官网地址,非常好记,是redis.io。(域名后缀io属于国家域名,是british Indian Ocean territory,即英属印度洋领地)
目前,Vmware在资助着redis项目的开发和维护。
2.REdis的数据模型
3.REDis的存储机制
4.Redis的分布模式
5.Redis的数据操作
6.Redis的平台搭建
第一步下载安装
第二步启动服务器
第三步客户端访问
第四步关闭服务器
11.2.5MongDB
1.MongDB简介
MongoDB是一个基于分布式文件存储的数据库。由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。它支持的数据结构非常松散,是类似json的bson格式,因此可以存储比较复杂的数据类型。Mongo最大的特点是它支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。
它的特点是高性能、易部署、易使用,存储数据非常方便。主要功能特性有:
*面向集合存储,易存储对象类型的数据。

mongodb特点
*模式自由。
*支持动态查询。
*支持完全索引,包含内部对象。
*支持查询。
*支持复制和故障恢复。
*使用高效的二进制数据存储,包括大型对象(如视频等)。
*自动处理碎片,以支持云计算层次的扩展性。
*支持 Golang,RUBY,PYTHON,JAVA,C++,PHP,C#等多种语言。
*文件存储格式为BSON(一种JSON的扩展)。
*可通过网络访问。
2.mongodb的功能及用范围

适用场景
MongoDB 的主要目标是在键/值存储方式(提供了高性能和高度伸缩性)和传统的RDBMS 系统(具有丰富的功能)之间架起一座桥梁,它集两者的优势于一身。根据官方网站的描述,Mongo 适用于以下场景。
● 网站数据:Mongo 非常适合实时的插入,更新与查询,并具备网站实时数据存储所需的复制及高度伸缩性。
● 缓存:由于性能很高,Mongo 也适合作为信息基础设施的缓存层。在系统重启之后,由Mongo 搭建的持久化缓存层可以避免下层的数据源过载。
● 大尺寸、低价值的数据:使用传统的关系型数据库存储一些数据时可能会比较昂贵,在此之前,很多时候程序员往往会选择传统的文件进行存储。
● 高伸缩性的场景:Mongo 非常适合由数十或数百台服务器组成的数据库,Mongo 的路线图中已经包含对MapReduce 引擎的内置支持。
● 用于对象及JSON 数据的存储:Mongo 的BSON 数据格式非常适合文档化格式的存储及查询。
MongoDB 的使用也会有一些限制,例如,它不适合于以下几个地方。
● 高度事务性的系统:例如,银行或会计系统。传统的关系型数据库目前还是更适用于需要大量原子性复杂事务的应用程序。
● 传统的商业智能应用:针对特定问题的BI 数据库会产生高度优化的查询方式。对于此类应用,数据仓库可能是更合适的选择。
● 需要SQL 的问题。
3.MongoDB的数据模型
一个MongoDB 实例可以包含一组数据库,一个DataBase 可以包含一组Collection(集合),一个集合可以包含一组Document(文档)。一个Document包含一组field(字段),每一个字段都是一个key/value pair。
key: 必须为字符串类型。
value:可以包含如下类型。
● 基本类型,例如,string,int,float,timestamp,binary 等类型。
● 一个document。
● 数组类型。
4.MongoDB的语法
5.MongoDB平台搭建
11.3大数据计算模式
11.3.1PRAM
PRAM(Parallel Random Access Machine)模型是多指令流多数据流(MIMD)并行机中的一种具有共享存储的模型。它假设有一个无限大容量的共享存储器,并且有多个功能相同的处理器,在任意时刻处理器可以访问共享存储单元。根据是否可以同时读写,它又分为以下三类:PRAM-EREW,PRAM-CREW,PRAM-CRCW(其中C代表Concurrent,意为允许并发操作,E-代表Exclusive,意味排斥并发操作)。在PRAM中有一个同步时钟,所有的操作都是同步进行的。
1.PRAM的分类
EREW PRAM模型。每次只允许一台处理机读或写某一共享单元内容。
CREW PRAM模型。每次可允许多台处理机同时读同一个共享单元内容,但每次只允许一台处理机向某个共享单元写内容。
ERCW PRAM模型。 每次可允许多台处理机同时写同一个共享单元内容,但每次只允许一台处理机向某个共享单元读内容。
CRCW PRAM模型。每次允许多台处理机同时读和同时写同一共享单元内容。 该模型又可进一步分为:
①Common CRCW PRAM模型。每次允许多台处理机写相同值到某一共享单元中。
②Arbitrary CRCW PRAM 模型。每次如果有多台处理机写值到某一共享单元中,则任选一合作为优胜者,它的值写到该共享单元中。
③Priority CRCW PRAM 模型。每次如果有多台处理机写值到某一共享单元中,则选处理机编号最小者作为优胜者,它的值写到该共享单元中。
2.PRAM模型的优点
PRAM模型(asynchronous parallel random access machine)指的是异步的PRAM模型,A代表Asynchrinize。APRAM是一种MIMD模型。在有的文献上,APRAM也称作分相PRAM(Phased PRAM)。
APRAM最重要的特点是处理器均工作在异步模式下,即处理器有自己的控制器,局部存储器以及局部程序。处理器间的同步问题通过添加同步路障(Synchronization Barrier)来解决。这样,计算被分割成一些列的相(Phase),每一相类不允许两个处理器去访问同一存储单元。而局部程序的最后一条指令一定是同步指令。显然,同步路障的时间是由最后一个到达的处理器决定的,也就是说,先执行完局部程序的处理器必须等到执行的最慢的那个处理器来一起完成同步路障。
3.PRAM模型的缺点
RAM模型优缺点编辑缺点是不现实,首先容量无限大的存储器是不存在的,而且由于各方面的原因,全局访存通常要比预想的慢
4.PRAM模型推广
11.3.2BSP
1.BSP模型的组成
BSP模型图需要做以下解释:
1.Processors指的是并行计算进程,它对应到集群中的多个结点,每个结点可以有多个Processor;
2.LocalComputation就是单个Processor的计算,每个Processor都会切分一些结点作计算;
3.Communication指的是Processor之间的通讯。接触的图计算往往需要做些递归或是使用全局变量,在BSP模型中,对图结点的访问分布到了不同的Processor中,并且往往哪怕是关系紧密具有局部聚类特点的结点也未必会分布到同个Processor或同一个集群结点上,所有需要用到的数据都需要通过Processor之间的消息传递来实现同步;4.BarrierSynchronization又叫障碍同步或栅栏同步。每一次同步也是一个超步的完成和下一个超步的开始;
5.Superstep超步,这是BSP的一次计算迭代,拿图的广度优先遍历来举例,从起始结点每往前步进一层对应一个超步。
6.程序该什么时候结束呢?这个其实是程序自己控制,一个作业可以选出一个Proceessor作为Master,每个Processor每完成一个Superstep都向Master反馈完成情况,Master在N个Superstep之后发现所有Processor都没有计算可做了,便通知所有Processor结束并退出任务。
2.BSP的优点
BSP模型是个分布存储的MIMD计算模型,其特点是:
  ● 它将处理器和路由器分开,强调了计算任务和通信任务的分开,而路由器仅仅完成点到点的消息传递,不提供组合、复制和广播等功能,这样做既掩盖具体的互连网络拓扑,又简化了通信协议;
  ● 采用障碍同步的方式以硬件实现的全局同步是在可控的粗粒度级,从而提供了执行紧耦合同步式并行算法的有效方式,而程序员并无过分的负担;
  ● 在分析BSP模型的性能时,假定局部操作可以在一个时间步内完成,而在每一个超级步中,一个处理器至多发送或接收h条消息(称为h-relation)。假定s是传输建立时间,所以传送h条消息的时间为gh+s,如果 ,则L至少应该大于等于gh。很清楚,硬件可以将L设置尽量小(例如使用流水线或大的通信带宽使g尽量小),而软件可以设置L的上限(因为L越大,并行粒度越大)。在实际使用中,g可以定义为每秒处理器所能完成的局部计算数目与每秒路由器所能传输的数据量之比。如果能够合适的平衡计算和通信,则BSP模型在可编程性方面具有主要的优点,而直接在BSP模型上执行算法(不是自动的编译它们),这个优点将随着g的增加而更加明显;
  ● 为PRAM模型所设计的算法,都可以采用在每个BSP处理器上模拟一些PRAM处理器的方法来实现。理论分析证明,这种模拟在常数因子范围内是最佳的,只要并行宽松度(Parallel Slackness),即每个BSP处理器所能模拟的PRAM处理器的数目足够大。在并发情况下,多个处理器同时访问分布式的存储器会引起一些问题,但使用散列方法可以使程序均匀的访问分布式存储器。在PRAM-EREW情况下,如果所选用的散列函数足够有效,则L至少是对数的,于是模拟可以达到最佳,这是因为我们想在p个物理处理器的BSP模型上,模拟个虚拟处理器,可将个虚拟处理器分配个每个物理处理器。在一个超级步内,v次存取请求可以均匀分布,每个处理器大约v/p次,因此计算机执行本次超级步的最佳时间为O(v/p),且概率是高的。同样,在v个处理器的PRAM-CRCW模型中,能够在p个处理器(如果 ),和的BSP模型上用O(v/p)的时间也可以达到最佳模拟。
  3.BSP的缺点
  ● 在BSP模型中,超级步的长度必须能够充分的适应任意的h-relation,这一点是人们最不喜欢的;
  ● 在BSP模型中,在超级步开始发送的消息,即使网络延迟时间比超级步的长度短,它也只能在下一个超级步才能使用;
  ● BSP模型中的全局障碍同步假定是用特殊的硬件支持的,这在很多并行机中可能没有相应的硬件;
  ● Valiant所提出的编程模拟环境,在算法模拟时的常数可能不是很小的,如果考虑到进程间的切换(可能不仅要设置寄存器,而且可能还有部分高速缓存),则这个常数可能很大。
  4.BSP的现状
  11.3.3Logp
  LogP是由大卫·卡勒等人提出的,它使用了L,O,G,P四个参数来描述这个模型。LogP模型是一种面向分布式存储器、点对点通信的多计算机系统的并行计算模型。
L (Latency) :
表示信息从源到目的地所需的时间;
O (Overhead) :
表示处理器接受或发送一条消息所需额外开销,并且在此期间处理器不能做作任何操作;
G (Gap):
表示处理器连续进行两次发送或接收消息之间必须有的时间间隔;
P (Processor) :
表示处理器的数目。
由上可以看出,LogP模型一方面充分讨论了网络的通信特性,另一方面却放弃了对网络拓扑的讨论。在LogP中没有出现超级步的概念,这是因为LogP中是消息同步的,也就是说,一旦消息到达了处理器我们就可以使用,而不必要等到下一个超级步。
LogP模型下 , 网络的容量是有限度的 , 在任何时刻的网上 , 从任何处理器发出或向任何处理器发去的消息个数不得超过 [L /g ]个 , 否则便会发生阻塞。 LogP是个异步模型 ,通信与计算可以重叠 , 并完全采用消息传递的方式进行通信和同步。Log P模型以相当简明的参数刻划 M PP, 更准确的说 , 刻划的是 M PP通信网络的性能。在 LogP模型下 , 只要做到网络轻载且只有小消息 , 便可以充分发挥四个参数所赋予的精确性 , 进行周密的算法设计 , 以充分利用处理机和网络带宽。
1.Logp模型特点
(1)抓住了网络与处理机之间的性能瓶颈。g反映了通信带宽,单位时间内最多有L/g个消息能进行处理机间传送。
(2)处理机之间异步工作,并通过处理机间的消息传送来完成同步。
(3)对多线程技术有一定反映。每个物理处理机可以模拟多个虚拟处理机(VP),当某个VP有访问请求时,计算不会终止,但VP的个数受限于通信带宽和上下文交换的开销。VP受限于网络容量,至多有L/g个VP。
(4)消息延迟不确定,但延迟不大于L。消息经历的等待时间是不可预测的,但在没有阻塞的情况下,最大不超过L。
(5)LogP模型鼓励编程人员采用一些好的策略,如作业分配,计算与通信重叠以及平衡的通信模式等。
(6)可以预估算法的实际运行时间。

2.LogP模型的不足之处
(1)对网络中的通信模式描述的不够深入。如重发消息可能占满带宽、中间路由器缓存饱和等未加描述。
    (2)LogP模型主要适用于消息传递算法设计,对于共享存储模式,则简单地认为远地读操作相当于两次消息传递,未考虑流水线预取技术、Cache引起的数据不一致性以及Cache命中率对计算的影响。
(3)未考虑多线程技术的上下文开销。
11.3.4MapReduce
MapReduce是一种编程模型,用于大规模数据集(大于1TB)的并行运算。概念"Map(映射)"和"Reduce(归约)",是它们的主要思想,都是从函数式编程语言里借来的,还有从矢量编程语言里借来的特性。它极大地方便了编程人员在不会分布式并行编程的情况下,将自己的程序运行在分布式系统上。 当前的软件实现是指定一个Map(映射)函数,用来把一组键值对映射成一组新的键值对,指定并发的Reduce(归约)函数,用来保证所有映射的键值对中的每一个共享相同的键组。
MapReduce是面向大数据并行处理的计算模型、框架和平台,它隐含了以下三层含义:

1)MapReduce是一个基于集群的高性能并行计算平台(Cluster Infrastructure)。它允许用市场上普通的商用服务器构成一个包含数十、数百至数千个节点的分布和并行计算集群。
2)MapReduce是一个并行计算与运行软件框架(Software Framework)。它提供了一个庞大但设计精良的并行计算软件框架,能自动完成计算任务的并行化处理,自动划分计算数据和计算任务,在集群节点上自动分配和执行任务以及收集计算结果,将数据分布存储、数据通信、容错处理等并行计算涉及到的很多系统底层的复杂细节交由系统负责处理,大大减少了软件开发人员的负担。
3)MapReduce是一个并行程序设计模型与方法(Programming Model & Methodology)。它借助于函数式程序设计语言Lisp的设计思想,提供了一种简便的并行程序设计方法,用Map和Reduce两个函数编程实现基本的并行计算任务,提供了抽象的操作和并行编程接口,以简单方便地完成大规模数据的编程和计算处理。
1.MapReaduce经典实例
MapReduce的一个经典实例是Hadoop。用于处理大型分布式数据库。由于Hadoop关联到云以及云部署,大多数人忽略了一点,Hadoop有些属性不适合一般企业的需求,特别是移动应用程序。下面是其中的一些特点:
Hadoop的最大价值在于数据库,而Hadoop所用的数据库是移动应用程序所用数据库的10到1000倍。对于许多人来说,使用Hadoop就是杀鸡用牛刀。
Hadoop有显著的设置和处理开销。 Hadoop工作可能会需要几分钟的时间,即使相关数据量不是很大。
Hadoop在支持具有多维上下文数据结构方面不是很擅长。例如,一个定义给定地理变量值的记录,然后使用垂直连接,来连续定义一个比hadoop使用的键值对定义更复杂的数据结构关系。
Hadoop必须使用迭代方法处理的问题方面用处不大——尤其是几个连续有依赖性步骤的问题。
[5]

MapReduce (EMR),这是一项Hadoop服务。Hadoop旨在同期文件系统工作,以HDFS著称。
方法一:我可以写一个小程序,把所有论文按顺序遍历一遍,统计每一个遇到的单词的出现次数,最后就可以知道哪几个单词最热门了。
这种方法在数据集比较耗时,是非常有效的,而且实现最简单,用来解决这个问题很合适。
2.其他实例
方法二:写一个多线程程序,并发遍历论文。
这个问题理论上是可以高度并发的,因为统计一个文件时不会影响统计另一个文件。当我们的机器是多核或者多处理器,方法二肯定比方法一高效。但是写一个多线程程序要比方法一困难多了,我们必须自己同步共享数据,比如要防止两个线程重复统计文件。
方法三:把作业交给多个计算机去完成。
我们可以使用方法一的程序,部署到N台机器上去,然后把论文集分成N份,一台机器跑一个作业。这个方法跑得足够快,但是部署起来很麻烦,我们要人工把程序copy到别的机器,要人工把论文集分开,最痛苦的是还要把N个运行结果进行整合(当然我们也可以再写一个程序)。
方法四:让MapReduce来帮帮我们吧!
2.其
3.MapReaduce实现原理
工作原理

MapReduce执行流程

下图是论文里给出的流程图。一切都是从最上方的user program开始的,user program链接了MapReduce库,实现了最基本的Map函数和Reduce函数。图中执行的顺序都用数字标记了。
1.MapReduce库先把user program的输入文件划分为M份(M为用户定义),每一份通常有16MB到64MB,如图左方所示分成了split0~4;然后使用fork将用户进程拷贝到集群内其它机器上。
2.user program的副本中有一个称为master,其余称为worker,master是负责调度的,为空闲worker分配作业(Map作业或者Reduce作业),worker的数量也是可以由用户指定的。
3.被分配了Map作业的worker,开始读取对应分片的输入数据,Map作业数量是由M决定的,和split一一对应;Map作业从输入数据中抽取出键值对,每一个键值对都作为参数传递给map函数,map函数产生的中间键值对被缓存在内存中。
4.缓存的中间键值对会被定期写入本地磁盘,而且被分为R个区,R的大小是由用户定义的,将来每个区会对应一个Reduce作业;这些中间键值对的位置会被通报给master,master负责将信息转发给Reduce worker。
5.master通知分配了Reduce作业的worker它负责的分区在什么位置(肯定不止一个地方,每个Map作业产生的中间键值对都可能映射到所有R个不同分区),当Reduce worker把所有它负责的中间键值对都读过来后,先对它们进行排序,使得相同键的键值对聚集在一起。因为不同的键可能会映射到同一个分区也就是同一个Reduce作业(谁让分区少呢),所以排序是必须的。
6.reduce worker遍历排序后的中间键值对,对于每个唯一的键,都将键与关联的值传递给reduce函数,reduce函数产生的输出会添加到这个分区的输出文件中。
7.当所有的Map和Reduce作业都完成了,master唤醒正版的user program,MapReduce函数调用返回user program的代码。
所有执行完毕后,MapReduce输出放在了R个分区的输出文件中(分别对应一个Reduce作业)。用户通常并不需要合并这R个文件,而是将其作为输入交给另一个MapReduce程序处理。整个过程中,输入数据是来自底层分布式文件系统(GFS)的,中间数据是放在本地文件系统的,最终输出数据是写入底层分布式文件系统(GFS)的。而且我们要注意Map/Reduce作业和map/reduce函数的区别:Map作业处理一个输入数据的分片,可能需要调用多次map函数来处理每个输入键值对;Reduce作业处理一个分区的中间键值对,期间要对每个不同的键调用一次reduce函数,Reduce作业最终也对应一个输出文件。
在这里插入图片描述
4.MapReaduce的优点
1.优点
●Mapreduce易于编程
●它简单的实现-一些接口,就可以完成一个分布式程序, 这个程序可以分布到大量的廉价的pc机器上运行。也就是说你写一一个分
布式程序,跟写-一个简单的串行程序是一模一 样的。 就是因为这个特性使的Mapreduce编程变得非常流行。
●良好的扩展性
●项目当你的计算资源得不到满足的时候,你可以通过简单的通过增加机器来扩展它的计算能力
●高容错性
●Mapreduce的设计初衷就是使程序能够部署在廉价的pc机器上,这就要求它具有很高的容错性。比如一个机器挂了,它可以把上面
的计算任务转移到另-一个节点上运行,不至于这个任务运行失败,而且这个过程不需要人I参与,而完全是由hadoop内部完成的。
●适合PB级以上海量数据的离线处理
2.缺点
●不擅长实时计算
●Mapreduce无法做到像Mysq|那样做到毫秒或者秒级的返回结果
●不擅长流式计算
●流式计算的输入数据是动态的,而Mapreduce的输入数据集是静态的,不能流态变化。这是Mapreduce自身的设计特点决定了
数据源必须是静态的。
●不擅长DAG(有向图)计算
●多个应用程序存在依赖关系,后-一个应用程序的输入为前一一个应用程序的输出,在这种情况下,Mapreduce并不是不能做,而
是使用后每个Mapreduce作业的输出结果都会写入到磁盘,会造成大量的磁盘I0,导致性能非常低下。
11.3.5Spark
Spark 是一种与 Hadoop 相似的开源集群计算环境,但是两者之间还存在一些不同之处,这些有用的不同之处使 Spark 在某些工作负载方面表现得更加优越,换句话说,Spark 启用了内存分布数据集,除了能够提供交互式查询外,它还可以优化迭代工作负载。Spark 是在 Scala 语言中实现的,它将 Scala 用作其应用程序框架。与 Hadoop 不同,Spark 和 Scala 能够紧密集成,其中的 Scala 可以像操作本地集合对象一样轻松地操作分布式数据集。尽管创建 Spark 是为了支持分布式数据集上的迭代作业,但是实际上它是对 Hadoop 的补充,可以在 Hadoop 文件系统中并行运行。通过名为 Mesos 的第三方集群框架可以支持此行为。Spark 由加州大学伯克利分校 AMP 实验室 (Algorithms, Machines, and People Lab) 开发,可用来构建大型的、低延迟的数据分析应用程序。
1.Spark生态环境
2.Spark总体架构
3.RDD
4.SPark迭代性能远程超MapReduce的原因
5.Spark的优缺点
第一个优点是速度。
与Hadoop的MapReduce相比,Spark基于内存的运算要快100倍以上;而基于磁盘的运算也要快10倍以上。Spark实现了高效的DAG执行引擎,可以通过基于内存来高效地处理数据流。
第二个优点就是易用。
Spark支持Java、Python和Scala的API,还支持超过80种高级算法,使用户可以快速构建不同应用。而且Spark支持交互式的Python和Scala的Shell,这意味着可以非常方便的在这些Shell中使用Spark集群来验证解决问题的方法,而不是像以前一样,需要打包、上传集群、验证等。这对于原型开发非常重要。
第三个优点是通用性。
Spark提供了统一的解决方案。Spark可以用于批处理、交互式查询(通用Spark SQL)、实时流处理(通过Spark Streaming)、机器学习(通过Spark MLlib)和图计算(通过Spark GraphX)。
这些不同类型的处理都可以在同一应用中无缝使用。Spark统一的解决方案非常具有吸引力,毕竟任何公司都想用统一的平台处理问题,减少开发和维护的人力成本和部署平台的物理成本。当然还有,作为统一的解决方案,Spark并没有以牺牲性能为代价。相反,在性能方面Spark具有巨大优势。
第四个优点就是具有可融合性。
Spark非常方便的与其他开源产品进行融合。比如,Spark可以使用Hadoop的YARN和Apache Mesos作为它的资源管理和调度器,并且可以处理所有Hadoop支持的数据,包括HDFS、HBase和Cassanda等。这对于已部署Hadoop集群的用户特别重要,因为不需要做任何数据迁移就可以使用Spark强大的处理能力。Spark也可以不依赖第三方的资源管理器和调度器,它实现了Standalone作为其内置资源管理器和调度框架,这样进一步降低了Spark的使用门槛,使得所有人可以非常容易地部署和使用Spark。此外Spark还提供了在EC2上部署Standalone的Spark集群的工具。
6.Spark集群简单搭建
11.4大数据分析处理平台
11.4.1Impala
1.lmpala原理
Impala是Cloudera公司主导开发的新型查询系统,它提供SQL语义,能查询存储在Hadoop的HDFS和HBase中的PB级大数据。已有的Hive系统虽然也提供了SQL语义,但由于Hive底层执行使用的是MapReduce引擎,仍然是一个批处理过程,难以满足查询的交互性。相比之下,Impala的最大特点也是最大卖点就是它的快速
2.Impala的基本架构
11.4.2HadoopDB平台
Hadoop是一个由Apache基金会所开发的分布式系统基础架构。用户可以在不了解分布式底层细节的情况下,开发分布式程序。充分利用集群的威力进行高速运算和存储。Hadoop实现了一个分布式文件系统(Hadoop Distributed File System),简称HDFS。HDFS有高容错性的特点,并且设计用来部署在低廉的(low-cost)硬件上;而且它提供高吞吐量(high throughput)来访问应用程序的数据,适合那些有着超大数据集(large data set)的应用程序。HDFS放宽了(relax)POSIX的要求,可以以流的形式访问(streaming access)文件系统中的数据。Hadoop的框架最核心的设计就是:HDFS和MapReduce。HDFS为海量的数据提供了存储,而MapReduce则为海量的数据提供了计算
1.HadoopDB原理
2.HadoopDB总体架构
Hadoop是实现了分布式并行处理任务的系统框架,其核心组成是HDFS和MapReduce两个子系统,能够自动完成大任务计算和大数据储存的分割工作。Hadoop有众多子集。例如:Common、Yarn、Avro、Chukwa、Hive、Hbase、Zookeeper等。这些生态工具对Hadoop起到了良好的补充作用。
HDFS系统是Hadoop的储存系统,能够实现创建文件、删除文件、移动文件等功能,操作的数据主要是要处理的原始数据以及计算过程中的中间数据,实现高吞吐量的数据读写。MapReduce系统是一个分布式计算框架,主要任务就是利用廉价的计算机对海量的数据进行分解处理。
3.HadoopDB的优缺点
Hadoop是一个能够对大量数据进行分布式处理的软件框架。 Hadoop 以一种可靠、高效、可伸缩的方式进行数据处理。
Hadoop 是可靠的,因为它假设计算元素和存储会失败,因此它维护多个工作数据副本,确保能够针对失败的节点重新分布处理。
Hadoop 是高效的,因为它以并行的方式工作,通过并行处理加快处理速度。
Hadoop 还是可伸缩的,能够处理 PB 级数据。
此外,Hadoop 依赖于社区服务,因此它的成本比较低,任何人都可以使用。
Hadoop是一个能够让用户轻松架构和使用的分布式计算平台。用户可以轻松地在Hadoop上开发和运行处理海量数据的应用程序。它主要有以下几个优点
1.高可靠性。Hadoop按位存储和处理数据的能力值得人们信赖。
2.高扩展性。Hadoop是在可用的计算机集簇间分配数据并完成计算任务的,这些集簇可以方便地扩展到数以千计的节点中。
3.高效性。Hadoop能够在节点之间动态地移动数据,并保证各个节点的动态平衡,因此处理速度非常快。
4.高容错性。Hadoop能够自动保存数据的多个副本,并且能够自动将失败的任务重新分配。
5.低成本。与一体机、商用数据仓库以及QlikView、Yonghong Z-Suite等数据集市相比,hadoop是开源的,项目的软件成本因此会大大降低。
11.5大数据储存编程实践
11.5.1HDFS读写程序范例
11.5.2HBase读写程序范例
11.6大数据并行计算编程实践
11.7大数据研究与发展方向
11.7.1数据的不确定性与数据质量
11.7.2跨领域的数据处理方法的可移动性
11.7.3数据处理的时效性保证——内存计算
11.7.4流式数据的实时处理
11.7.5大数据应用
1医学领域的大数据应用
2.智能交通领域的大数据应用
3.智能电网领域的大数据应用
11.7.6大数据发展趋势
目前,伴随移动互联网、智能硬件和物联网的快速普及,全球数据总量呈现指数级增长态势,与此同时,机器学习等先进的数据分析技术创新也日趋活跃,使得大数据隐含的价值得以更大程度的显现,一个更加注重数据价值的新时代正悄然来临。
1)大数据的可视化
2)大数据对物联网的影响
3)更加快速准确的机器学习
4)人工智能(AI)的更多使用
5)增强网络安全
6)认知技术的更多使用

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值