该随笔记录HDFS学习过程中遇到的比较重要的几个过程,包括:HDFS启动流程、DataNode备份流程、流程、写流程、删除流程、HDFS合并流程。
这里都是从我的学习笔记中摘取出来的,如果哪里有误,还望不吝赐教。

1. 读流程
  1)客户端发起RPC请求(RPC-Client)访问NameNode;
  2)NameNode会查询元数据,找到这个文件存储位置对应的数据块的信息;
  3)NameNode将文件对应的数据块的节点地址的全部或者部分放入一个队列中然后返回;
  4)Client收到这个数据块对应的节点地址;
  5)Client会从队列中取出第一个数据块对应的节点地址,会从这些节点地址中选择一个最近的节点进行读取;
  6)将Block读取之后,对Block进行checksum/完整性验证,如果验证失败,说明数据块已损坏,那么Client会向NameNode发送信息说明该节点上的数据块损坏,然后从其他节点中再次读取这个数据块;
  7)验证成功,则从队列中取出下一个Block的地址,然后继续读取;
  8)当把这一次的文件全部读完之后,Client会向NameNode请求下一批Block的地址;
  9)当文件读完之后,Clent向NameNode发送读取完成的信号,NameNode就会关闭对应的文件。

2. 写流程
  1)客户端发起RPC请求(RPC-Client)访问NameNode;
  2)NameNode接收请求,对请求进行验证,如该请求中的文件是否存在,权限验证;
  3)如果验证通过,NameNode会确定文件的大小,计算分块的数量,分配对应的节点(一般会找磁盘空间相对空闲的节点),将节点地址放入队列中返回给客户端;
  4)客户端收到地址后,从队列中依次取出节点地址,然后将数据块依次放入对应的节点中;
  5)写完之后,客户端向NameNode发送写完数据的信号,NameNode会给客户端返回关闭文件的信号;
  6)dataNode之间会通过管道进行自动备份,以保证复本的数量。

3. 删除流程
  1)Client发起RPC请求(RPC-Client)到NameNode;
  2)NameNode收到请求之后,会将这个操作记录到edits中,然后将该文件的元数据信息从内存中删掉,给客户端返回一个删除成功的信号;
  3)客户端收到信号后,认为数据已经删除,关闭连接,实际上此时数据依然存在于DateNode中;
  4)当DataNode下一次向NameNode发送心跳信号(接地状态,节点数据)时,NameNode就会检查这个DataNode中的数据;
  5)如果发现DataNode中存在元数据中没有的记录,NameNode就会做出响应,命令DataNode删除对应的数据;
  6)备份中的数据会通过管道进行同步(删除主节点中已经不存在的数据)。

4. DataNode备份流程

  1)DataNode定时向NameNode发送心跳信息(3S),心跳信息中包含当前节点状态以及节点数据;
  2)NameNode接收到心跳信息以后会检查这个DataNode中的文件信息(与NameNode中的元数据进行对比);
  3)如果NameNode发现DataNode中不含元数据记录的文件,就会命令DataNode从其他节点进行备份;
  4)如果发现DataNode中存在元数据中没有的记录,NameNode就会做出响应,命令DataNode删除对应的数据;

5. HDFS合并流程
  NameNode中有3个文件:
    fsimage:
      存储元数据。但是注意fsimage中的元数据和内存中并不一致,也就意味着fsimage中的数据并不是实时数据。
    edits:
      记录HDFS的操作。对HDFS的操作,会:
        1)首先将操作记录到edits文件中;
        2)如果edits文件操作成功,那么将这个操作更新到内存中。
           这么做的的目的是,保证每一步操作不会丢失。
        3)当达到触发条件时,再将edits文件中的操作更新到fsimages中。
      触发更新的条件:
        1)文件大小:根据配置文件设置的edits log大小触发,fs.checkpoint.size默认64M;
        2)时间间隔:根据配置文件设置的时间间隔:fs.checkpoint.period默认3600S;
        3)重启HDFS:重启HDFS也会触发更新。
    fstime:
      记录上一次更新的时间;

  将fsiamge文件与edits文件合并的流程如下:
    1)当达到触发条件,将edits和fsimage通过网络拷贝到SecondaryNameNode中;
    2)此时会在NameNode中生成一个edits.new文件用于记录合并期间的操作;
    3)拷贝完成之后,fsimage就会将数据存储到SecondaryNameNode的内存中;
    4)将edits的操作更新到SecondaryNameNode的内存中;
    5)更新完成之后,将内存中的数据写入fsimage.ckpt文件中;
    6)通过网络将fsimage.ckpt拷贝到NameNode中;
    7)将fsimage.ckpt重命名为fsiamge,edits.new重命名为edits;
  正因合并的机制,SecondaryNameNode虽然不是NameNode的热备份,但也能起到备份的作用,防止数据丢失。

6. HDFS启动流程
  1)NameNode启动,合并edits和fsimage得到最新的fsimage;
  2)NameNode等待DataNode的心跳,并根据DataNode报告的持有的Block的信息在内存中得到块和DataNode的映射关系,并在需要时复制和删除Block;
  3)等到有足够数量的DataNode后,NameNode开始对外提供服务;
  4)启动过程可能需要消耗一定的时间,这段时间内HDFS无法对外提供服务,称之为HDFS处于安全模式下。如果一直处于安全模式下可能是由于没有足够数量的DataNode启动,可以强制退出安全模式,但是不推荐这么做,可能会损坏元数据。

HDFS的一些重要流程的更多相关文章

  1. HDFS写入和读取流程

    HDFS写入和读取流程 一.HDFS HDFS全称是Hadoop Distributed System.HDFS是为以流的方式存取大文件而设计的.适用于几百MB,GB以及TB,并写一次读多次的场合.而 ...

  2. HDFS追本溯源:HDFS操作的逻辑流程与源码解析

    本文主要介绍5个典型的HDFS流程,这些流程充分体现了HDFS实体间IPC接口和stream接口之间的配合. 1. Client和NN Client到NN有大量的元数据操作,比如修改文件名,在给定目录 ...

  3. Hadoop(8)-HDFS的读写数据流程以及机架感知

    1. HDFS的写数据流程 1.客户端通过fs模块向NameNode申请文件上传,NameNode检查请求是否合法,如用户权限,目标文件是否已存在,父目录是否存在等等 2.NameNode返回是否可以 ...

  4. HDFS的上传流程以及windows-idea操作文件上传的注意

    HDFS的上传流程 命令:hdfs dfs -put xxx.wmv /hdfs的文件夹 cd进入到要上传文件的当前目录,再输入hdfs命令上传,注意-put后tab可以自动补全, 最后加上你要上传到 ...

  5. hadoop学习笔记(六):HDFS文件的读写流程

    一.HDFS读取文件流程: 详解读取流程: Client调用FileSystem.open()方法: 1 FileSystem通过RPC与NN通信,NN返回该文件的部分或全部block列表(含有blo ...

  6. hadoop之 解析HDFS的写文件流程

    文件是如何写入HDFS的 ? 下面我们来先看看下面的“写”流程图:  假如我们有一个文件test.txt,想要把它放到Hadoop上,执行如下命令: 引用         # hadoop fs  - ...

  7. HDFS 读/写数据流程

    1. HDFS 写数据流程 客户端通过 Distributed FileSystem 模块向 NameNode 请求上传文件, NameNode 检查目标文件是否已存在,父目录是否存在: NameNo ...

  8. HDFS数据流——读数据流程

    HDFS读数据流程 假设客户端请求下载文件/user/atguigu/ss.avi,HDFS读数据流程如下: 1)客户端向namenode请求下载文件,namenode通过查询元数据,找到文件所有文件 ...

  9. HDFS数据流——写数据流程

    剖析HDFS文件写入 假设文件ss.avi共200m,其写入HDFS指定路径/user/atguigu/ss.avi流程如下: 1)客户端向namenode请求上传文件到指定路径,namenode通过 ...

随机推荐

  1. 【转】jenkins+gitlab配置遇到问题

    搭建jenkins+gitlab拉取代码失败,日志如下: ERROR: Error fetching remote repo 'origin'hudson.plugins.git.GitExcepti ...

  2. java基础语法-内部类与匿名内部类

    1.成员内部类(声明在类内部&&方法之外) class Person{ String name = "韩梅梅"; int age; class Bird{ Stri ...

  3. Log4j 2使用教程一【入门】

    环境 操作系统:win10log4j2版本: 2.11.0 准备 下载jar包 官网:https://logging.apache.org/log4j/2.x/download.html 把jar包放 ...

  4. python-列表与元组

    列表(List)     特性:         列表也是一种Sequence 类型        下标         能切片         可以存储任何类型的数据,每个元素是任意类型,可以存放任 ...

  5. Character

    Character a = new Character(); Character.isUpperCase(a) 判断给点的字符是否是大写字符 Character.isLowerCase(a) 判断给定 ...

  6. 如何在Ubuntu 16.04上安装PythonGDAL 2.1?

    sudo add-apt-repository -y ppa:ubuntugis/ubuntugis-unstable sudo apt update sudo apt upgrade # if yo ...

  7. 剑指offer(66)机器人的运动范围

    题目描述 地上有一个m行和n列的方格.一个机器人从坐标0,0的格子开始移动,每一次只能向左,右,上,下四个方向移动一格,但是不能进入行坐标和列坐标的数位之和大于k的格子. 例如,当k为18时,机器人能 ...

  8. (Code) Python implementation of phrase extraction from sentence

    import os import numpy as np import pandas as pd from tqdm import tqdm import numpy as np import str ...

  9. 【HNOI 2018】转盘

    Problem Description 一次小 \(G\) 和小 \(H\) 原本准备去聚餐,但由于太麻烦了于是题面简化如下: 一个转盘上有摆成一圈的 \(n\) 个物品(编号 \(1\) 至 \(n ...

  10. RsaUtils

    参考来源:https://www.cnblogs.com/pcheng/p/9629621.html 里面的这段话,非常好 RSA加密对明文的长度有所限制,规定需加密的明文最大长度=密钥长度-11(单 ...