A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

NameNode元数据管理机制:

记录元数据如果是操作一个文件的话是很不方便的,因为这个里面的数据是经常要改动的(增删改查)

为了方便地去修改这些数据,所以不用文件形式去存,而是放在内存里面(元数据放在内存里),在内存里可以用java对象来表示这些东西,java会设计一个对象,对象里面封装了一种数据结构---树,来表示目录结构,增删改查就很明显/分别。

问题来了,如果宕调,数据会全部丢失,所以定期需要备份到磁盘,比较安全,对象-->磁盘,对象序列化到磁盘的nameNode工作目录(fsimage文件),由于对象有很大的数据描述,不能改一点东西就序列化。所以设置成隔一段时间序列化一次,但是隔的这段时间宕机还是会丢失,所以每做一个操作,引起元数据变化的同时,记录引起元数据变化操作(日志,如果做了操作,追加日志即可,edits日志文件)。这样有一个好处,如果namenode挂了,下次重启的时候可以恢复元数据【首先把最后一次序列化的东西反序列化成对象,然后再用一个算法解析日志看做过什么操作,然后相应的去修改元数据,根据日志一条一条顺序重放即可】,当日志文件越来越大的时候会很难解析,所以把日志定期/定大小切割,但是问题又来了,日志切好多的时候,如果宕机重启去解析许多日志会很慢,等很久才能正常工作。

Secondary NameNode(另起一台机器):

定期的把namenode上的fsimage文件下载到它的本地磁盘,同时把edits文件下载到它的本地磁盘,然后加载,反序列化fsimage文件到内存里(变成元数据目录树,)变成一个对象(内存元数据对象),然后写一个程序去读edits文件,更新元数据,,接下来这个内存元数据会变成新的,然后把新序列化到磁盘以后的上传到namenode的工作目录,总是会保留最近的两个,默认情况下是一个小时做一次合并。这个机制叫做checkpoint机制。

第一次checkpoint需要下载fsimage镜像文件,以后就不用下载了,因为自己的机器上就已经有了。

什么是元数据?
hdfs的目录结构及每一个文件的块信息(块的id,块的副本数量,块的存放位置<datanode>),元数据由namenode负责管理

     2、namenode把元数据记录在哪里?

namenode的实时的完整的元数据存储在内存中;

namenode还会在磁盘中(dfs.namenode.name.dir)存储内存元数据在某个时间点上的镜像文件;

namenode会把引起元数据变化的客户端操作记录在edits日志文件中;



secondary namenode启动位置的配置

<property>

  <name>dfs.namenode.secondary.http-address</name>

  <value>0.0.0.0:50090</value>

</property>

把默认值改成你想要的机器主机名即可



secondarynamenode保存元数据文件的目录配置:

<property>

  <name>dfs.namenode.checkpoint.dir</name>

  <value>file://${hadoop.tmp.dir}/dfs/namesecondary</value>

</property>

改成自己想要的路径即可:/root/dfs/namesecondary

记几个必掌握单词:
handshake  握手
parallel 并行
directories  目录
upgrade  更新
active 激活、活跃的
assign 指派,分配
unassigned  未指派的
incompatible 不兼容的
cluster  集群
clusterID  集群id
---------------------
【转载,仅作分享,侵删】
作者:高辉
原文:https://blog.csdn.net/ZJX103RLF/article/details/88949478
版权声明:本文为博主原创文章,转载请附上博文链接!

1 个回复

倒序浏览
奈斯,感谢分享!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马