信息科技为大数据时代提供技术支持
- 存储设备容量不断增加
- CPU处理能力大幅度提升
- 网络带宽不断增加
大数据4V特征
- 数据量大
- 数据类型繁多
- 处理速度快
- 价值密度底
大数据对思维方式的影响
- 全样而非抽样
- 效率而非精确
- 相关而非因果
云计算关键技术
- 虚拟化
- 分布式存储
- 分布式计算
- 多租户
大数据与云计算,物联网的关系
- 三者区别
- 大数据侧重与对海量数据的存储,处理分析,从海量数据中发现价值,服务生产生活
- 云计算本质旨在整合优化各种IT资源,通过网络方式廉价提供给用户
- 物联网发展目标是实现物物相连,应用创新是物联网发展的核心
- 三者联系
- 整体上看,三者相辅相成。
- 大数据根植与云计算,大数据分析的很多技术都来自云计算
- 云计算的分布式数据存储和管理系统提供了海量数据的存储和管理能力,分布式平并行处理框架MR提供了海量数据分析能力。
- 大数据为云计算提供了用武之地。
- 物联网传感器构成大数据重要数据来源,没有物联网飞速发展,就不会带来数据产生方式的变革。物联网也需借助云计算,大数据技术实现物联网大数据的存储分析和处理。
hadoop生态系统
- hdfs:是针对谷歌文件系统的开源实现,hdfs具有处理超大数据,流式处理,可以运行在廉价商用服务器上等优点。
- hbase:是一个提供可靠性,高性能,可伸缩,实时读写,分布式的列示数据库,一般采用hdfs作为其底层数据存储。
- MapReduce:MapReduce是针对谷歌MapReduce的开源实现。是一种用于大规模集群上的并行计算过程。
- Hive:hive是一个基于Hadoop的数据仓库工具,对Hadoop文件中的数据集进行整理,特殊查询和分析存储。
- Pig:是一种数据流语言和运行环境,适合于使用Hadoop和MapReduce平台来查询大型半结构化数据集。
- Mahout:提供一些可扩展的机器学习领域经典算法的实现
- Zookeeper:针对谷歌Chubby的一个开源实现,是高效和可靠的协同工作系统,提供分布式锁之类的基本服务,用于构建分布式应用,减轻分布式应用程序所承担的协调任务。
- Flume:提供的一个高可用,高可靠,分布式的海量日志采集,聚合和传输系统。
- Sqoop:主要用来在Hadoop和关系数据库之间交换数据,可以改进数据的互操作性。
- Ambari(Hue):基于web工具,支持hadoop集群安装,部署,配置和管理,支持大多数Hadoop组件,包括hdfs,MapReduce,Hive,Pig,Hbase,Zookeeper,Sqoop等。
HDFS默认的冗余复制因子是3
HBASE数据模型概述
- hbase是一个稀疏,多维度,排序的映射表,这张表的索引是行键,列族,列限定符和时间戳。
- habse更新操作时,不会删除数据旧的版本,而是生成一个新的版本,旧版本仍保留,可对保留版本数量进行设置
数据模型的相关概念
-
表
-
行
-
列族
-
列限定符
-
单元格
-
时间戳
数据坐标是什么
hbase使用坐标来定位表中的数据,也就是说,每个值都是通过坐标来访问的。
hbase中需要根据行键,列族,列限定符和时间戳来确定一个单元格,因此可以视为一个"四维坐标",即[行键,列族,列限定符,时间戳]
如果把所有坐标看成一个整体,视为"键",把四维坐标对应的单元格中的数据视为"值",那么Hbase也可以看成一个键值数据库。
Hbase的功能组件
hbase的实现包括3个主要的功能组件:
-
库函数,链接到每个客户端
-
一个Master主服务器
-
许多个Region服务器
客户端并不是直接从Master主服务器上读取数据,而是在获得Region的存储位置信息后,直接从Region服务器上读取数据,尤其需要指出,Hbase客户端并不依赖于Master而是借助于Zookeeper来获得Region的位置信息,所以大多数客户端从来不和主服务器Master通信,这种设计方式使得Master的负载很小。
Hbase常用的shell命令
- 创建表
- create ‘t1’, {‘name’=>‘f1’,version=5}
- create ‘t1’, {‘name’=>‘f1’},{‘name’=>‘f2’},{‘name’=>‘f3’}
- create ‘t1’, ‘f1’,‘f2’,‘f3’
- 创建t1表,将表按照分割算法HexStringSplit分布在15个Region里
- create ‘t1’, ‘f1’, {numregions=>15,splitalgo=>‘HexStringSplit’}
- create ‘t1’, ‘f1’,{splits=>[‘10’,‘20’,‘30’,‘40’}
- list:列出所有表信息
- put:向表,行,列指定的单元格添加数据
- put ‘t1’ , ‘row1’, ‘f1:c1’, ‘value1’, 时间戳 向表t1行row1和列f1:c1所对应的单元格添加数据value1
- get:通过指定表名,行,列,时间戳,时间范围和版本号来获得相应单元格的值
- get ‘t1’, ‘r1’,{column=>‘c1’,timerange=>[ts1,ts2],version=>4} 获得表t1 行r1 列c1时间范围为[ts1,ts2]版本号为4的数据
- get ‘t1’, ‘r1’, ‘c1’, ‘c2’ 获取t1表,行r1,列c1和c2上的数据
- scan:浏览表的相关信息
- alter:修改列族模式
- alter ‘t1’, name=>‘f1’ 向表中添加列族f1
- alter ‘t1’, name=>‘f1’,method=>‘delete’ 删除表t1中的列族f1
- alter ‘t1’, method=>‘table_att’,maxfilesize=>‘134217728’
- count:统计表中的行数
- describe:显示表的线管信息
- enable/disable:使表有效或无效
- delete:删除指定单元格的数据
- delete ‘t1’. ‘r1’, ‘c1’, ts1 删除表t1,行r1,列c1,时间戳ts1上的数据
- drop:删除表
- exists:判断表是否存在
- truncate:使表无效,删除该表,然后重新建立表
- exit:退出hbase shell
- shutdown:关闭hbase集群
- version:输出hbase版本信息
- status:输出hbase集群状态信息
NoSQL数据库具有以下3个特点:
- 灵活的可扩展性
- 灵活的数据模型
- 与云计算紧密融合
关系数据库无法满足web2.0的需求
- 无法满足海量数据的管理需求
- 无法满足数据高并发的需求
- 无法满足高扩展性和高可用性的需求
关系数据库在web2.0时代鸡肋方面
- web2.0网站系统通常不要求严格的数据库事务
- web2.0并不要求严格的读写实时性
- web2.0通常不包含大量复杂的SQL查询
关系数据库和NOSQL比较
NOSQL四大类型
- 键值数据库
-
列族数据库
-
文档数据库
-
图数据库
NOSQL三大基石CAP,BASE和最终一致性理论
CAP
- C Consistency:一致性。它是指任何一个读操作总是能够读到之前完成的写操作的结果,也就是分布式环境中,多点数据一致。
- A Availability: 可用性。它是指快速获取数据,可以在确定的时间内返回操作结果
- P Tolerance of Network Partition:分区容忍性。指当出现网络分区的情况时(系统中部分节点无法同其他节点进行通信),分离的系统也能够正常运行。
CAP理论告诉我们,一个分布式系统不可能同时满足一致性,可用性和分区容忍性这3个需求,最多只能同时满足其中2个。
BASE
说起BASE,不得不谈到ACID。
- A 原子性 数据修改,要么全部执行,要么全都不执行
- C 一致性 事务前后,数据总额一致
- I 隔离性 所有操作全部执行完以前,其他会话不能看到过程
- D 持久性 一旦事务提交,对数据的改变就是永久的
BASE的基本含义是基本可用,软状态和最终一致性。强调的是系统的高可用性,可适当牺牲一致性活分区容忍性。
- 基本可用
- 软状态
- 最终一致性
MapReduce简介
- 谷歌发布的GFS,MapReduce和BigTable的三篇论文
- MapReduce将复杂的,运行与大规模集群上的并行计算过程高度地抽象到两个函数,Map和Reduce,这两个函数及其核心思想都源自函数式编程语言。
- MR中,一个存储在分布式文件系统中的大规模数据集会被切分成许多独立的小数据块,这些小数据块可以被多个Map任务并并行处理。MR会为每个map任务输入一个数据子集,map任务的结果会继续作为reduce任务的输入,最终由reduce任务输出最后结果,并写入分布式文件系统,使用mr处理的数据集需可以被分解为许多小数据集,而且每个小数据集都可以完全并行地进行处理。
MR的各个执行阶段(与书上略有不同)
- Map阶段
- 设置InputFormat类,将数据切分为key-value(k1,v1)对,输入到第二步
- 自定义Map逻辑,将第一步的结果转换为另外的key-value(k2,v2)对,输出结果
- Shuffle阶段
- 对输出的key-value对进行分区
- 对不同分区的数据按照相同的key排序
- (可选)对分组过的数据初步规约,降低数据的网络拷贝
- 对数据进行分组,相同key的value放入一个集合中
- Reduce阶段
- 对多个map任务的结果进行排序以及合并,编写Reduce函数实现自己的逻辑,对输入的key-value进行处理,转为新的key-value(k3,v3)输出
- 设置OutputFormat处理并保存Reduce输出的key-value
hadoop的改进提升(改变1.0和2.0比较)
HDFS HA描述
HDFS2.0采用了HA架构。在一个典型的HA集群中,一般设置两个名称节点,其中一个名称节点处于“活跃”状态,另一个处于”待命“状态,处于活跃状态的名称节点负责对外处理所有客户端的请求,而处于待命状态的名称节点则作为备用节点,保持了足够多的系统元数据,当名称节点出现故障时提供快速恢复能力。也就是说,在HDFS HA中,处于待命状态的名称节点提供了“热备份”,一旦活跃名称节点出现故障,就可以立即切换到待命名称节点,不会影响到系统的正常对外服务。
HDFS 联邦描述
HDFS联邦的设计可以很好地解决可扩展性,系统性能和隔离性三个方面的问题。
HDFS联邦中,设计了多个互相独立的名称节点,使得hdfs的命名服务能够水平扩展,这些名称节点分别进行各自命名空间和块的管理,互相之间是联邦关系,不需要彼此协调。HDFS联邦并不是真正的分布式设计。
HDFS联邦中的名称节点提供了命名空间和块管理功能。在HDFS联邦中,所有名称节点会共享底层的数据节点存储资源,如图,每个数据节点要向集群中所有的名称节点注册,并周期性地向名称节点发送“心跳和块信息”,报告自己的状态,同时也会处理来自名称节点的指令。
Hadoop 2.0对1.0提升方面?改进?
设计了YARN组件,将原本JobTracker三大功能(资源管理,任务调度和任务监控)进行拆分,分别交给不同的新组件去处理。重新设计后得到的YARN包括ResourceManager,ApplicationMaster和NodeManager,其中,由ResourceManager负责资源管理,由ApplicationMaster负责任务调度和监控,由NodeManager负责执行原TaskTracker的任务。这种设计降低了JobTracker的负担,提升了系统运行的效率和稳定性。
Hadoop生态中具有代表性的功能组件
- Pig:Hadoop生态系统中组件,提供了类似SQL的Pig Lation语言,运行用户通过编写简单脚本实现复杂数据分析,而不需编写复杂MR程序。通常用于ETL
- Tez:Apache开源的支持DAG作业的计算框架,源于MR框架,核心思想是将map和reduce两个操作进一步进行拆分,即Map被拆分成input,processor,sort,merge和output,Reduce被拆分成input,shuffle,sort,merge,processor和output等,经过分解后的这些元操作可以进行*组合产生新的操作,经过控制程序组装形成一个大的DAG(有向无环图)作业。
- Kafka:kaafka是LinkedIn公司开发的一种高吞吐量的分布式发布订阅消息系统,用户通过Kafka系统可以发布大量消息,同时也能实时订阅消费消息。设计初衷是构建一个可以处理海量日志,用户行为和网站运营统计等的数据处理框架。
Spark特点
- 运行速度快
- 容易使用
- 通用性
- 运行模式多样
Spark与Hadoop比较(优缺点)
- Hadoop缺点
- 表达能力有限
- 磁盘IO开销大
- 延迟高
- Spark优点
- spark计算模式属于MR,但不局限于MR,还提供了多种数据集操作类型,编程模型比MR更灵活
- spark提供了内存计算,中间结果直接放在内存中,带来了更高的迭代运算效率。
- spark基于DAG的任务调度执行机制,要优于MR的迭代执行机制。
大数据处理主要三个类型
- 复杂的批量数据处理:时间跨度通常在数十分钟到数小时之间
- 基于历史数据的交互式查询:时间跨度通常在数十秒到数分钟之间
- 基于实时数据流的数据处理:时间跨度通常在数百毫秒到数秒之间
Spark基本概念
- RDD:弹性分布式数据集的英文缩写,是分布式内存的一个抽象概念,提供了一种高度受限的共享内存模型。
- DAG:有向无环图的英文缩写,反应RDD之间的依赖关系
- Executor:是运行在工作节点上的一个进程,负责运行任务,并为应用程序存储数据。
- 应用:用户编写的spark程序
- 任务:运行在Executor上的工作单元
- 作业:一个作业包含多个RDD及作用于相应RDD上的各种操作。
- 阶段:是作业的基本调度单位,一个作业会分为多组任务,每组任务被称为阶段,或被称为任务集
图计算简介
- 实际应用中,存在许多图计算问题,如最短路径,集群,网页排名,最小切割,连通分支等。图计算算法的性能直接关系到应用问题解决的高效性,尤其对于大型图(如社交网络和网络图)而言,更是如此。
- 两种通用图计算软件
- 基于遍历算法的,实时图数据库。
- 以图为顶点为中心的,基于消息传递批处理的并行引擎。(基于BSP模型实现的并行图形处理系统)
BSP模型
-
一个BSP模型由大量通过网络互相连接的处理器组成,每个处理器都有快速的本地内存和不同的计算线程,一次BSP计算过程包括一系列全局超步,每个超步主要包括3个组件
- 局部计算:每个参与的处理器都有自身的计算任务,他们只读取存储在本地内存中的值,不同处理器的计算任务都是异步并且独立。
- 通信:处理器群互相交互数据,交互的形式是,由一方发起推送(Put)和获取(Get)操作。
- 栅栏同步:当一个处理器遇到“路障”(或栅栏),会等其他所有处理器完成他们的计算步骤,每一次同步也是一个超步的完成和下一个超步的开始。
PageRank算法
- PageRank是一个函数,它为网络中每个网页赋一个权值,通过权值判断该网页的重要性。该权值分配的方法并不是固定的,网页链接排名算法,基本公式
-
对任意一个网页链接,其PR值为链入该链接的源链接的PR值对该链接的贡献和。其中,N表示该网络中所有网页的数量,Ni为第i个源连接的链出度,PRi表示第i个源连接的PR值
-
网络之间的关系可以用一个连通图来表示。
- 四个网页A,B,C,D互相链入链出组成的连通图,从图中可以看出,网页A中包含指向网页B,C和D的外连接,网页B和D是网页A的源链接。