栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

【三】HDFS详解

【三】HDFS详解

一、HDFS数据流 1. 副本节点选择

节点距离:两个节点到达最近的共同祖先的距离综合

  1. 第一个副本在Client所处的节点上,如果Client在集群外,则随机选一个节点
  2. 第二个副本在另一个机架上的随机一个节点
  3. 第三个副本在第二个副本所在机架的随机节点
2. 数据写入

  1. 客户端通过Distributed FileSystem模块向NN请求上传文件
  2. NN会检查目标文件及其父目录是否存在,并返回是否可以上传
  3. 客户端请求第一个Block上传的具体位置(哪几个DN)
  4. NN返回三个DN节点
  5. Client通过FSDataOutputStream模块请求上传数据到DN1
  6. DN1收到请求会继续调用DN2,DN2调用DN3将这个通信管道建立完成,然后DN1、DN2、DN3逐级应答Client
  7. Client开始王DN1上传第一个以Packet为单位的Block,DN1收到一个Packet就会传给DN2,DN2传给DN3;DN1每传一个Packet会放一个应答队列等待应答
  8. 当一个Block传输完成后,Client再次请求NN上传第二个Block的服务器(重复3-7步)。
3. 数据读取

  1. 客户端通过DistributedFileSystem向NN请求下载文件,NN通过检查元数据,找到Block所在的DN地址
  2. Client通过就近原则挑选一台DN,请求读取数据
  3. DN开始从磁盘读取数据输入流,以Packet为单位传输数据给Client
  4. Client接收到Packet,先在本地缓存,然后写入目标文件
二、NN和2NN 1. 工作机制 1.1 基本流程

**NN的数据在磁盘和内存中都有存储。**内存存储是为了提高运行的效率,磁盘存储是为了数据的持久化。

FsImage:用来存储备份元数据的磁盘文件。Edits:用来保存元数据修改记录的磁盘文件,只做追加操作效率很高。

  1. 当NN节点断电或故障时,若其内部之前操作的元数据的结果丢失了,会通过FsImage和Edits的合并,合成元数据。
  2. 若一直向Edits中写入数据会导致过大,效率太低,而且恢复元数据时间过长,因此引入了2NN专门对FsImage和Edits进行合并

第一阶段:NN启动

  1. 第一次启动NN格式化后,会创建FsImage和Edits文件,若不是第一次启动,直接加载编辑日志和镜像文件到内存
  2. Client对元数据进行增删改的请求
  3. NN记录操作日志,定期落盘日志
  4. NN在内存中对元数据进行增删改

第二阶段:2NN工作

  1. 2NN询问NN是否需要合并FsImage和Edits文件
  2. 2NN请求执行合并
  3. NN落盘正在写的Edits日志,并同时创建一个新的Edits进行操作
  4. 将落盘的FsImage和Edits拷贝到2NN
  5. 2NN记载FsImage和Edits文件到内存,并合并生成新的fsimage.chkpoint
  6. 拷贝fsimage.chkpoint到NN,NN重新命名为FsImage
1.2 工作机制详解

Fsimage:NameNode内存中元数据序列化后形成的文件。

Edits:记录客户端更新元数据信息的每一步操作(可通过Edits运算出元数据)。

  1. NameNode启动时,先滚动Edits并生成一个空的edits.inprogress,然后加载Edits和Fsimage到内存中,此时NameNode内存就持有最新的元数据信息。
  2. Client开始对NameNode发送元数据的增删改的请求,这些请求的操作首先会被记录到edits.inprogress中(查询元数据的操作不会被记录在Edits中,因为查询操作不会更改元数据信息)
  3. 如果此时NameNode挂掉,重启后会从Edits中读取元数据的信息。然后,NameNode会在内存中执行元数据的增删改的操作。
  4. 由于Edits中记录的操作会越来越多,Edits文件会越来越大,导致NameNode在启动加载Edits时会很慢,所以需要对Edits和Fsimage进行合并(所谓合并,就是将Edits和Fsimage加载到内存中,照着Edits中的操作一步步执行,最终形成新的Fsimage)。SecondaryNameNode的作用就是帮助NameNode进行Edits和Fsimage的合并工作。
  5. SecondaryNameNode首先会询问NameNode是否需要CheckPoint(触发CheckPoint需要满足两个条件中的任意一个,定时时间到和Edits中数据写满了)。直接带回NameNode是否检查结果。
  6. SecondaryNameNode执行CheckPoint操作,首先会让NameNode滚动Edits并生成一个空的edits.inprogress,滚动Edits的目的是给Edits打个标记,以后所有新的操作都写入edits.inprogress,其他未合并的Edits和Fsimage会拷贝到SecondaryNameNode的本地
  7. 然后将拷贝的Edits和Fsimage加载到内存中进行合并,生成fsimage.chkpoint,然后将fsimage.chkpoint拷贝给NameNode,重命名为Fsimage后替换掉原来的Fsimage。
  8. NameNode在启动时就只需要加载之前未合并的Edits和Fsimage即可,因为合并过的Edits中的元数据信息已经被记录在Fsimage中。
2. FsImage和Edits详解 2.1 查看FsImage和Edits

查看FsImage文件

# hdfs oiv -p 文件类型 -i镜像文件 -o 转换后文件输出路径
hdfs oiv -p XML -i fsimage_0000000000000000025 -o /opt/module/hadoop-3.1.3/fsimage.xml

查看Edits文件

# hdfs oev -p 文件类型 -i编辑日志 -o 转换后文件输出路径
hdfs oev -p XML -i edits_0000000000000000012-0000000000000000013 -o /opt/module/hadoop-3.1.3/edits.xml
2.2 CheckPoint设置

默认情况下,2NN每个一小时执行一次


  dfs.namenode.checkpoint.period
  3600s

一分钟检查一次操作次数,当操作次数达到1百万时,2NN执行一次


  dfs.namenode.checkpoint.txns
  1000000
操作动作次数



  dfs.namenode.checkpoint.check.period
  60s
 1分钟检查一次操作次数

3. 集群安全模式 3.1 基本流程
  1. NN启动时,首先将Fsimage载入内存,并执行Edits各项操作,一旦在内存中成功建立文件系统元数据的映像,则会创建一个空的编辑日志。此时NN开始监听DN的请求。在这个过程中NN一直运行在安全模式,即NN的对于客户端来说是只读的。
  2. 系统中的数据是以Block列表的形式存储在DN中,在安全模式下,各个DN会向NN发送最新的快列表信息,NN了解到足够多的块位置信息后才可以运行文件系统。
  3. **若满足最小副本条件,NN会在30S之后就退出安全模式。**所谓最小副本条件就是整个文件系统99.9%的块满足最小副本级别(默认dfs.replication.min为1)。在启动一个刚刚格式化的HDFS集群时,因为系统中还没有任何块,所以NN不会进入安全模式
3.2 实操
bin/hdfs dfsadmin -safemode get		#查看安全模式状态
bin/hdfs dfsadmin -safemode enter  	#进入安全模式状态
bin/hdfs dfsadmin -safemode leave	#离开安全模式状态
bin/hdfs dfsadmin -safemode wait	#等待安全模式状态

当安全模式结束后,就推送文件到hdfs

#!/bin/bash
hdfs dfsadmin -safemode wait
hdfs dfs -put /opt/module/hadoop-3.1.3/README.txt /
三、DN详解 1. 工作机制 1.1 工作流程

  1. 一个数据块在DN上以文件形式存储在磁盘上,包含了两个文件:一个是数据本身,一个是元数据(长度、校验和、时间戳等)
  2. DN启动后向NN注册,通过后周期性(默认1H)的向NN上报所有块消息
  3. 心跳每3s一次,心跳返回结果带有NN给DN的命令(如删除某个数据块)。若超过10min未收到某个DN的心跳,则认为该节点不可用
1.2 掉线时限参数
  1. DN进程死亡或者网络故障照成DN无法与NN通信
  2. NN不会立刻将该节点判定为死亡,而是要经过一段时间,这段时间称为超时时长
  3. HDFS默认超时时长为10min30s

    dfs.namenode.heartbeat.recheck-interval
    300000


    dfs.heartbeat.interval
    3


2. 服役/退役新节点 2.1 服役新节点
  1. 修改静态IP和主机名称

  2. 将Hadoop的配置文件分发到新节点

  3. 删除原来HDFS文件系统留存的文件(data和logs),并格式化NN

  4. 直接启动DN,即可关联到集群

    hdfs --daemon start datanode
    yarn --daemon start nodemanager
    
  5. 若数据不均衡,可以通过命令实现集群的再平衡

    ./start-balancer.sh
    
2.2 退役新节点

白名单和黑名单是Hadoop管理集群主机的一种机制

  1. 添加到白名单的主机节点,都允许访问NN,不在白名单的主机节点,都会被退出。
  2. 添加到黑名单的主机节点,不允许访问NN,会在数据迁移后退出。
  3. 实际情况下,白名单用于确定允许访问NameNode的DataNode节点,内容配置一般与workers文件内容一致。
  4. 黑名单用于在集群运行过程中退役DataNode节点。

配置白名单

  1. 在$HADOOP_HOME/etc/hadoop路径下创建whitelist文件

  2. 在whitelist文件中添加白名单主机节点

    hadoop102
    hadoop103
    hadoop104
    hadoop105
    
  3. 在配置文件中hdfs-site.xml,添加白名单文件

    
    
        dfs.hosts
        /opt/module/hadoop-3.1.3/etc/hadoop/whitelist
    
    

    分发配置文件及白名单文件

  4. 重新启动集群

    my_cluster start
    

黑名单退役

  1. 在$HADOOP_HOME/etc/hadoop路径下创建blacklist文件

  2. 在blacklist文件中添加要退役的节点

    hadoop105
    
  3. 在配置文件中hdfs-site.xml,添加黑名单文件

    
    
        dfs.hosts.exclude
        /opt/module/hadoop-3.1.3/etc/hadoop/blacklist
    
    

    分发文件

  4. 刷新NameNode和ResourceManager

    hdfs dfsadmin -refreshNodes
    yarn rmadmin -refreshNodes
    
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/389475.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号