NameNode和Zookeeper的format作用

在我们安装高可用hadoop集群时,我们会按照以下命令去执行启动操作;
?
?(1)格式化zk
?
??hdfs zkfc -formatZK
?
?(2)启动journalnode进程
?
?(3)格式化namenode
?
??hadoop namenode -format 集群名
?
?(4)启动namenode
?
?(5)在备namenode节点同步元数据
?
?(6)启动备namenode
?
?(7)启动zkfc
?
那么我们为什么要对NameNode和Zookeeper进行format操作;
  1. NameNode进行format的作用

core-site.xml 是 NameNode 的核心配置文件,主要对 NameNode 的属性进行设置,也仅仅在 NameNode 节点生效,这里我用的是hadoop用户。

<property> 
  <name>hadoop.tmp.dir</name> 
  <value>/tmp/hadoop-${user.name}</value> 
</property>

hadoop.tmp.dir存放临时数据的公共目录目录,如果没有配置,那么即为默认配置namenode、
?
journalnode和datanode的数据都会存放在此目录中,也可以单独配置在hdfs-site.xml文件中。
?
dfs.journalnode.edits.dir:指定JournalNode集群存储edits目录
?
dfs.namenode.name.dir:元数据目录
?
dfs.datanode.data.dir:数据目录
?
namenode进行format操作后会创建以下文件:
?
NameNode和Zookeeper的format作用

文件解释如下:
fsimage:存储命名空间(实际上就是目录和文件)的元数据信息;
?
edits:用来存储对命名空间操作的日志信息,实现NameNode节点的恢复;
?
VERSION:用来存储NameNode版本信息,命名空间ID(版本号);
?
editsinprogress:还在使用的edits文件。

?

  1. Zookeeper的format作用
    ?
    NameNode高可用和共享存储与ZooKeeper架构图
    NameNode和Zookeeper的format作用
    ?

zkfc是ZK集群的客户端,用来监控NN的状态信息。
?
主要功能如下:
?

  • 2.1 健康监控
    ?
    zkfc定期对本地的NN发起health-check的命令,如果NN正确返回,那么这个NN被认为是OK
    的。否则被认为是失效节点。
    ?
  • 2.2 Zookeeper会话管理
    ?
    当本地NN是健康的时候,zkfc将会在zk中持有一个session。如果本地NN又正好是active的,那么zkfc还有持有一个"ephemeral"的节点作为锁,一旦本地NN失效了,那么这个节点将会被自动删除。
    ?
    *2.3 基于Zookeeper的选举
    ?
    如果本地NN是健康的,并且zkfc发现没有其他的NN持有那个独占锁。那么他将试图去获取该锁,一旦成功,那么它就需要执行Failover,然后成为active的NN节点。Failover的过程是:第一步,对之前的NN执行fence,如果需要的话。第二步,将本地NN转换到active状态。

?
?hdfs zkfc -formatZK 做了什么操作?
?
因为FC(failOver)需要把NN的状态写给ZK,所以命令这个就是为了创建一个父目录,后续fc会
?
把nn的状态写到这下面给zk看的。

相关推荐