Hadoop 2.x HDFS新特性
HDFS联邦
HDFS HA(要用到zookeeper等,留在后面再讲)
HDFS快照
回顾: HDFS两层模型
Namespace: 包括目录、文件和块。它支持全部命名空间相关的文件操做,如建立、删除、修改,查看全部文件和目录。
Block Storage Service(块存储服务) 包括两部分:
1 在namenode中的块的管理:提供datanode集群的注册、心跳检测等功能。处理块的报告信息和维护块的位置信息。支持块相关的操做,如建立、删除、修改、获取块的位置信息。管理块的冗余信息、建立副本、删除多余的副本等。
2 存储: datanode提供本地文件系统上块的存储、读写、访问等。
1.x HDFS架构的弱点
HDFS架构在整个集群中容许且仅容许一个单独的命名空间。命名空间被一个单独的namenode节点所管理。这种架构决策实现简单。但也会产生单点,内存瓶颈,性能瓶颈等限制。
HDFS联邦
目的:水平扩展名称服务
使用多个独立的namenode和namespaces。每一个namenode是独立的,不须要和其它namenode协调合做。
datanode做为统一的块存储设备被全部namenode节点使用。
每个datanode节点都在全部的namenode进行注册。 datanode发送心跳信息、块报告到全部namenode,同时执行全部namenode发来的命令。
块池( Block Pool)
块池是属于单个命名空间的一组块。
每个datanode为全部的block pool存储块。
Datanode是一个物理概念,而block pool是一个从新将block划分的逻辑概念。
同一个datanode中能够存着属于多个block pool的多个块。
Block pool容许一个命名空间在不通知其余命名空间的状况下为一个新的block建立Block ID。
一个Namenode失效不会影响其下的datanode为其余Namenode的服务。
HDFS联邦的好处
Namespace的可扩展性, 1.x中集群存储能够水平扩展(增长节点),但namespace不能够。
1.x的Namenode 存在单点瓶颈,在2.x中能够经过增长 namenode解决
隔离性。在1.x中,一个拙劣的应用可能耗尽namenode的性能资源从而影响其余应用运行, 2.x的多namenode能够将不一样类型的应用和用户隔离在不一样的namespaces
命名空间管理细节
https://issues.apache.org/jira/secure/attachment/12453067/high-leveldesign.pdf
不采用文件名Hash这一在分布式系统里经常使用的手段,由于同一目录下的文件可能散布于各个命名空间,性能不好
采用Client Side Mount Table,以下图

联邦未解决问题 并不是真正HA, namenode失效会形成部分数据没法访问 负载均衡难以自劢完成 HDFS快照 在2.x终于实现了快照 设置一个目录为可快照: hdfs dfsadmin -allowSnapshot <path> 取消目录可快照: hdfs dfsadmin -disallowSnapshot <path> 生成快照: hdfs dfs -createSnapshot <path> [<snapshotName>] 删除快照: hdfs dfs -deleteSnapshot <path> <snapshotName> 快照位置 可快照目录下的.snapshot子目录 其它快照操做 列出全部可快照目录: hdfs lsSnapshottableDir 比较快照之间的差别: hdfs snapshotDiff <path> <fromSnapshot> <toSnapshot>