第十一章 大数据技术与实践
1.大数据的4V特征
1)Volume(数据量大):大数据的首要特征是数据体量巨大。
2)Variety(数据类型多):大数据的挑战不仅在于数据量大,也体现在数据类型的多样化。
3)Velocity(处理速度快):信息的价值在于及时,超过特定时限的信息就失去了使用的价值。
4)Value(价值高):大数据商业价值高,但是价值密度低。
2.大数据存储平台
HDFS
1)简介
Hbase是一个高可靠性、高性能、面向列、可伸缩、实时读写的分布式数据库。依托Hadoop-HDFS作为其文件存储系统,利用MapReduce来处理海量数据,用Zookeeper作为其分布式协同服务,主要用来存储非结构化和半结构化的松散数据(列存 NoSQL 数据库)。
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体系结构
HDFS采用了主从(Master/Slave)结构模型,一个HDFS集群是由一个NameNode和若干个DataNode组成的。其中NameNode作为主服务器,管理文件系统的命名空间和客户端对文件的访问操作;集群中的DataNode管理存储的数据。
3)HDFS副本放置策略
HDFS副本放置策略对HDFS的可靠性和性能至关重要。副本放置策略关系到数据的可靠性、可用性和网络带宽的利用率。
在读取文件时充分利用了各个机架的网络带宽,做到负载均衡。但这一策略存在以下问题:
1)在写入时代价过大,需要在不同的机架之间传输大量数据。
2)当本地数据副本失效时,从远程结点上恢复数据需要耗费大量数据传输时间。
3)随机选取存放数据的结点,可能会造成数据存储的负载均衡。
为此,基于结点网络距离与数据负载均衡来选择最佳的远程机架数据副本的放置结点,它既能实现数据存放的负载均衡,又能实现良好的数据传输性能。
HBase
1)简介
HBase是一个分布式的、面向列的开源数据库,该技术来源于 Fay Chang 所撰写的Google论文“Bigtable:一个结构化数据的分布式存储系统”。就像Bigtable利用了Google文件系统(File System)所提供的分布式数据存储一样,HBase在Hadoop之上提供了类似于Bigtable的能力。HBase是Apache的Hadoop项目的子项目。HBase不同于一般的关系数据库,它是一个适合于非结构化数据存储的数据库。另一个不同的是HBase基于列的而不是基于行的模式。
2)特性
HBase特性包括:线性和模块化的可扩展性;严格的读写一致;自动且可配置的数据表分片机制;RegionServer之间可以进行热备份切换;为MapReduce操作HBase数据表提供Java基础类;易用的Java客户端访问API;支持实时查询的数据块缓存和模糊过滤;提供Thrift网管和TEST-ful Web服务,并支持XML、Protobuf和二进制编码;可扩展的Jrubyshell;支持通过Hadoop
检测子系统或JMX导出检测数据到文件、Ganglia集群检测系统。
3)体系架构
从物理结构上讲,HBase由三种类型的服务器构成主从式架构。Region Servers为数据的读取和写入提供服务。当访问数据时,客户端直接和Region Servers通信。Region的分配,DDL (create, delete tables)操作有HBase Master进程处理。Zookeeper是HDFS的一部分,维护着一个活动的集群。
Hadoop DataNode 存储着Region Server所管理的数据。所有的HBase数据存储在HDFS的文件中。Region Server和HDfs DataNode并置在一起,这使得RegionServers所服务的数据具有数据局部性(使数据接近需要的位置)。HBase数据在写入时是本地数据,但是当Region移动时,在压实之前它不是本地数据。
NameNode维护构成文件的所有物理数据块的元数据信息。
4)数据模型
单元格(cell)
(1)cell由行和列的坐标交叉决定;
(2)单元格是有版本的;
(3)cell的内容是未解析的字节数组;
(4)cell由{row key, column( =<family> +<qualifier>), version} 唯一确定的单元。
(5)cell中的数据是没有类型的,全部是字节码形式存贮。
RowKey
(1)决定一行数据,按行检索数据,相当于一级索引
(2) 按照字典顺序排序的,说明数据是有序的
(3)只能存储64k的字节数据,RowKey越短越好
列族(Column Family)
(1)HBase表中的每个列都归属于某个列族,列族必须作为表模式(schema)定义的一部分预先给出。
列名以列族作为前缀,每个“列族”都可以有多个列(column); 新的列族成员(列)可以随后按需、动态加入;
(2)权限控制、存储以及调优都是在列族层面进行的;
(3)HBase把同一列族里面的数据存储在同一目录下,由几个文件保存。
时间戳(Timestamp)
(1)在HBase每个cell存储单元对同一份数据可以有多个版本,根据唯一的时间戳来区分每个版本之间的差异,不同版本的数据按照时间倒序排序,最新的数据版本排在最前面。
(2)时间戳的类型是 64位整型,一般由HBase(在数据写入时自动)赋值,此时时间戳是精确到毫秒的当前系统时间。
时间戳也可以由客户显式赋值,如果应用程序要避免数据版本冲突,就必须自己生成具有唯一性的时间戳。
Cassandra
1)简介
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采取与HBase相似的数据模型,有HNase的列和列族的机制,同时又有自己的超级列和超级列族。
列是数据增量最底层(也就是最小)的部分。它是一个包含名称(name)、值(value)和时间戳(timestamp)的三重元组。
超级列与列的区别就是,标准列的value是一个字节数组,而超级列的value包含多个列,且超级列没有时间戳,超级列中的各个列的时间戳可以是不同的。
3)分区策略
Token是用来分区数据的关键,每个结点都有一个独一无二的Token,表明该结点分配的数据范围。值是唯一的
Redis
1)简介
Redis是当前比较热门的NOSQL系统之一,它是一个开源的使用ANSI c语言编写的key-value存储系统(区别于MySQL的二维表格的形式存储。)。和Memcache类似,但很大程度补偿了Memcache的不足。和Memcache一样,Redis数据都是缓存在计算机内存中,不同的是,Memcache只能将数据缓存到内存中,无法自动定期写入硬盘,这就表示,一断电或重启,内存清空,数据丢失。所以Memcache的应用场景适用于缓存无需持久化的数据。而Redis不同的是它会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,实现数据的持久化。
特点:
Redis读取的速度是100000次/s,写的速度是81000次/s
原子 。Redis的所有操作都是原子性的,同时Redis还支持对几个操作全并后的原子性执行。
支持多种数据结构:string(字符串);list(列表);hash(哈希),set(集合);zset(有序集合)
持久化,主从复制(集群)
支持过期时间,支持事务,消息订阅。
官方不支持window,但是又第三方版本。
MongoDB
1)简介
MongoDB是一个基于分布式文件存储[1]的数据库。由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。
MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。它支持的数据结构非常松散,是类似json的bson格式,因此可以存储比较复杂的数据类型。Mongo最大的特点是它支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。
特点:
面向集合存储,易存储对象类型的数据。
模式自由。
支持动态查询。
支持完全索引,包含内部对象。
支持查询。
支持复制和故障恢复。
使用高效的二进制数据存储,包括大型对象(如视频等)。
自动处理碎片,以支持云计算层次的扩展性。
支持 Golang,RUBY,PYTHON,JAVA,C++,PHP,C#等多种语言。
文件存储格式为BSON(一种JSON的扩展)。
可通过网络访问。
3.大数据分析处理平台
1)Impala
简介
Impala是由Cloudera公司开发的新型查询系统,它提供SQL语义,能查询存储在Hadoop的HDFS和HBase上的PB级大数据,在性能上比Hive高出3~30倍。
Impala的运行需要依赖于Hive的元数据。Impala是参照 Dremel系统进行设计的。
Impala采用了与商用并行关系数据库类似的分布式查询引擎,可以直接与HDFS和HBase进行交互查询。
Impala和Hive采用相同的SQL语法、ODBC驱动程序和用户接口。
2)系统架构
Impala和Hive、HDFS、HBase等工具是统一部署在一个Hadoop平台上的。Impala主要由Impalad,State Store和CLI三部分组成。
(1)Impalad
负责协调客户端提交的查询的执行
包含Query Planner、Query Coordinator和Query Exec Engine三个模块。
与HDFS的数据节点(HDFS DN)运行在同一节点上。
给其他Impalad分配任务以及收集其他Impalad的执行结果进行汇总。
Impalad也会执行其他Impalad给其分配的任务,主要就是对本地HDFS和HBase里的部分数据进行操作。
(2)State Store
会创建一个statestored进程。
负责收集分布在集群中各个Impalad进程的资源信息,用于查询调度。
(3)CLI
给用户提供查询使用的命令行工具。
还提供了Hue、JDBC及ODBC的使用接口。
HadoopDB 配置集合主从结点
总体架构:作为一个混合系统,HadoopDB主要由HDFS、MapReduce、SMSPlanner、DB Connector等部分构成。HadoopDB的核心框架是Hadoop,包括存储层HDFS和处理层MapReduce。
4.大数据研究与发展方向
1)数据的不确定性与数据质量
2)跨领域的数据处理方法的可移植性
3)数据处理的时效性保证——内存计算
4)流式数据的实时处理
5)大数据应用
6)大数据发展趋势