HDFS高级特性

一. HDFS回收站

我们Windows系统里面有一个回收站,当想恢复删除文件的时候可以到这里面恢复,HDFS也有回收站。

HDFS会为每一个用户创建一个回收站目录:/user/用户名/.Trash/

每一个被用户在shell命令行删除的文件/目录,都会进入到对应的回收站目录中,在一段时候内用户没对数据进行恢复的话,HDFS就会自动把这个文件/目录彻底删除。

默认情况下HDFS的回收站是没有开启的,需要通过一个配置来开启,在core-site.xml中添加如下配置:

value的单位是分钟,1440分钟代表一天

<property>
    <name>fs.trash.interval</name>
    <value>1440</value>
</property>

注意,如果删除文件过大,超过回收站大小的话会提示删除失败,需要指定参数--skip Trash,指定这个参数跳过回收站。

[root@bigdata01 hadoop-3.2.0]# hdfs dfs -rm -r -skipTrash /user.txt

Deleted /user.txt

[root@bigdata01 hadoop-3.2.0]#

二.HDFS安全模式

大家在平时操作HDFS的时候,有可能遇到这个问题,特别是刚启动群集的时候去上传或者删除文件,会发现错误,提示NameNode处于SafeMode.

这个属于HDFS的安全模式,因为在集群每次重新启动的时候,HDFS都会检查集群中文件信息是否完整,这个时间段内是不允许对集群修改操作的,如果遇到这个情况,可以稍等一会,等HDFS自检 完毕,就会自动退出安全模式。

访问HDFS的web页面,可以看到下面的信息,ON表示处于安全模式,OFF表示安全模式已经结束。

或者通过HDFS命令也可以查看当前的状态:

[root@bigdata01 hadoop-3.2.0]# hdfs dfsadmin -safemode get
Safe mode is ON
 

如果想快速离开安全模式,也可以使用命令强制离开:

[root@bigdata01 hadoop-3.2.0]# hdfs dfsadmin -safemode leave
Safe mode is OFF
 

三.HDFS的高可用和高扩展

在HDFS的设计中,NameNode是支持多个的,一个主的,多个备的,当主的挂掉了,备的就可以顶上去,这样就解决了NameNode节点宕机导致的单点故障问题了。

前面我们说了: NameNode节点的内存是有限的,只能存储有限的文件个数,那使用一个主NameNode,多个备用的NameNode能解决这个问题吗?

不能!

一个主NameNode,多个备NameNode的方案只能解决NameNode的单点故障问题,无法解决单个NameNode内存不够的问题。那怎么办呢?不用担心,官方提供了Faderation机制,可以翻译为联邦,它可以解决单节点内存不够用的情况。

HA架构图:

HDFS的HA,是指在一个群集中存在多个NameNode,分别运行在独立的物理节点上。在任何时间点,只有一个NameNode处于Active状态,其他的处于Standby状态。Active NameNode(简写为Active NN)负责所有客户端的操作,而Standby NameNode(简写为StandBy NN)用来同步Active NameNode的状态信息,以提供快速的故障恢复能力。

为了保证Active NN与StandBy NN节点状态同步,即元数据一致。除了DataNode需要向这些NameNode发送block位置信息外,还构建了一组独特的守护进程:“JournalNodes”(简称JN),用来同步edits信息,当Active NN执行任何有关命名空间的修改,它需要持久化到一半以上的JNS上。而Standby NN负责观察JNs的变化,读取从Active NN发送过来的edits信息,并更新自己内部的命令空间。一旦Active NN遇到错误,StandBy NN需要保证从JNs读出全部的Edits , 然后切换成Active状态 , 如果有多个Standby NN,还会涉及到选主的操作,推选出一份Standby NN切换为Active 状态。

元数据包含两块,一个是静态的,一个是动态的。

静态的是fsimage和edits,其实fsimage是由edits文件合并生成的,所以只需保证edits文件内容的一致性。这个工作是由JournalNodes集群同步的,它保证多个NameNode中edits文件内容的事务性同步。

动态数据是指block和DataNode节点的信息,这个如何保证呢?

当DataNode启动的时候,上报数据信息的时候需要向每个NameNode都上报一份。

这样就可以保证多个NameNode的元数据信息都一样了,当一个NameNode  挂掉以后,立即从Standby NN中选择一个进行接管,集群不会受到影响,因为每个NameNode的元数据都是时刻同步的。

注意:使用集群的时候,不能启动SecondaryNameNode,会出错。因为SecondaryNameNode负责合并edits到fsimage文件,现在这个工作被standby NN负责了。

NameNode可以自动切换,也可以手工切换,如果需要自动切换,需要使用到Zookeeper集群。

使用Zookeeper集群自动切换的原理是这样的:

当多个NameNode启动的时候,会向Zookeeper中注册一个临时节点,当NameNode挂掉的时候,这个临时节点也就消失了,这属于Zookeeper的特性,这个时候,Zookeeper就会有一个watcher监视器监视到,就知道这个节点down掉了,然后会选择一个节点转为Active, 把down掉的节点转为Standby.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值