管理元数据
元数据格式:NameNode(FileName,replicas,block-ids,id2host…)
NameNode对数据的管理采用了三种存储形式:
内存元数据(NameSystem)
磁盘元数据镜像文件(fsImage)
数据操作日志文件(可通过日志运算出元数据)
维护目录树
接受客户端请求
(1)、当namenode启动,元数据是如何生成?
fsimage和edits文件都是经过序列化的,在NameNode启动的时候,它会将fsimage文件中的内容加载到内存中,之后再执行edits文件中的各项操作,使得内存中的元数据和实际的同步,存在内存中的元数据支持客户端的读操作。
例如:在启动HDFS时,只需要读入fsimage_0000000000000008927以及edits_inprogress_0000000000000008928就可以还原出当前hdfs的最新状况。
NameNode起来之后,HDFS的更新操作会重新写到edits文件中,因为fsimage文件一般都很大,如果所有的更新操作都往fsimage文件中添加,这样会导致系统运行缓慢但是如果往edits文件里面写就不会这样,每次执行写操作之后,且在向客户端发送成功代码之前,edits文件都需要同步更新。如果一个文件比较大,使得写操作需要向多台机器进行操作,只有当所有的写操作都执行完成之后,写操作才会返回成功,这样的好处是任何的操作都不会因为机器的故障而导致元数据的不同步。
主要作用:它最核心的合并(edits文件+fsimage),产生一个新fsimage,将它文件
复制到namenode存储
每隔一段时间,由secondaryNamenode将Namenode上积累的所有edits和一个最新的fsimage下载到本地,并加载到内存进行merge(这个过程称为checkpoint)
描述:
1.Secondary NameNode询问namenode是否需要checkpoint。直接带回namenode是否检查结果。
2.Secondary NameNode请求执行checkpoint。
3.namenode滚动正在写的edits日志
4.将滚动前的编辑日志和镜像文件拷贝到Secondary NameNode
5.Secondary NameNode加载编辑日志和镜像文件到内存,并合并。
6.生成新的镜像文件fsimage.chkpoint
7.拷贝fsimage.chkpoint到namenode
8.namenode将fsimage.chkpoint重新命名成fsimage
检查时间参数设置
(1)通常情况下,SecondaryNameNode每隔一小时执行一次。当操作次数达到1百万时,SecondaryNameNode执行一次。
[hdfs-default.xml]
dfs.namenode.checkpoint.txns
1000000
操作动作次数
dfs.namenode.checkpoint.period
3600
设置成一分钟检查一次操作次数
<property>
<name>dfs.namenode.checkpoint.periodname>
<value>60value>
<description> 1分钟检查一次操作次数description>
property>
将 [hdfs-default.xml]修改成 (2)所示,即是一分钟实现合并操作
(3)复制第一台虚拟机的配置文件到其他主机:
使用 scp -r /home/hadoop1/bigdatasoftware/hadoop-2.7.2/etc/hadoop/hdfs-site.xml hadoop1@hadoop1:/home/hadoop1/bigdatasoftware/hadoop-2.7.2/etc/hadoop/hdfs-site.xml
使用 scp -r /home/hadoop1/bigdatasoftware/hadoop-2.7.2/etc/hadoop/hdfs-site.xml hadoop1@hadoop2:/home/hadoop1/bigdatasoftware/hadoop-2.7.2/etc/hadoop/hdfs-site.xml
查看fsimage文件的命令,即是改变fsimage文件格式为xml,然后存放到共享文件中,然后进行查看
hdfs oiv -p XML -i fsimage_0000000000000000002 -o /mnt/hgfs/shareFile/fs_001.xml
查看edits文件的命令,即是改变fsimage文件格式为xml,然后存放到共享文件中,然后进行查看
hdfs oev -p XML -i edits_0000000000000000001-0000000000000000002 -o /mnt/hgfs/shareFile/edits_001.xml
注意:DataNode在创建时并不包含映射的主机名,而是在安全模式里,在namenode的fsimage文件加载到内存中并执行edits文件时生成DataNode与主机的映射关系
即是在DataNode注册之后再内存中生成DataNode与主机的映射
和namenode不同的是,datanode的存储目录是初始阶段自动创建的,不需要额外格式化。
安全模式是 HDFS 所处的一种特殊状态,在这种状态下,文件系统只接受读数据请求,而不接受删除、修改等变更请求,是一种保护机制,用于保证集群中的数据块的安全性。
Namenode启动时,首先将映像文件(fsimage)载入内存,并执行编辑日志(edits)中的各项操作。一旦在内存中成功建立文件系统元数据的映像,则创建一个新的fsimage文件和一个空的编辑日志。此时,namenode开始监听datanode请求。当NameNode统计总模块和发送过来的块报告中的统计信息达到99.999%的之前时间里namenode运行在安全模式,即namenode的文件系统对于客户端来说是只读的
假设我们设置的副本数(即参数 dfs.replication)是 5,那么在 Datanode 上就应该有5 个副本存在,假设只存在 3 个副本,那么比例就是 3/5=0.6。在配置文件 hdfs-default.xml中定义了一个最小的副本的副本率(即参数 dfs.namenode.safemode.threshold-pct)0.999。
我们的副本率 0.6 明显小于 0.99,因此系统会自动的复制副本到其他的 DataNode,使得副本率不小于 0.999.如果系统中有 8 个副本,超过我们设定的 5 个副本,那么系统也会删除多余的 3 个副本。
如果 HDFS 处于安全模式下, 不允许HDFS 客户端进行任何修改文件的操作,包括上传文件,删除文件,重命名,创建文件夹,修改副本数等操作。
查看安全模式状态:hdfs dfsadmin -safemode get
进入安全模式状态:hdfs dfsadmin -safemode enter
离开安全模式状态:hdfs dfsadmin -safemode leave
等待安全模式状态:hdfs dfsadmin -safemode wait