|
回顾: HDFS两层模型
- Namespace: 包括目录, 文件和块. 它支持所有命名空间相关的文件操作, 如创建, 删除, 修改, 查看所有文件和目录
- Block Storage Service (块存储服务) 包括两部分
1. 在namenode中的块的管理
提供datanode集群的注册, 心跳检测等功能.
处理块的报告信息和维护块的位置信息
支持块相关的操作, 如创建, 删除, 修改, 获取块的位置信息.
管理块的冗余信息, 创建副本, 删除多余的副本等.
2. 存储: datanode提供本地文件系统上块的存储, 读写, 访问等.
1.x HDFS架构的弱点
HDFS架构在整个集群中允许且仅运行一个单独的命名空间. 命名空间被一个单独的namenode节点所管理. 这种架构决策实现简单. 单页会产生单点, 内存瓶颈, 性能瓶颈等限制
也许仅仅在像Yahoo和Facebook这种规模的公司才会面对这样的限制问题, 但这些限制在2. x HDFS联邦中被解决
http://blog.csdn.net/strongerbit/article/details/7013221
多namenode及namespaces体系
注意 "联邦" 这个政治术语的含义(不是ha的概念)
目的: 水平扩展名称服务
使用多个独立的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> 一个Namenode失效不会影响其下的datanode为其他的Namenode的服务.
好处
Namespace的可扩展性, 1.x中集群存储可以水平扩展(增加节点), 但namespace不可以
1.x 的Namenode存在单点瓶颈, 在2.x 中可以通过增加 namenode 解决
隔离性, 在 1.x中, 一个不好的应用可能耗尽namenode的性能资源从而影响其他应用运行, 2.x的多namenode可以将不同类型的应用和用户隔离在不同的namespaces
命名空间管理细节
不采用文件名hash这一在分布式系统里常用的手段, 因为同一目录下的文件可能散布于各个命名空间, 性能很差
采用Client Side Mount Table
未解决的问题
并非真正HA, namenode失效会造成部分数据无法访问
负载均衡难以自动完成
|
|
|