大数据(big data),IT行业术语,是指无法在一定时间范围内用常规软件工具进行捕捉、管理和处理的数据集合,是需要新处理模式才能具有更强的决策力、洞察发现力和流程优化能力的海量、高增长率和多样化的信息资产。
在维克托·迈尔-舍恩伯格及肯尼斯·库克耶编写的《大数据时代》 中大数据指不用随机分析法(抽样调查)这样捷径,而采用所有数据进行分析处理。
对于“大数据”(Big data)研究机构Gartner给出了这样的定义。“大数据”是需要新处理模式才能具有更强的决策力、洞察发现力和流程优化能力来适应海量、高增长率和多样化的信息资产。
麦肯锡全球研究所给出的定义是:一种规模大到在获取、存储、管理、分析方面大大超出了传统数据库软件工具能力范围的数据集合,具有海量的数据规模、快速的数据流转、多样的数据类型和价值密度低四大特征。
大数据技术的战略意义不在于掌握庞大的数据信息,而在于对这些含有意义的数据进行专业化处理。换而言之,如果把大数据比作一种产业,那么这种产业实现盈利的关键,在于提高对数据的“加工能力”,通过“加工”实现数据的“增值”。
从技术上看,大数据与云计算的关系就像一枚硬币的正反面一样密不可分。大数据必然无法用单台的计算机进行处理,必须采用分布式架构。它的特色在于对海量数据进行分布式数据挖掘。但它必须依托云计算的分布式处理、分布式数据库和云存储、虚拟化技术。
随着云时代的来临,大数据(Big data)也吸引了越来越多的关注。分析师团队认为,大数据(Big data)通常用来形容一个公司创造的大量非结构化数据和半结构化数据,这些数据在下载到关系型数据库用于分析时会花费过多时间和金钱。大数据分析常和云计算联系到一起,因为实时的大型数据集分析需要像MapReduce一样的框架来向数十、数百或甚至数千的电脑分配工作。
大数据需要特殊的技术,以有效地处理大量的容忍经过时间内的数据。适用于大数据的技术,包括大规模并行处理(MPP)数据库、数据挖掘、分布式文件系统、分布式数据库、云计算平台、互联网和可扩展的存储系统。
大数据的5V特点(IBM提出):Volume(大量)、Variety(多样)、Velocity(高速)、Value(低价值密度)。
第一个特征Volume是大数据的首要特征,数据体量巨大。当今世界需要进行及时处理以提取有用信息的数据数量级已经从TB级别,跃升到PB甚至EB级别。
第二个特征Variety:数据类型繁多。大数据的挑战不仅是数据量的大,也体现在数据类型的多样化。除了前文提到的网络日志、地理位置信息等具有固定结构的数据之外,还有视频、图片等非结构化数据。
第三个特征Velocity:处理速度快。信息的价值在于及时,超过特定时限的信息就失去了使用的价值。
最后一个特征是Value:商业价值高,但是价值密度低。单个数据的价值很低,只有大量数据聚合起来处理才能借助历史数据预测未来走势,体现出大数据计算的价值所在。
1、 HDFS简介
HDFS(全称Hadoop Distributed File System)原是Apache开源项目Nutch的组件,现在成为是Hadoop的重要组件,它是一款具有高容错性特点的分布式文件系统,它被设计为可以部署在造价低廉的主机集群上。它将一个大文件拆分成固定大小的小数据块,分别存储在集群的各个节点上。因此HDFS可以存储超大的数据集和单个巨大的文件。这样的分布式结构能够进行不同节点的并行读取,提高了系统的吞吐率。同一个数据块存储在不同的数据节点上,保证了HDFS在节点失败时还能继续提供服务,使其具有了容错性。
2、HDFS体系结构
3、HDFS副本放置策略
HDFS副本放置策略对于HDFS可靠性和性能至关重要。副本放置策略关系到数据的可靠性、可用性和网络带宽的利用率。对于副本放置策略的优化让HDFS在分布式文件系统中脱颖而出,这一调优是需要大量实践经验作为依托的。
HDFS采用基于机架感知的副本放置策略,将副本存放在不同的机架上,即第一个副本放在客户本地节点上,另外两个副本随机放置在远程机架上,这样可以防止当某个机架失效时数据的丢失,如图12-2所示。在一个数据中心中往往不只有一个机架,对于大部分数据中心来说,不同机架上节点之间的通信需要经过多个交换机,其带宽比相同机架节点之间的通信带宽要小。因此,基于机架感知的副本放置策略可以在网络带宽和数据可靠性之间取得平衡。
1、HBase简介
Apache HBase是运行于Hadoop平台上的数据库,它是可扩展的、分布式的大数据储存系统。HBase可以对大数据进行随机而实时的读取和写入操作。它的目标是在普通的机器集群中处理巨大的数据表,数据表的行数和列数都可以达到百万级别。受到Google Bigtable 思想启发,Apache开发出HBase, HBase是一个开源的、分布式的、数据多版本储存的、面向列的大数据储存平台。Google的Bigtable是运行于GFS(Google File System)上的,而HBase是运行与Apache开发的Hadoop平台上。
2、HBase的特性
1)线性和模块化的扩展性;
2)严格的读写一致性;
3)自动且可配置的数据表分片机制;
4)RegionServer之间可以进行热备份切换;
5)为MapReduce操作HBase数据表提供方便JAVA基础类;
6)易用的JAVA客户端访问API;
7)支持实时查询的数据块缓存和模糊过滤;
8)提供Trift网关和REST-ful Web服务,并支持XML,Protobuf和二进制编码;
9)可扩展的Jrubyshell;
10)支持通过Hadoop检测子系统或JMX导出检测数据到文件、Ganglia集群检测系统。
Cassandra是社交网络理想的数据库,适合于实时事务处理和提供交互型数据。以Amazon的完全分布式的Dynamo为基础,结合了Google BigTable基于列族(Column Family)的数据模型,P2P去中心化的存储,目前twitter和digg中都有使用。在CAP特性上(CAP即Consistnecy 一致性,Avaliability 可用性,Partition-tolerance分区容忍性),HBase选择了CP,Cassandra更倾向于AP,而在一致性上有所减弱。
列是数据增量最底层(也就是最小)的部分。
超级列与列的区别就是,标准列的value是一个字节数组,而超级列的value包含多个列,且超级列没有时间戳,超级列中的各个列的时间戳可以是不同的。
列族概念和存储方式与HBase类似。
超级列族概念上和普通列族相似,只不过它是超级列的集合。
在Cassandra中,Token是用来分区数据的关键。每个节点都有一个独一无二的Token,表明该节点分配的数据范围。节点的Token形成一个Token环,如图12-4所示。例如,使用一致性HASH进行分区时,键值对将根据一致性Hash值来判断数据应当属于哪个Token。
Cassandra的存储机制借鉴了Bigtable的设计,采用Memtable和SSTable的方式。
CommitLog:和HBase的HLog一样,Cassandra在写数据之前,也需要先记录日志,称之为Commit Log,然后数据才会写入到Column Family对应的MemTable中,且MemTable中的数据是按照key排序好的。SSTable一旦完成写入,就不可变更,只能读取。下一次Memtable需要刷新到一个新的SSTable文件中。所以对于Cassandra来说,可以认为只有顺序写,没有随机写操作。
MenTable:MemTable是一种内存结构,它类似于HBase中的MenStore,当数据量达到块大小时,将批量flush到磁盘上,存储为SSTable。这种机制,相当于缓存写回机制(Write-back Cache),优势在于将随机IO写变成顺序IO写,降低大量的写操作对于存储系统的压力。所以我们可以认为Cassandra中只有顺序写操作,没有随机写操作。
SSTable:SSTable是只读的,且一般情况下,一个列族会对应多个SSTable,当用户检索数据时,Cassandra使用了Bloom Filter,即通过多个hash函数将key映射到一个位图中,来快速判断这个key属于哪个SSTable。
1.逆熵
备份之间的同步机制。节点之间定期互相检查数据对象的一致性,
2.读修复
客户端读取某个对象的时候,触发对该对象的一致性检查
3.提示移交
对写操作,如果其中一个目标节点不在线,先将该对象中继到另一个节点上,中继节点等目标节点上线再把对象给它
4.分布式删除
单机删除非常简单,只需要把数据直接从磁盘上去掉即可,而对于分布式,则不同,分布式有其难点。
Redis是一种面向“键/值”对类型数据的分布式NoSQL数据库系统,特点是高性能,持久存储,适应高并发的应用场景。
Redis是一个支持持久化的内存数据库(与Memcache类似),也就是说redis需要经常将内存中的数据同步到磁盘来保证持久化。整个数据库统统加载在内存当中进行操作,定期通过异步操作把数据库 数据flush到硬盘上进行保存。因为是纯内存操作,Redis的性能非常出色,每秒可以处理超过 10万次读写操作,是已知性能最快的Key-Value DB。
Redis的出色之处不仅仅是性能,Redis最大的魅力是支持保存多种数据结构,此外单个value的最大限制是1GB,不像 memcached只能保存1MB的数据,因此Redis可以用来实现很多有用的功能。
通过增加Slave DB的数量,读的性能可以线性增长。为了避免Master DB的单点故障,集群一般都会采用两台Master DB做双机热备。
读写分离架构的缺陷在于,不管是Master还是Slave,每个节点都必须保存完整的数据,如果在数据量很大的情况下,集群的扩展能力还是受限于单个节点的存储能力。对于写密集类型的应用,读写分离架构并不适合。为了解决读写分离模型的缺陷,可以将数据分片模型应用进来。可以将每个节点看成都是独立的master,然后通过业务实现数据分片。
结合上面两种模型,可以将每个master设计成由一个master和多个slave组成的模型。
PRAM模型,即并行随机存取机,也称之为SIMD-SM(共享存储的单指令流多数据流)模型,是一种应用于并行计算抽象模型。PRAM模型是顺序的冯·诺伊曼存储程序模型的自然扩展,由若干具有本地存储器的处理器和一个具有无限容量的共享存储器组成,处理器由公共的时钟进行控制,以同步方式运行。
优点:
RPAM结构简单,简便易行;
PRAM能够表达大多数并行算法
PRAM让算法设计变得简单;让并行算法更加容易移植到不同的并行系统上;
可以按需加入一些诸如同步和通信等功能。
缺点:
1)PRAM是一个同步模型,其同步过程很费时的;
2)模型中使用了一个全局共享存储器,且本地存储容量较小,不能很好的体现当前比较多见的分布主存多处理机的性能瓶颈;
3)单一共享存储器的假定,不适合于异步分布存储的MIMD机器;
4)假定每个处理器均可在单位时间内访问任何存储单元,因此要求处理机间通信无延迟、无限带宽和无开销,忽略多个处理器在访问同一存储空间的竞争问题以及处理器读写存储单元带宽有限性等实践中普遍存在的问题,这一假设显然是不现实的;
5)不能很好地描述多线程技术和流水线预取技术,这两种技术当今并行体系结构应用最普遍的技术。
BSP计算机的运行引入了“超步”的概念,它的运行是以超步为基础的,超步是BSP计算机进行并行计算的基本单位。一个BSP计算由若干超步组成,而每个超步的运行过程又分为三个步骤:
优点:
BSP并行模型独立于体系结构,接近现有的并行系统,可以在绝大多数目标体系结构上有效地实现。
BSP并行模型以超步为基本单位进行并行计算,这使得BSP并行程序设计简单清晰,有点类似顺序程序的编写。
BSP并行程序的性能是可以预测的,可以在系统编写之前进行理论分析预测系统是否可行。
缺点:
需要算法设计人员显式地将同步机制编入算法中,导致算法设计有难度。
限制每个超级步至多可以传递h条消息,限制了消息传递的效率。
BSP(整体大同步)简化了算法的设计和分析,牺牲了算法运行时间,因为路障延迟意味着所有进程必须等待最慢者。一种改进是采用子集同步,将所有进程按照快慢程度分成若干个子集。如果子集小,其中只包含成对的收发者,则它就变成了异步的个体同步,即logp模型。另一种改进是去除路障同步限制,改用异步模式,即异步BSP(A-BSP)。
LogP模型是一种分布存储的、点到点通信的多处理机模型,其中通信网络由4个主要参数来描述:
L(Latency) 表示源处理机与目的处理机进行消息(一个或几个字)通信所需要的等待或延迟时间的上限,表示网络中消息的延迟。
o(overhead)表示处理机准备发送或接收每个消息的时间开销(包括操作系统核心开销和网络软件开销),在这段时间里处理不能执行其它操作。
g(gap)表示一台处理机连续两次发送或接收消息时的最小时间间隔,其倒数即微处理机的通信带宽
P(Processor)处理机/存储器模块个数。
LogP模型假定一个周期完成一次局部操作,并定义为一个时间单位,那么,L,o和g都可以表示成处理器周期的整数倍。
LogP模型的优缺点
LogP模型的优点有:
1)抓住了网络与处理机之间的性能瓶颈。
2)处理机之间异步工作,并通过处理机间的消息传送来完成同步
3)对多线程技术有一定反映
4)消息延迟不确定,但延迟不大于L
5)LogP模型鼓励编程人员采用一些好的策略
6)可以预估算法的实际运行时间。
LogP模型的缺点有:
1)对网络中的通信模式描述的不够深入。
2)简单地认为远地读操作相当于两次消息传递,未考虑流水线预取技术、Cache引起的数据不一致性以及Cache命中率对计算的影响。
3)未考虑多线程技术的上下文开销。
4)LogP模型假设用点对点消息路由器进行通信,这增加了编程者考虑路由器上相关通信操作的负担。
MapReduce是Google公司提出的一种用于大规模数据集(大于1TB)的并行运算的编程模型。
软件实现
指定一个Map(映射)函数,用来把一组键值对映射成一组新的键值对,
指定并发的Reduce(归纳)函数,用来保证所有映射的键值对中的每一个共享相同的键组。
执行流程
(1)数据分片
(2)Master分配Map任务
(3)分配了map任务的worker读取和处理相关split的内容
(4)Master协调分配reducer到相应Mapper获取数据,期间称为Shuffle,包括一个按Key排序过程。
(5)Reducer对每个Key相应的Value列表进行读取并处理
(6)Reducer将处理后的文件写入HDFS输出文件
MapReduce的优缺点
优点:
1、移动计算而不是移动数据,避免了额外的网络负载。
2、任务之间相互独立,实现高容错性。
3、理想状态下可线性扩展的,是为便宜的商业机器而设计的计算模型。
4、MapReduce模型结构简单,终端用户至少只需编写Map和Reduce函数。
5、集群扩展代价曲线平坦。
缺点:
1、一个中心用于同步各个任务。
2、用MapReduce模型来实现常见的数据库连接操作效率低下。
3、MapReduce集群管理、调试、部署以及日志收集工作困难。
4、单个Master节点有单点故障的可能性。
5、当中间结果必须给保留的时候,作业的管理并不简单。
6、对于集群的参数配置调优需要较多经验。
Spark 是一种与 Hadoop 相似的而又强于Hadoop的开源集群计算环境,由加州大学伯克利分校 AMP 实验室开发。Spark 启用了内存分布数据集,除了能够提供交互式查询外,它还可以优化迭代工作负载。
Spark总体架构
RDD提供了一个抽象的数据架构,我们不必担心底层数据的分布式特性,而应用逻辑可以表达为一系列转换处理。通常应用逻辑是以一系列Transformation和Action来表达的。在执行Transformation中原始RDD是不变而不灭的,Transformation后产生的是新的RDD。
基于DAG的任务调度机制
Spark的优缺点
优点:
在迭代任务方面,Spark的执行效率更高,远超过Hadoop 。
Spark能够做到与用户互动式的查询。
快速的故障恢复。RDD的DAG令Spark具有故障恢复的能力。
在不同的Action之间,RDD是可以共享的。
缺点:
对于多用户多作业的集群来说,Spark的Driver很可能形成整个集群性能的瓶颈。
Spark不适用于异步更新共享状态、数据的操作,常见的有增量的网络爬虫系统的数据库。
Cloudera Impala平台介绍
Impala是CDH(Cloudera Distribution with Apache Hadoop)的一个组件,是一个对大量数据并行处理(MPP-Massively Parallel Processing)的查询引擎。
Impala基本架构
MapReduce、Hive与Impala比较
HadoopDB 平台介绍
HadoopDB旨在结合MapReduce的可扩展性优势和并行数据库的性能、效率优势,以管理和分析大数据。HadoopDB背后的基本思想是,连接多个单节点数据库系统 (PostgreSQL),使用 Hadoop 作为任务协调者和网络通信层;查询用 SQL 表达,但是其执行是使用 MapReduce 框架跨节点并行化的,以便将单一查询工作尽可能推送到相应的节点数据库中。
HadoopDB基本架构
HadoopDB优缺点
HadoopDB的优点:
结合Hive对SQL强大的支持并直接生成map/reduce任务,不需要再手动编写map/reduce程序;
利用关系数据库查数据利用单节点的性能优势;
利用Hadoop所具有的高容错性、高可用性以及对于高通量计算的性能优越性。
HadoopDB的缺点有:
如果不想手动编写map/reduce程序,则只能查询的SQL语句的数据来源不能来自多张表,原因是因为他目前只相当对一个数据库的多个分块并行查询,所以不能做到多分块的数据关系处理。当然为了实现多表join,可手动改造InputFormat以实现;
其数据预处理代价过高:数据需要进行两次分解和一次数据库加载操作后才能使用;
将查询推向数据库层只是少数情况,大多数情况下,查询仍由Hive 完成.
维护代价过高.不仅要维护Hadoop系统,还要维护每个数据库节点;
目前尚不支持数据的动态划分,需要手工一次划分好。