1. 设计思想
- 目的: 实现海量数据存储
- 设计思想:
1)切块存储:避免namenode压力过大
2)备份存储:避免节点压力过大宕机导致文件丢失
2. 架构
-
主从架构:
- namenode:
1)存储元数据
2)接收客户端的读写请求 - datanode:
1)存储文件
2)处理客户端读写请求 - secondarynamenode:
1)备份主节点,在主节点宕机时进行数据恢复保证集群正常运行
2)帮助主节点减轻压力
- namenode:
-
架构优缺点
- 优点:
可由廉价机构成、容错高、批处理、流式访问 - 缺点:
数据访问延时高(慢)、不擅长存储大量小文件(寻址时间长、namenode压力大)、不支持数据修改(多副本,修改成本高)
- 优点:
3. 两大核心——文件上传、下载
-
文件上传:
- 上传注意问题:
1)切片过程便上传边切片,有客户端负责
2)pipline构建问题: 客户端—>副本1—>副本2—>副本3,当某一个节点出现问题便申请重连,多次申请出问题便将该节点踢出pipline,重建pipline
3)上传过程中存在最低保障:至少有一个副本上传成功、第一个副本存放在客户端所在节点是本地复制,之后的副本复制为网络传输
- 上传注意问题:
-
文件下载:
-
文件下载注意事项:
1)下载失败时重试,依旧不成功更换副本下载,并汇报给namenode
2)文件下载时每一个数据块读取都会进行crc文件效验
什么是crc,见https://blog.csdn.net/d_leo/article/details/73572373 -
元数据合并:
- 触发条件:时间:1小时 、日志条数:100w条
4. 4大机制
-
心跳机制
namenode获取datanode存活状况 ——datanode定期向namenode发送心跳状况,报告存活状况
其过程: 3s检查一次,10次没连上后为宕机 此时namenode对datanode进行主动两次检查5min,判断宕机死亡 -
机架策略
- 副本存放策略(节点、机架、机房、数据中心)
- 副本1:优先服务端节点,若服务端无节点任意节点
- 副本2:不同机架任意节点
- 副本3:副本2相同机架不同节点(便于写数据)
-
负载均衡
- 每一个datanode存储数据和硬件相关
- 小集群:自动负载均衡
- 大集群:自动速度过慢,需手动负载均衡(调整配置函数、调整带宽)
-
安全模式
-
概念:集群的安全模式是集群的一个自我保护的一种模式,在集群的安全模式下不允许用户对集群进行部分操作的。
-
什么时候进入安全模式
- 1、集群启动时
- 启动namenode
读取存储数据源(抽象目录树、数据和块的映射、数据块和节点的映射) - 启动datanode
启动datanode进程、并发送心跳报告、接受心跳报告返回元数据位置信息 - 启动secondearynamenode
检查每一个数据块副本数
检查符合标准数据块占比
检查存活datanode个数
保证标准状态维持30s后
- 启动namenode
- 2、集群运行时也会检查
- 1、集群启动时
-
安全模式可进行操作:只能查询,无法增删改
-