文章目录
checkpoint周期
<!-- 定时一小时 -->
<property>
<name>dfs.namenode.checkpoint.period</name>
<value>3600</value>
</property>
<!-- 一分钟检查一次操作次数,当操作次数达到1百万时,SecondaryNameNode执行一次 -->
<property>
<name>dfs.namenode.checkpoint.txns</name>
<value>1000000</value>
<description>操作动作次数</description>
</property>
<property>
<name>dfs.namenode.checkpoint.check.period</name>
<value>60</value>
<description> 1分钟检查一次操作次数</description>
</property >
NameNode故障处理
- NameNode故障后,HDFS集群就无法正常工作,因为HDFS文件系统的元数据需要由NameNode来管理维护并与Client交互,如果元数据出现损坏和丢失同样会导致NameNode无法正常工作进而HDFS文件系统无法正常对外提供服务
- NameNode故障后,可以采用如下两种方法恢复数据:
- 第一种:将SecondaryNameNode中数据拷贝到NameNode存储数据的目录;
- 第二种:使用-importCheckpoint选项启动NameNode守护进程,从而将SecondaryNameNode中数据拷贝到NameNode目录中。
NameNode故障处理第一种方式详细步骤
- kill -9 NameNode进程
- 删除NameNode存储的数据(data/tmp/dfs/name)
- 拷贝SecondaryNameNode中数据到原NameNode存储数据目录
- 重新启动NameNode
NameNode故障处理第二种方式详细步骤
-
修改hdfs-site.xml中的
<property> <name>dfs.namenode.checkpoint.period</name> <value>120</value> </property> <property> <name>dfs.namenode.name.dir</name> <value>Hadoop位置+/data/tmp/dfs/name</value> </property>
-
kill -9 NameNode进程
-
删除NameNode存储的数据(data/tmp/dfs/name)
-
如果SecondaryNameNode不和NameNode在一个主机节点上,需要将SecondaryNameNode存储数据的目录拷贝到NameNode存储数据的平级目录,并删除in_use.lock文件
-
导入检查点数据(等待一会ctrl+c结束掉)
bin/hdfs namenode -importCheckpoint
-
启动NameNode
DataName工作机制
- 一个数据块在DataNode上以文件形式存储在磁盘上,包括两个文件,一个是数据本身,一个是元数据包括数据块的长度,块数据的校验和,以及时间戳。
- DataNode启动后向NameNode注册,通过后,周期性(1小时)的向NameNode上报所有的块信息。
- 心跳是每3秒一次,心跳返回结果带有NameNode给该DataNode的命令如复制块数据到另一台机器,或删除某个数据块。如果超过10分钟没有收到某个DataNode的心跳,则认为该节点不可用。
- 集群运行中可以安全加入和退出一些机器。
HDFS之集群安全模式
NameNode启动
- NameNode启动时,首先将镜像文件Fsimage载入内存中,并执行编辑日志Edits中的各项操作,一i但在内存中成功建立文件系统元数据的映像,则创建一个新的Fsimage文件和一个空的编辑日志Edits文件。此时NameNode开始监听DataNode请求。这个过程中NameNode一直运行在安全模式,即NameNode的文件系统对于客户端来说是只读的。
DataNode启动
- 系统中的数据块的位置并不是由NameNode维护的,而是以块列表的形式存储在DataNode中,在系统的正常操作期间,NameNode会在内存中保留所有Block块位置的映射信息,在安全模式下,各个DataNode会向NameNode发送最新的块列表信息,NameNode了解到足够多的块位置信息后,即可高效运行文件系统。
如何判断退出了安全模式
- 如果满足了最小副本条件,NameNode会在30秒后退出安全模式,所谓的最小副本条件即在整合HDFS文件系统中99.9%的块满足最小副本级别(默认值:dfs.replication.min=1)
- 启动一个刚刚格式化的HDFS集群时,因为系统中还没有任何块,所以NameNode不会进入安全模式。
HDFS安全模式基本语法
- 集群处于安全模式时,不能执行重要操作(写操作)。集群启动完成后,自动退出安全模式。
bin/hdfs dfsadmin -safemode get
(功能描述:查看安全模式状态)bin/hdfs dfsadmin -safemode enter
(功能描述:进入安全模式状态)bin/hdfs dfsadmin -safemode leave
(功能描述:离开安全模式状态)bin/hdfs dfsadmin -safemode wait
(功能描述:等待安全模式状态)
Hadoop归档技术
- Hadoop归档技术主要解决HDFS集群存在大量小文件的问题!
- 由于大量小文件会占用NameNode的内存,因此对于HDFS来说存储大量小文件造成NameNode内存资源的浪费!
- Hadoop存档文件HAR文件,是一个更高效的文件存档工具,HAR文件是由一组文件通过archive工具创建而来,在减少了NameNode的内存使用的同时,可以对文件进行透明的访问
- 通俗来说就是HAR文件对NameNode来说是一个文件减少了内存的浪费,对于实际操作处理文件依然是一个一个独立的文件。
Hadoop归档案例
-
启动YARN集群:
start-yarn.sh
-
把/user/code/input目录里面的所有文件归档成一个叫input.har的归档文件,并把归档后文件
存储到/user/code/output路径下。[root@linux121 hadoop-2.9.2]$ bin/hadoop archive -archiveName input.har –p /user/code/input /user/code/output
-
查看归档
[root@linux121 hadoop-2.9.2]$ hadoop fs -lsr har:///user/code/output/input.har
-
解归档文件
[root@linux121 hadoop-2.9.2]$ hadoop fs -cp har:/// user/code/output/input.har/* /user/code
HDFS的可靠性具体表现!
- HDFS 的可靠性有:冗余副本策略,机架策略,心跳机制,安全模式,效验和,回收站,元数据保护,快照机制。
- 冗余副本策略:可以在 hdfs-site.xml 中设置复制因子指定副本数量,所有数据块都可副本DataNode 启动时,遍历本地文件系统,产生一份 HDFS 数据块和本地文件的对应关系列表(blockreport) 汇报给 Namenode
- 机架策略:HDFS 的"机架感知",通过节点之间发送一个数据包,来感应它们是否在同一个机架。一般在本机架放一个副本,在其他机架再存放一个副本,这样可以防止机架失效时丢失数据,也可以提高带宽利用率
- 心跳机制:NameNode 周期性从 DataNode 接受心跳信息和块报告,NameNode 根据块报告验证元数据,没有按时发送心跳的 DataNode 会被标记为宕机,不会再给他任何 I/O 请求。如果 DataNode 失效造成副本数量下降,并且低于预先设定的值,NameNode 会检测出这些数据库,并在合适的时机重新复制。引发重新复制的原因还包括数据副本本身损坏,磁盘错误,复制因子被增大等
- 安全模式:NameNode 启动时会先经过一个 “安全模式” 阶段,安全模式阶段不会产生数据写,在此阶段 NameNode 收集各个 DataNode 的报告, 当数据块达到最小副本数以上时,会被认为是"安全"的,在一定比例(可设置) 的数据块被确定为"安全" 后 ,在过若干时间,安全模式结束(30s左右),当检测到副本数不足的数据块时,该块会被复制,直到达到最小副本数。
- 效验和:在文件创立时,每个数据块都产生效验和,效验和会作为单独一个隐藏文件保存在命名空间下,客户端获取数据时可以检查效验和是否相同,从而发现数据块是否损坏,如果正在读取的数据块损坏,则可以继续读取其他副本。
- 回收站:删除文件时,其实是放入回收站 /trash,回收站里的文件是可以快速恢复的,可以设置一个时间值,当回收站里文件的存放时间超过了这个值,就被彻底删除,并且释放占用的数据块。
- 元数据保护:映像文件和事物日志是 NameNode 的核心数据.可以配置为拥有多个副本,副本会降低 NameNode 的处理速度,但增加安全性。