图解元数据安全
1、数据安全
副本机制
每个块有多个副本,存储在不同的机器和机架中
- 某台机器宕机,其他机器上依旧可读这份数据
安全模式
- 会检查数据块是否完整,如果数据块丢失,会通过副本恢复
2、元数据安全
问题1:元数据怎么来的?
- 1.格式化时,会初始化生成一个元数据文件,NameNode那台机器的目录中:fsimage【磁盘中】
- 2.当NameNode启动时,会读取这个文件,将这个文件中的内容加载到内存中
- 3.当客户端提交读写请求时,NameNode会对内存中的元数据进行读写【内存中元数据会发生更改,最新】
- 写入文件:要记录这个文件的元数据
- 读取数据:从元数据中找到这个文件的信息
- 为什么加载到内存,直接修改内存中的元数据?
- 这样比较快,如果读写磁盘文件的元数据fsimage的话,就比较慢
问题2:内存中的元数据与磁盘中的fsimage的元数据是不一致的?
原因:
如果一旦机器宕机,内存中最新的元数据全部丢失,NameNode重启再次读取fsimage文件,读到的是之前的元数据,不是最新的,最新的在内存中,内存中最新的元数据全部丢失了
解决:
SecondaryNameNode负责帮助NameNode实现内存中的元数据与磁盘文件中的元数据一致,加快NameNode启动时元数据的加载
NameNode下次重启,从fsimage文件中读取到的元数据依旧是最新的元数据
问题3:SecondaryNameNode如何实现将文件元数据与内存元数据保持一致的?
- 内存元数据:最新元数据、读写最快、但是易丢失,NameNode直接管理内存元数据
- edits文件:内存元数据变化的日志,内存中元数据发生的所有变化都记录在edits文件中
- 类似于Mysql中的binlog:会记录对表的所有操作,用于恢复数据
- fsimage:磁盘中的元数据文件,不易丢失
tips1:SecondaryNameNode是一个辅助进程,不能代替NameNode, 没有接客、管理的功能
tips2:NameNode的备份还叫NameNode 一个是active的NameNode 一个是standby的NameNode
- 功能
- 在不影响NameNode对外提供服务的情况下,偷偷将内存元数据与文件元数据进行同步
- 加快下一次NameNode启动的进度
3、查看元数据
fsimage文件和edits文件存在哪呢?
datanode存储数据的位置
<!--指定datanode将数据存储到每台机器的哪个位置-->
<property>
<name>dfs.datanode.data.dir</name>
<value>file:///export/servers/hadoop-2.6.0-cdh5.14.0/hadoopDatas/datanodeDatas1,file://
/export/servers/hadoop-2.6.0-cdh5.14.0/hadoopDatas/datanodeDatas2</value>
</property>
- 这里配置了两个目录,是做负载均衡,将数据均衡存储到不同的目录中
- 工作中这两个目录要挂载在不同的硬盘上,加快读写的效率【提高并行度】
fsimage文件存储的位置
<property>
<name>dfs.namenode.name.dir</name>
<value>file:///export/servers/hadoop-2.6.0-cdh5.14.0/hadoopDatas/namenodeDatas1,file://
/export/servers/hadoop-2.6.0-cdh5.14.0/hadoopDatas/namenodeDatas2</value>
- 这里配置了两个目录,是做备份的高可用,这两个目录中存储的数据是一模一样
- 否则如果有一块硬盘坏了,更换硬盘,元数据就丢失了,工作中这两个目录要挂载在不同的硬盘上(另外一块硬盘上还有一份)
edits文件的存储位置
<property>
<name>dfs.namenode.edits.dir</name>
<value>file:///export/servers/hadoop-2.6.0-cdh5.14.0/hadoopDatas/nn/edits</value>
</property>
查看fsimage文件
hdfs oiv -i hadoopDatas/namenodeDatas1/current/fsimage_0000000000000000453 -p XML -o fsimage.xml
查看edits文件
hdfs oev -i hadoopDatas/nn/edits/current/edits_0000000000000000126-0000000000000000453 -p XML -o edits.xml