赞
踩
本文主要介绍 HDFS 的设计理念以及详解读流程、写流程和高可用机制等知识。
Hadoop 中的 HDFS 被设计成适合运行在通用硬件上的分布式文件系统,他和现有的分布式文件系统有很多相同点,同时也是有区别的,HDFS 放宽了 POSIX 约束,来实现流式读取文件系统数据,并且能提高吞吐量的数据访问。
我们知道 HDFS 源于 Google 发布的 GFS 论文,GFS 是为了解决在网络抓取和索引过程产生大量的文件的存储需求,为解决大量文件的存储,HDFS 就诞生了。
适用场景 | 不适用场景 |
---|---|
大文件访问 | 存储大量小文件 |
流式数据访问 | 随机读取,低延迟读取 |
磁盘的物理 block 一般也就 512 Byte,那为啥这里 block 要这么大?
- 是为了最小化查找(seek)时间,控制定位文件与传输文件所用的时间比例。假设定位到 block 所需的时间为 10ms,磁盘传输速度为 100M/s。如果要将定位到 block 所用时间占传输时间的比例控制 1%,则 block 大小需要约100M。
- 如果 block 设置过大,在 MapReduce 任务中,Map 或者 Reduce 任务的个数如果小于集群机器数量,会使得作业运行效率很低。
其中 NameNode 包含两个重要文件,fsimage 和 edits。
fsimage 用于维护文件系统树以及文件树中所有的文件和文件夹的元数据;
操作日志文件 edits 中记录了所有针对文件的创建、删除、重命名等操作。
当 NameNode 启动时,他会读取硬盘中的 fsimage 和 edits,将所有 edits 中的事务作用在内存中的 fsimage 上,并将新的 fsimage 从内存中保存到本地磁盘,然后会删除旧的 edits,这个过程称为 checkpoint,注意目前只是发生在 NameNode 启动的时候。
在 NameNode 挂掉的时候,他不能立刻去替换,而是通过 高可用机制 手段来实现原来的 NameNode 服务。
NameNode 和 DataNode 相比,前者像是一本书的目录,而后者更像是目录对应的具体内容。
前面说到 HDFS 的副本默认为 3,对于这些副本 block 的存储,通常会有以下机制。
HDFS 集群中 NameNode 是非常重要的,整个 HDFS 元数据信息都由他来管理,一旦他挂了,就无了。因此一台 NameNode 是存在单点故障,为了实现 高可用(High Available),其实包括 HDFS-HA 和 YARN-HA。HDFS 可以通过配置 Active / Standby 两个 NameNodes 实现在集群中对 NameNode 的热备来解决上述问题。如果出现故障,如机器崩溃或机器需要升级维护,可将NameNode很快的切换到另外一台机器。实现 HA 功能主要依赖 ZooKeeper 和 ZKFC 进程。
ZKFC组件
ZKFailoverController:
是基于 Zookeeper 的故障转移控制器,它负责控制 NameNode 的主备切换, ZKFailoverController 会监测 NameNode 的健康状态,当发现 Active NameNode 出现异常时会通过 Zookeeper 进行一次新的选举,完成 Active 和 Standby 状态的切换。
HealthMonitor:
周期性调用 NameNode 的 HAServiceProtocol RPC接口(monitorHealth 和 getServiceStatus),监控 NameNode 的健康状态并向 ZKFailoverController 反馈。
ActiveStandbyElector:
接收 ZKFC 的选举请求,通过 Zookeeper 自动完成主备选举,选举完成后回调
ZKFailoverController 的主备切换方法对 NameNode 进行 Active 和 Standby 状态的切换。
联邦机制 Federation 是指 HDFS 可使用多个独立的 NameSpace(NameNode节点管理) 来满足 HDFS 命名空间的水平扩展。这些 NameNode 分别管理一部分数据,且共享所有DataNode的存储资源。
缺点:
HDFS Federation 并没有完全解决单点故障问题。虽然 NameNode/NameSpace 存在多个,但是从单个 NameNode/NameSpace 看,仍然存在单点故障,如果某个 NameNode 挂了,其管理的相应的文件就不可以访问了。
因此可以让每个 NameNode 都采用 HA 的模式,即 HA+Federation 的部署方案。
为了防止数据丢失,安全模式是 Hadoop 的一种保护机制,用于保证集群中的数据块的安全性。当集群启动的时候,会首先进入安全模式,系统处于安全模式时会检查数据块的完整性,且不能修改文件。
假设现在 HDFS 设定的副本数为 3 个,但是 DataNode 只有 2 个副本,副本率就是 2/3=0.666,此时副本率 0.666 明显小于 0.999,因此系统会自动复制副本到其他的 DataNode,使副本率不小于 0.999。如果系统中有 5 个副本,超过我们设定的 3 个副本,那么系统也会删除多于的 2 个副本。
其他系列文章:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。