分布式系统框架
Hadoop Model
-
Hadoop Common 基础型功能
-
Hadoop Distributed File System 负责存放数据
-
YARN 负责资源的调配
-
MapReduce 大数据的计算框架
-
Ozone 数据存放到仓库
-
Hadoop Submarine 机器学习引擎
分布式文件系统架构
FS - File System
-
文件系统是基于硬盘之上的一个文件管理的工具
-
我们用户操作文件系统可以和硬盘进行解耦
DFS - Distributed File System
- 分布式文件系统
- 将我们的数据存放在多台电脑上存储
- 分布式文件系统有很多
- HDFS是mapreduce计算的基础
文件切分思想
文件存放在一个磁盘上效率肯定是低的
- 读取效率低
- 如果文件特别大会超出单机的存储范围
字节数组
- 文件在磁盘真实存储文件的抽象概念
- 数组可以进行拆分和组装,源文件不会受到影响
切分数据
- 对字节数组进行切分
拼接数据
- 按照数组的偏移量将数据连接到一起,将字节数组链接到一起
偏移量
- 当前数据在数组中的相对位置,可以理解为下标
- 数组都有对应的索引(下标)可以快速的定位数据
数据存储的原理
- 不管文件的的大小,所有的文件都是由字节数组构成
- 如果我们要切分文件,就是将一个字节数组分成多份
- 我们将切分后的数据拼接到一起,数据可以继续使用
- 我们需要根据数据的偏移量将他们重新拼接到一起
Block拆分标准
拆分的数据块需要等大
- 数据计算的时候简化问题的复杂度
- 进行分布式算法设计的时候,数据不统一,算法很难设计
- 数据拉取的时候时间相对一致
- 通过偏移量就知道这个块的位置
- 相同文件,分成的数据块大小应该相等
数据块 Block
- 数据被切分后的一个整体称之为块
- 在H1默认大小为64M,在H2及其以后默认大小为128M
- 同一个文件中,每个数据块大小要一致除了最后一个节点外
- 不同文件中,块的大小可以不一致
- 文件大小不同可以设置不同的块的数量
- 真实情况下,会根据文件大小和集群节点的数量综合考虑块的大小
- 数据块的个数 =Ceil( 文件大小 / 每个块的大小)
注意事项
-
HDFS中一旦文件被存储,数据不允许被修改
- 修改会影响偏移量
- 修改会导致数据倾斜
- 修改数据会导致蝴蝶效益
但是可以被追加,但是不推荐
- 追加设置需要手动打开
-
一般HDFS存储的都是历史数据。所以 将来Hadoop的mr都用来进行离线数据的处理
-
块的大小一旦文件上传之后就不允许被修改
- 128m -512M
Block数据安全
- 肯定要对存储数据做备份
- 备份的数据肯定不能存放在一个节点上
- 使用数据的时候可以就近获取数据
- 所以备份的数量要小于等于节点的数量
- 每个数据块会有3个副本,相同副本是不会存放在同一个节点上
- 副本的数量可以变更
- 可能近期的数据被分析的可能性跟大,副本数可以多设置几个
- 后期数据很少被分析,可以减少副本数
Block的管理效率
需要专门给节点进行分工
- 存储 DataNode
- 记录 NameNode
- 日志 secondaryNameNode
HDFS的特点
优点
高容错性
- 保存多个副本,且提供容错机制。
- 副本丢失或宕机自动恢复。默认存3份。
运行在廉价的机器上(商用机)
- 通过副本提高可靠性
- 提供了容错和恢复机制
适合批处理
- 移动计算而非数据
- 数据位置暴露给计算框架。NameNode上有位置
适合大数据的处理
- TB,甚至PB级数据
- 百万规模以上的文件数量
- 10K+节点规模
流式数据访问
- 一次写入,多次读取,高吞吐量,所以可以同时处理大量数据
缺点
不擅长低延迟数据访问
- 比如毫秒级
不擅长小文件的分区
- 占用NameNode大量内存
- 磁盘寻道时间超过读取时间
不擅长并发写入,文件随机修改
- 一个文件只能有一个写入者
- 仅支持append,也就是添加(有组件实现删等)