分布式文件系统,Hadoop存储组件
特性
1.高容错性:认为硬件总是不可靠的(硬件一出问题,数据全没了,所以不相信硬件,这也是Hadoop精髓)
2.高吞吐量:为大量数据访问的应用提高吞吐量支持
3.大数据存储:支持存储TB-PB级别的数据
注:
HDFS适合打文件存储(基于第三点),流式数据访问(基于第二点),不适合存储大量小文件(因为不管大文件小文件在HDFS里消耗的元数据都是150字节,所以存小的就亏了)、随机写入(数据一般是拿来分析而不是更改的,写入的优先级是最低的,所以拿来写入会有高延迟)、低延迟读取(因为处理大量数据,难免会有不低的延迟)
HDFS基本架构
包括以下3个部分:
1.NameNode:用于存储、生成文件系统的元数据,负责元数据维护,运行一个实例。
2.DataNode:用于存储实际的数据,周期性将自己管理的数据块(注意是他管理的而不是所有数据)上报给NameNode,运行多个实例。
3.Client:支持业务访问HDFS,从NameNode和DataNode获取数据返回给业务,也就是提供一个接口,只有通过Client才能访问到HDFS,多个实例和业务一起运行。
HDFS高可靠性(HA)架构
在基本架构上增加了一下4个组件:
ZooKeeper
分布式协调,用来存储HA下的状态文件,主备信息(两个NameNode的状态),个数建议>3且为奇数
NameNode主备
其主备模式,主提供服务,备合并元数据并作为主的热备,两个的状态会周期上报给ZKFC,ZKFC再把自己状态信息传给ZK
ZKFC(Zookeeper Failover Controller)
用于控制NameNode节点的主备状态
JN(JournalNode)
用于共享存储NameNode生成的Editlog,主节点周期上传自己的日志信息给其,备节点周期从其上读取相关操作日志到自身,并把合并后的日志同步给主节点
HDFS数据写入流程
1.业务应用调用HDFS Client提供的API创建文件,请求写入
2.HDFS Client联系NameNode,NameNode在元数据中创建文件节点(元数据)
3.业务应用调用write API写入文件
4.HDFS Client收到业务数据后,从NameNode获取到数据块编号、位置信息后,联系DataNode,并将需要写入数据的DataNode建立起流水线。完成后,客户端再通过自有协议写入数据到DataNode1,再由DataNode1复制到DataNode2,DataNode3
5.写完的数据,将返回确认信息给HDFS Client
6.所有数据确认完成后,业务调用HDFS Client关闭文件
7.业务调用close,flush后HDFS Client联系NameNode,确认数据写完成,NameNode持久化元数据
HDFS数据读取流程
1.业务应用调用HDFS Client提供的API打开文件
2.HDFS Client联系NameNode,获取到文件信息(数据块、DataNode位置信息)
3.业务应用调用read API读取文件
4.HDFS Client根据NameNode获取到的信息,联系DataNode,获取相应的数据库(Client采用就近原则读取数据)
5.HDFS Client会与多个DataNode通讯获取数据块
6.数据读取完成后,业务调用close关闭连接
MapReduce
分布式并行处理架构,离线计算框架,是从大数据诞生开始的第一个计算引擎,是面向大数据并行处理的计算模型、框架和平台,包含三层含义:
1.是一个基于集群的高性能并行计算平台
2.是一个并行计算与运行软件框架
3.是一个并行程序设计模型与方法
Storm
实时计算框架
Spark
内存计算框架,迭代计算,基于内存的分布式处理引擎,其作用:
1.数据处理:用来快速处理数据,兼具容错性和可扩展性
2.迭代计算:支持迭代计算,有效应对多步数据处理逻辑,而且需要迭代的层数越多,其发挥的性能就越强
3.数据挖掘:在海量数据基础上进行复杂的挖掘分析,可支持各种数据挖掘和机器学习算法
Yarn
资源管理器,是一个通用资源管理系统,可为上层应用提供统一的资源管理和调度,其位置处于存储组件(HDFS)和计算引擎之间,作为一个轻量级弹性计算平台,除了MR框架,还支持Spark、Storm等框架