关于HDFS中namenode和datanode细节问题

一、概述

  • 1. 在存储数据的数据会将数据进行切分,切出来的每一个块称之为是一个Block
    2. 包含2类主要的节点:NameNode和DataNode
    3. DataNode负责存储具体的数据,NameNode负责记录元数据以及管理DataNode
    4. NameNode和DataNode是Hadoop中的进程,只是实际使用过程中,会将NameNode以及DataNode部署在不同的节点(服务器)上,因此也用NameNode和DataNode表示节点的名字
    5. 在HDFS中,为了保证数据的完整性,将每一个Block进行备份,每一个备份称之为是一个复本。默认复本数量为3

二、Block

  • 1. 表示一个数据块,是HDFS中数据存储的基本单位
    2. 每一个文件上传到HDFS中,都会切成一个或者多个Block
    3. 在Hadoop1.0中,每一个Block大小是64M;在Hadoop2.0中,每一个Block的大小是128M - 实际上指的是Block的最大大小
    4. 如果一个数据不足128M,那么这个数据本身是多大就占用多大的地方
    5. 切块的意义: a. 能够存储超大文件 b. 为了能够进行快速的备份
    6. 当对文件进行切块的时候,会给Block分配一个全局递增的id

三、NameNode

  • 1. 负责管理DataNode和存储元数据
    2. 元数据包含: a. 文件的存放路径 b. 文件的切块数量 c. 块的复本数量 d. 复本与DataNode的关系
    3. 元数据维系在内存以及磁盘中
    4. 元数据维系在内存中的目的是为了快速的查询
    5. 元数据维系在磁盘中的目的是为了崩溃恢复 - 如果NameNode宕机了重新启动的时候依然能够找到元数据
    6. 元数据的存储目录由hadoop.tmp.dir来指定
    7. 元数据的存储文件是:edits和fsimage a. fsimage用于记录元数据,但是注意其中记录的不是实时的元数据 b. edits用于记录写操作的
    8. 当NameNode收到写请求的时候,会先将这个请求记录到edits中,如果记录成功再更改内存中的元数据,最后给客户端返回ack表示操作成功。这个过程中并不涉及fsimage文件的修改
    9. 当edits中的操作更新到fsimage中之后,fsimage中的元数据能保持和内存一致
    10. edits文件和fsimage文件进行合并的条件: a. 时间维度:当距离上一次合并达到指定的时间(在core-site.xml中进行配置:fs.checkpoint.period,默认是3600,单位是s,也就意味着edits每隔1个小时就将数据更新到fsimage中)之后,将edits更新到fsimage中
    b.
    空间维度:当edits达到指定的大小(在core-site.xml中进行配置:fs.checkpoint.size,默认是64M,也就意味着edits达到64M的时候也会将数据更新到fsimage中)的时候也会更新到fsimage中
    c. 在NameNode重启的时候也会触发edits和fsimage文件的更新合并 d. 手动合并:hadoop
    dfsadmin -rollEdits
    11. NameNode通过心跳机制来管理DataNode
    12. DataNode定时(默认是3s)给NameNode发送心跳信号表示当前的DataNode依然存在需要管理
    13. 心跳信号包含: a. 当前节点的状态 b. 当前节点存储的Block信息
    14. 如果NameNode长时间(默认是10min)没有收到DataNode的心跳,则认为这个DataNode已经lost,将这个DataNode上存储的Block再备份到其他的节点上保证复本数量
    15. NameNode是HDFS中的核心节点,但是在Hadoop1.0中只能存在一个,在Hadoop2.0的完全分布式中,能且最多能存在2个
    16. 当NameNode重新启动的时候,触发edits和fsimage之间的更新合并,然后将fsimage中的元数据加载到内存中,等待DataNode的心跳(校验数据的总量是否正确,如果没有收到某个DataNode的心跳,则数据总量就不对,NameNode就会试图恢复这个数据
    -备份保证总量),这个过程称之为安全模式
    17. HDFS处在安全模式中的时候,不对外提供服务
    18. 当启动HDFS的时候,如果发现处在安全模式,需要等待一会儿;如果校验成功会自动退出安全模式
    19. 如果HDFS一直处在安全模式中,说明数据是丢失了,就要强制退出安全模式:hadoop dfsadmin -safemode leave
    20. 在伪分布式下,复本数量必须配置为1。如果在伪分布式下,复本数量设置为3,根据复本放置策略这些复本要放到不同机架的不同节点上,但是伪分布式下只有1个节点,那就意味着放置会失败;如果重启NameNode,则会自动进入安全模式,并且会一直处于安全模式中退不出来

四、DataNode

  • 1. 用于进行数据的存储
    2. 数据是以Block的形式存储在DataNode中
    3. DataNode会每隔3s给NameNode发送心跳

五、复本放置策略

  • 1. 在HDFS中,默认是多复本策略,复本数量默认为3
    2. 第一个复本:如果复本是从集群内部上传,哪个DataNode上传,则第一个复本就放在DataNode上;如果是从集群外部上传,NameNode选择一个相对空闲的节点存储第一个复本
    3. 第二个复本:放在和第一个复本不同机架的节点上
    4. 第三个复本:放在和第二个复本相同机架的不同节点上
    5. 更多复本:挑选相对空闲的节点存储

六、机架感知策略

  • 1. 在Hadoop中,所谓的机架实际上是一个映射,是一个逻辑机架
    2. 可以将不同的主机映射到同一个机架上
    3. 可以不同的物理机架上的节点映射到同一个逻辑机架
    4. 实际开发中,一般会将同一个物理机架上的节点放在同一个逻辑机架上

七、回收站策略

  • 1. 在HDFS中,当删除文件或者目录的时候是立即删除,这是因为Hadoop中回收站策略默认是不开启
    2. 可以在core-site.xml中添加属性fs.trash.interval来指定回收间隔时间,默认单位是分钟

八、SecondaryNameNode

  • 1. 既不管理DataNode也不负责存储元数据,并不是NameNode的热备份,在早期版本中只是辅助NameNode进行元数据的合并
    - edits和fsimage在Hadoop1.0中合并时发生在SecondaryNameNode上,但是在Hadoop的2.0的完全分布式中,舍弃了SecondaryNameNode,为了保证NameNode的高可用,通过舍弃SecondaryNameNode的方式来设置2个NameNode,所以在Hadoop2.0的完全分布式中,元数据的合并是发生在NameNode上
    2. 只是在Hadoop2.0的伪分布式中依然存在SecondaryNameNode

你可能感兴趣的:(大数据)