HDFS2.0
HDFS2.0
AlexHDFS2.0
HDFS 2.0的新特性
- NameNodeHA
- NameNodeFederation
- HDFS 快照
- HDFS 缓存
- HDFS ACL
NameNodeHA
- 什么问题:Hadoop 1.0中NameNode在整个HDFS中只有一个,存在单点故障风险,一旦NameNode挂掉,整个集群无法使用
- 解决方法:HDFS的高可用性将通过在同一个集群中运行两个NameNode(active NameNode& standby NameNode)来解决
- 在任何时间,只有一台机器处于Active状态;另一台机器是处于Standby状态
- Active NN负责集群中所有客户端的操作;
- Standby NN主要用于备用,它主要维持足够的状态,如果必要,可以提供快速的故障恢复。
DN->NN : block -> dataNode
file -> block -> dataNode
数据
命名空间
- 借助NFS文件系统,network File system
- Hadoop自身提供了一个服务,叫做QJM
- 存路径结构体系,不存储节点文件
NFS: 属于操作系统支持的配置 -> 镜像文件和编辑日志文件,
QJM: 属于应用软件级别的配置
最多能挂几个? (N) 2n+1个JN
FailOverController(ZKFC) :用来完成故障转移用的
ZKFC是ZK集群的客户端,ZKFC来监控NN的状态信息
为什么使用QJM实现HA:
- 不需要配置额外的共享存储(相比NFS)
- 消除单点问题
- 可配置,使得系统更加棒
- JN不会因为其中一台的延迟而影响整体的延迟,也不会因为JN的数量增多而影响
同步问题:需要依赖JournalNodes守护进程,完成元数据的一致性
快速的故障恢复:心跳保证,Standby NN也需要保存集群中各个文件块的存储位置
避免分歧:任何情况下,NameNode只有一个Active状态,否则导致数据的丢失及其它不正确的结果
如何做到?
- 在任何时间,JNs只允许一个NN充当writer。在故障恢复期间,将要变成Active 状态的NN将取得writer的角色,并阻止另外一个NN继续处于Active状态
节点分配:
NameNodemachines:运行Active NN和Standby NN的机器需要相同的硬件配置
JournalNodemachines:也就是运行JN的机器。JN守护进程相对来说比较轻量,所以这些守护进程可以可其他守护线程(比如NN,YARN ResourceManager)运行在同一台机器上
- 在一个集群中,最少要运行3个JN守护进程,这将使得系统有一定的容错能力。
在HA集群中,Standby NN也执行namespace状态的checkpoints,所以不必要运行Secondary NN、CheckpointNode和BackupNode;事实上,运行这些守护进程是错误的。
NameNodeFederation (联邦)
本质: 就是将一部分文件迁移到其他NN进行管理,只有元数据管理和存放被分割开,但是真实的数据存储还是共享
workstation_A => namenode 1
workstation_ B => namenode 2
一个namespace对应一个block pool(是同一个namespace 下的所有block集合)
集群中提供多个NameNode,每个NameNode负责管理一部分DataNode
优势:
- 命名空间可以横向扩展
- 性能提升
- 资源隔离
应用:
- 需要一个新的文件系统,viewfs(视图文件系统)
集群中提供多个NameNode,每个NameNode负责管理一部分DataNode
- 好处:实现NameNode的横向扩展,使得Hadoop集群的规模可以达到上万台
HDFS 快照
HDFS快照是一个只读的基于时间点文件系统拷贝
快照可以是整个文件系统的也可以是一部分。
常用来作为数据备份,防止用户错误操作和容灾恢复。
Snapshot 并不会影响HDFS 的正常操作:修改会按照时间的反序记录,这样可以直接读取到最新的数据。
快照数据是当前数据减去修改的部分计算出来的。
快照会存储在snapshottable的目录下。
快照:主要用来备份数据,快照也是数据,也会占空间
假设: 一个集群,如果全部备份,可能换需要另外一个集群,操作很麻烦,成本较高
快照: 只记录block列表和文件大小,但不会出现数据的复制
HDFS快照是对目录进行设定,是某个目录的某一个时刻的镜像
对于一个snapshottable文件夹,“.snapshot” 被用于进入他的快照/foo 是一个snapshottable目录,/foo/bar是一个/foo下面的文件目录,/foo有一个快照s0,那么路径就是:/foo/.snapshot/s0/bar
hdfsdfsadmin-allowSnapshot/user/spark
hdfsdfs-createSnapshot/user/spark s0
hdfsdfs-renameSnapshot/user/spark s0 s_init
hdfsdfs-deleteSnapshot/user/spark s_init
hdfsdfsadmin-disallowSnapshot/user/spark