HDFS简介
分布式文件系统HDFS(Hadoop Distributed File System)
文件系统结构
HDFS优势:
- 兼容廉价的硬件设备
- 实现流数据读写(全部或大部分数据读写,不会读写指定数据)
- 支持大数据集
- 支持简单的文件模型
- 强大的跨平台兼容性(java语言写的)
HDFS自身的局限性:
- 不适合低延迟数据访问,实时性不高(HBase可以)
- 无法高效储存大量小文件(寻址耗时)
- 不支持多用户写入及任意修改文件
HDSF基本概念
块 chunk:
- 分摊磁盘读写开销,分摊寻址开销;
- 默认64MB,可设置为128MB)
- 太小寻址开销大,太大MapReduce并行度降低
好处:
- 支持大规模文件存储,将文件切割成块,块可以分布地存储在不同机器上,突破单机存储容量的上限
- 简化系统设计,块的大小是固定的
- 适合数据备份
HDFS两大组件:名称节点(NameNode)和数据节点(DataNode)
NameNode:
整个HDFS集群的管家,存储元数据,相当于数据目录
元数据包含:
- 文件是什么
- 文件被分成多少块
- 每个块和文件的映射关系
- 每个块被存储在哪个服务器上面
NameNode包含两个核心数据结构:
- FsImage:保存系统文件树
文件的复制等级、修改和访问时间、访问权限、块大小以及组成文件的块 - EditLog:记录对数据进行的诸如创建、删除、重命名等操作
- 块的位置信息不由FsImage保存,而是在DataNode与NameNode不断的交流中更新在内存里
NameNode运作方式:
- 先加载FsImage和EditLog到内存里,根据EditLog的历史操作和FsImage的信息合并更新元数据,生成新的FsImage,创建新的EditLog
- EditLog体积会不断变大,这时需要Secondary Namenode来辅助:Primary Namenode先生成一个新的edits.new文件,用来保存Secondary Namenode操作期间新提交的操作。然后Secondary Namenode通过http get获取edits和fsimage,合并得到fsimage.ckpt文件,通过http put传递给Primary Namenode,再和edits合并得到新的文件。
Secondary Namenode
- 解决EditLog不断增大的问题
- 可以当做名称节点的冷备份
DataNode:存取实际数据
HDFS中数据以块的方式冗余存储,一般冗余因子是3,好处:
- 加快数据传输速度(多用户同时访问)
- 容易检查数据错误(冗余数据可以用来对照)
- 保证数据可靠性
错误应对机制
Namenode:冷备份,热备份
Datanode:心跳信息探知是否出错,冗余恢复
数据:校验码检测错误,冗余恢复