• hdfs的客户端读写流程以及namenode,secondarynamenode,checkpoint原理


    一、客户端写入数据

    1、客户端向NameNode发送上传文件的请求。

    2、NameNode检查目录(这个文件是否已经存在),若已存在,返回错误,不存在,则继续。

    3、NameNode给客户端发送可以上传的信息。

    4、客户端再次向NameNode发送上传请求。

    5、NameNode检查节点DataNode信息。

    6、NameNode根据上传文件大小调度DataNode节点,调度出最合适的DataNode队列返回给客户端(例如dn1,dn2,dn3)。

    DataNode会每隔3秒向NameNode发送数据,报告自己的状态。

    7、客户端告诉DataNode上传数据。

    8、客户端和DataNode建立传输通道。

    (客户端接收队列数据通过pop方法:取出第一个节点的地址,然后访问该节点,并把剩下的节点的IP地址带过去。

      第一个DataNode接收数据,再从队列中取出第一个,再把剩下的IP地址带过去,直到最后一个节点结束;

      最后一个节点收到信息后,向源地址发送确认信息,确认信息到第一个DataNode的时候,DataNode会把确认信息返回给客户端。)

    9、上传数据。

    (客户端接收到确认信息后,开始往每一个DataNode上写入数据。)

    10、最终写入成功,会将写入成功的信息返回给客户端。客户端向NameNode汇报数据写入成功,NameNode将信息写入元数据中。

    最后NameNode通知DataNode自动做副本平衡。

    二、客户端读数据

    1、客户端请求NameNode下载文件。(NameNode里面记录了DataNode的地址,存放的是块的编号)

    2、NameNode把元数据的信息返回给客户端。

    3、客户端接收到信息,去相应的DataNode的具体块上请求数据。

    4、传输数据。

    三、元数据、NameNode、SecondaryNameNode、checkpoint原理

    NameNode中读、写、以及DataNode映射等信息叫做“元数据” ,NameNode元数据存放位置有、内存、fsimage、edits log三个位置。

    1、edits log:记录当前最新的元数据。

    2、元数据内存:实际在用的元数据。

    3、simage:元数据内存实体文件,fsimage与NameNode内容是是一样的(最全元数据)

    当edits log文件大小达到阈值,会将edits log元数据写入到fsimage文件,并清除edits log中的元数据。

    比如在此目录下fsimage_0000000000000000063就是元数据

    NameNode中的fsimage信息每半小时更新一次,新文件和旧文件合并更新

    SecondaryNameNode实质是对NameNode数据的备份,如果NameNode的机器挂掉了,可以根据SecondaryNameNode保证机器的正常运作。

    所以NameNode和SecondaryNameNode不能放在一起。

    修改hdfs.xml配置SecondaryNameNode的地址

    <property>
            <name>dfs.namenode.secondary.http-address</name>
            <value>hdp02:50090</value>
    </property>

    Checkpoint原理

    参见:https://www.cnblogs.com/hanyuanbo/archive/2012/07/25/2608698.html

  • 相关阅读:
    MySQL 入门教程
    .net 定时服务
    【搜索面板】规格信息单选
    【搜索面板查询】品牌单选(term过滤查询)
    【搜索框查询】搜索功能+搜索框内容回显
    商品上下架(发布订阅模式)
    Canal广告缓存实现(工作队列模式)
    FastDFS分布式文件系统(适合存储小文件 )
    跨域(浏览器限制本行为)
    购物网站项目
  • 原文地址:https://www.cnblogs.com/yangy1/p/12383706.html
Copyright © 2020-2023  润新知