HDFS
HDFS hadoop分布式文件系统
解决目标
- 超大文件
- 流式数据访问
- 商用软件(兼容廉价的硬件设备/强大的跨平台兼容性)
HDFS局限性
- 不适合低延迟数据访问(实时性不高)
- 无法高效存储大量小文件(索引结构庞大后搜索效率降低)
- 不支持多用户写入,任意修改文件(只支持单个写入)
HDFS体系结构
块(Block)
操作系统中的文件块。文件是以块的形式存储在磁盘中,此处块的大小代表系统读、写可操作的最小文件大小,文件系统每次只能操作磁盘块大小的整数倍数据,磁盘块大小为512字节。(减少寻址开销)
HDFS中的块是一个抽象的概念,比操作系统中的块要大很多,默认128MB。
优点:
- 支持大规模文件存粗:可以存储任意大的文件,不会受到系统中单个磁盘大小限制
- 简化系统设计:使用抽象块作为操作单元可以简化存储子系统
- 适合数据备份:方便备份,冗余存储
缺点:
- 过大则影响Mapreduce效率
namenode和datanode
namenode管理节点(Master,整个HDFS集群的管家,相当于数据目录)datanode工作节点(Worker).维护着文件系统树及整棵树内的所有文件和目录。这些信息以两个文件形式永久保存在本地磁盘上:命名空间镜像文件和编辑日志文件。namenode也记录着每个文件中各个块所在的数据节点信息,但不会永久保存块的位置信息(实时维护),会在系统重启时根据数据节点信息重建。
元数据
- 文件是什么
- 文件被分成多少块
- 每个块和文件是怎么映射的
- 每个块被存储在那个服务器上面
namenode
- FsImage 保存系统文件树
- 文件的复制等级
- 块大小以及组成文件的块
- 修改和访问时间
- 访问权限
- EditLog 记录对数据进行的操作
=> 底层FsImage
shell命令 =>最新元数据 =>新版的FsImage/创建空的EditLog
=> EditLog各项操作
HDFS命名空间
- 目录/文件/块
- 通信协议 namenode <=>TCP/IP. datanode <=> rpc
局限性
- 命名空间限制:namenode保存在内存中,所能存储规模有上限
- 性能瓶颈:整个分布式文件吞吐量受限于单个namenode吞吐量
- 隔离问题:由于集群中只有一个namenode,只有一个命名空间,因此无法对应用程序进行隔离
- 集群的可用性:一旦这个唯一的名称节点发生故障,会导致整个集群变得不可用
HDFS存储原理
冗余数据保存
- 加快数据传输速度
- 很容易检查数据及错误
- 保证数据可靠性
数据读取
最近节点读取
数据的错误与恢复
namenode: 通过second namenode回复
datanode: 心跳机制namenode标记宕机 namenode调整位置冗余备份数据再复制
data: 校验码校验 文件创建时为数据块生成校验码,读取时进行校验码验证 冗余数据恢复再复制