大数据时代
第三次信息化浪潮 :大数据+云计算+物联网
大数据时代:
大数据时代来临的重要因素
一、 技术支撑
- 存储:存储设备容量不断增加,价格不断降低
- CPU处理能力大幅提升:单核->多核
- 网络带宽不断增加
二、 数据产生方式的变革 (重要因素)
运营式系统阶段 -> 用户原创内容阶段-> 感知式系统阶段(物联网的兴起(重要因素):摄像头、传感器、气象温、湿度传感器都在时时刻刻在记录数据)
大数据概念和影响
一、 大数据的概念
4V:大量化、多样化、快速化、价值密度低
- 数据量大:人类在最近两年产生的数据量相当于之前产生的全部数据量
大数据是由结构化和非结构化数据组成
结构化类型数据:10%(存储在关系型数据库里面的结构化数据)
非结构化数据:90% (图形、图像、文本、视频…) - 多样化:非结构化数据多样化
- 快速化:所有软件要求1秒级
- 价值密度低,商业价值高
二、 大数据的影响
科学研究的四种范式:
实验-> 理论->计算->数据
在思维方式方面:大数据完全颠覆了传统的思维方式
- 全样而非抽样:可存储数据内容增加
- 效率而非精确:之前是抽样,若精度不高则放到全样上误差会放大。而现在是全样分析,故误差不会改变太多。
- 相关而非因果
大数据应用
大数据关键技术
大数据技术的层次->两大核心技术(分布式存储+分布式处理 )
分布式存储:解决海量数据的存储问题
借助集群网络存储
分布式处理:解决海量数据的处理问题
借助集群网络处理
不同的大数据产品服务的方向是不同的:批处理、交互式计算、实时计算等。每个产品的计算领域是不同,故需要对计算模式进行区分。
计算模式
- 批处理计算模式:不适合做实时的交互式计算,批处理不能满足时效性要求。MapReduce/Spark为典型代表。但是Spark解决了MapReduce中的一些缺点。MapReduce不能高效地迭代计算,而Spark可以。
- 流计算:专门针对流数据的实时计算。流数据需要实时处理,给出实时响应,否则分析结果就会失去商业价值。
- 图计算:eg:Google Pregel
- 查询分析计算:有非常高的实时性
不同的产品服务于不同的计算问题的
什么是云计算?
两大核心问题:① 解决了海量数据的分布式存储和分布式处理问题 ② 云计算代行特征:虚拟化+多用户
概念:云计算通过网络以服务的方式为用户提供非常廉价的IT资源。
优势:企业不需要自建IT基础设置,可以租用云端资源。
云计算的三种模式
公有云、混合云、私有云
公有云:面对所有公众使用
私有云:给内部使用
混合云:公有云+私有云
三种云服务
IaaS —— 基础设施即服务
将基础设施(计算资源和存储)作为服务出租。eg:购买环境,可以在该环境下安装各种软件,所有设施都提供好了
PaaS——平台即服务
在别人搭建的云平台开发环境下开发云计算产品,开发出来的产品也部署在别人的云平台开发环境下,可卖给其他人
SaaS——软件即服务
将软件作为一种服务卖给用户
云计算的关键技术
虚拟化:
云计算数据中心:数据中心包含大量大片服务器
云计算的应用
Hadoop简介
- Hadoop是Apache软件基金会旗下的开源软件
- 开源分布式计算平台。降低了使用的复杂性。屏蔽了大数据底层的复杂的操作,为用户提供接口供用户使用
- 虽然用
java
开发,但是其可支持多种编程语言(跨平台)。- 核心技术:
HDFS+MapReduce(批处理,非实时计算)
(解决实现海量数据的存储 + 实现海量数据的处理两个核心问题)- 排序使其成名
- 对海量数据进行存储和处理的分布式框架,且是一种高效的可靠的可伸缩的软件框架。
- 最好运行在
linux
平台。
优点
- Hadoop具有很高的可靠性:多台机器构成集群,部分机器发生故障,剩余机器可以继续对外提供服务。
- Hadoop具有很高的效率
- Hadoop有很好的可扩展性。
- Hadoop成本很低:可以采用普通PC机来构成一个集群,而高性能计算(HPC)需要比较好的机器。
企业中的应用架构:
Hadoop项目结构
存储->调用资源框架(yarn->调用内存、CPU、带宽等计算资源)->计算(MapReduce、Tez->把很多MapReduce作业进行分析优化构建成一个有向无环图,获得最好的处理效率、Spark-> 与MapReduce类型,但是它是基于内存计算的,MapReduce是基于磁盘的,故其比MapReduce效率高)
Hive:实现数据仓库的功能,可以把大量的历史数据存入在数据仓库中,支持SQL语句,Hive将SQL语句转成MapReduce作业然后去执行
Pig:流数据处理。轻量级分析。轻量级脚本语言。可以写出类似SQL的语句然后去执行。
Oozie:作业流调度系统
Zookeeper:分布式协调服务。功能:集群管理、分布式锁
HBase:列族数据库
Flume:日志收集分析框架。
Sqoop:数据导入导出。可以把关系型数据库导入到Hadoop平台上,Hadoop平台上的数据导出到关系型数据库中。
Ambari:安装部署工具。
Hadpoop的安装与使用
Hadoop安装方式
安装虚拟机
安装双操作系统
Hadoop集群的部署和使用
HDFS1.0:先去根据文件名称访问NameNode,在通过访问结果去访问DataNode取数据后拼装得到分布式数据。
NameNode的冷备份:在NameNode出现故障时需要用到。
MapReduce
JobTracker:对整个作业进行管理。把作业拆分成小作业分发到不同机器执行。JobTracker去协调不同机器去执行。
TaskTracker:不同的机器上部署了TaskTracker,每一个TaskTracker负责跟踪和执行分配给自己的小作业。
集群硬件配置
HDFS
只允许追加数据,不允许修改。
目标:
局限性:
- 不适合低延时的数据访问。(不支持实时的数据查询与访问,HBase支持)
- 无法高效存储大量小文件(小量文件越多,关系数据结构越复杂,访问效率越低)
HDFS相关概念
- 块:
- 名称结点(主结点)
每个文件都有一个元数据,元数据中存储着:文件是什么?文件被分成多少块?每个块和文件是怎么映射的?每个块被存储在哪个服务器上面。FsImage+内存(块存储在哪些结点上) 存储的是完整元信息
当数据结点加入到一个集群当中去时,会向名称节点汇报其中包含哪些数据块。名称节点会将所有的信息构成一个清单,而该清单保存在内存中。该清单中的信息是由数据结点和名称节点不断地沟通来实时地维护这些信息的,而不是在在FsImage中存储的。
- 数据结点(从结点)
- 两大数据结构怎么用?
若EditLog在运行期间持续增大时用第二名称节点来解决。
第二名称结点的作用:① 名称节点的冷备份 ② 对EditLog的处理
第二名称节点会定期地与名称节点进行通信,在某个阶段会请求名称节点停止使用EditLog文件。此时名称节点停止向EditLog中写入,并生成一个新的edits.new ,也就是生成一个新的EditLog,名称节点会被新的更新都写到edits.new里面,第二名称节点会取走旧的EditLog,第二名称结点会通过Http Get的方式从名称节点中把FsImage和EditLog都下载在本地,然后在第二名称节点做合并操作,得到新的FsImage后再发送给名称节点。名称节点就得到了合并以后的比较大的FsImage,名称节点会被edits.new更改为Edit,由于edits.new在运行期间记录了所有的新的到达的那些更新信息,故它是新的EditLog。通过这种操作,实现了不断增大的EditLog和FsImage的合并,还实现了冷备份。
HDFS体系结构1.0的局限性
问题:为什么第二名称节点不能解决集群的可用性问题呢?
第二名称节点是冷备份:不能保证名称节点一发生故障,第二名称节点就顶上去。名称节点在发生故障后,必须暂停服务一段时间,它会把相关的元数据信息从第二名称节点慢慢恢复后才能继续提供对外服务。
在HDFS2.0中解决了部分局限性
HDFS的存储原理
1. 冗余数据保存的问题
优点:
- 当多台客户端访问相同数据时可以从不同的副本中取出数据。
- 通过对比几个副本很容易检查数据错误
- 当其中一个副本或者多个副本发生错误时,系统会根据剩余正确副本进行复制,保证了数据的可靠性
2. 数据保存策略问题
如果第一个节点是内部某个应用发起的写请求,就把第一个副本就放在该节点。如果是集群外部发起的写请求,系统会随机挑选一个磁盘不太满,CPU不太忙的机架上。第二副本会放到与第一个副本不同的机架上。第三个副本会放在与第一个副本相同的机架的不同结点上。剩余其他副本根据随机算法得出其放置位置。
3. 数据读取策略
4. 数据错误与恢复策略
① 名称节点出错:利用第二节点的冷备份来解决
② 数据结点出错
怎么知道数据结点出错?
- 数据结点在整个运行期间都会给名称节点发送心跳信息。一旦隔了一定的周期未收到信息时,则知道该数据结点出现错误。
怎么处理?- 名称节点把故障机上的数据(备份数据)重新复制分发到其他正常可用的机器上。
③ 数据出错
怎么知道数据出错?
- 校验码机制。客户端在读取数据时通过校验码校验,如果校验出来的数据不正确,说明这个数据除了问题。原始校验码是在文件创建时生成的。在读取时,一起读数据原始校验码,再将计算出来的新的校验码与原始校验码对比,如果不一致,这说明数据在存储过程中发生了错误。