hadoop机架感知以及HDFS

HDFS副本存放策略:

  1. 第一个副本,在客户端相同的节点(如果客户端是集群外的一台机器,就随机选节
    点,但是系统会避免挑选太满或者太忙的节点)
  2. 第二个副本,放在不同机架(随机选择)的节点。
  3. 第三个副本,放在与第二个副本同机架但是不同节点上。

机架感知:

机架感知.png
  1. distance(/D1/R1/H1,/D1/R1/H1)=0 相同的datanode
  2. distance(/D1/R1/H1,/D1/R1/H3)=2 同一rack下的不同datanode
  3. distance(/D1/R1/H1,/D1/R2/H4)=4 同一IDC下的不同datanode
  4. distance(/D1/R1/H1,/D2/R3/H7)=6 不同IDC下的datanode

HDFS:

HDFS由3个组件构成NameNode,SecondaryNameNode,DataNode。

NameNode:

NameNode主要是用来保存HDFS的元数据信息,比如命名空间信息,块信息等。当它运行的时候,这些信息是存在内存中的。但是这些信息也可以持久化到磁盘上。


NameNode.png

上面的这张图片展示了NameNode怎么把元数据保存到磁盘上的。这里有两个不同的文件:
fsimage - 它是在NameNode启动时对整个文件系统的快照
edit logs - 它是在NameNode启动后,对文件系统的改动序列

只有在NameNode重启时,edit logs才会合并到fsimage文件中,从而得到一个文件系统的最新快照。由于在集群中NameNode是很少重启的,这也意味着当NameNode运行了很长时间后,edit logs文件会变得很大。由此会产生如下问题:
edit logs文件会变的很大,如何管理这个文件?
NameNode的重启时间变长?因为有很多改动序列(edit logs)要合并到fsimage文件上。
引入 SecondaryNameNode来解决。

SecondaryNameNode(检查节点):

职责是合并NameNode的edit logs到fsimage文件中。


SecondaryNameNode.png

SecondaryNameNode定时到NameNode去获取edit logs,并更新到fsimage上。(Secondary NameNode自己的fsimage),一旦它有了新的fsimage文件,它将其拷贝回NameNode中。
NameNode在下次重启时会使用这个新的fsimage文件,从而减少重启的时间。
Secondary NameNode的整个目的是在HDFS中提供一个检查点。它只是NameNode的一个助手节点。
当我们往DataNode写文件时,DataNode会跟NameNode通信,告诉NameNode什么文件的第几个block放在它那里,NameNode这个时候会将这些元数据信息写到edit logs文件中。

你可能感兴趣的:(hadoop机架感知以及HDFS)