zoukankan      html  css  js  c++  java
  • hdfs的读写流程总结及问题分析(面试必问)

    HDFS采用的是master/slaves这种主从的结构模型管理数据,这种结构模型主要由四个部分组成,分别是Client(客户端)、Namenode(名称节点)、Datanode(数据节点)和SecondaryNameNode。HDFS作为hadoop的分布式储存框架,最重要的莫过于数据流的读写过程了,下面就HDFS得数据流的读写流程做个详细的剖析。

    HDFS的写流程

    首先写操作的shell命令:

    hdfs dfs -put ./file02 /file02   
    hdfs  dfs -copyFromLocal  ./file02 /file02   
    FSDataOutputStream fsout = fs.create(path);fsout.write(byte[])    
    fs.copyFromLocal(path1,path2)

    具体流程详解:

    如下图所示是整个写流程及原理(上传)

    1.客户端向namenode发出请求上传数据;

    2.namenode在接到请求之后,开始查找元数据(查找是否存在这个目录以及查询上传者是否有这个权限),查询后向客户端响应是否可以上传数据。

    3.客户端接到响应之后,再开始请求上传第一块数据(数据分块是由客户端操作的),例如图中的0-128m为第一块数据。

    4.namenode接到请求后,向客户端返回datanode节点信息(副本放在哪个节点上,例如放在DN1,DN2,DN3这三台机器上)。一般规则有近远远,近远近

    5.客户端根据返回的副本信息向datanode请求建立传输通道,以级联的方式进行请求

    6.datanode向客户端响应,若都应答成功,则传输通道建立成功。

    7.开始传输数据,以packet方式传输,以chunk为单位进行校验,默认1m。

    8.第一块上传成功,第二块开始从3-7步骤继续传输

    9.待传输完成之后,客户端向namenode报告数据传输远程,由namenode更新元数据

    在hdfs的写流程有几个核心问题:

    1.传输blk1的过程中,dn3如果死了,集群会怎么处理?

    不做任何处理,错误会想nn报告

    2.接1,如果dn3又启动了,集群会如何处理?

    dn3启动时,会向nn发送块报告,然后nn指示dn3删除blk1(因为传输数据不完整)

    3.客户端建立通道时,发现dn3连接不上,会怎么办?

    nn会重新分配三个节点

    4.传输过程中,packet出错,会如何处理?

    会重新上传,但是重传次数只有4次,超过限制则提示传输失败

    5.如果bk1上传成功,blk2坏了,或者blk2上传时,dn1挂了,如何处理?

    nn会将整个文件标记为无效,下次dn向nn发送块报告时,nn会通知这些块所在的节点删除

     

    HDFS的读操作

    首先读操作的shell命令(下载)

    hdfs dfs -get /file02 ./file02    
    hdfs  dfs -copyToLocal  /file02 ./file02    
    FSDataInputStream fsis = fs.open(path);    
    fsis.read(byte[] a)    
    fs.copyToLocal(path1,path2)  

    具体流程详解

     由图可知HDFS的读流程要比写流程简单很多,主要步骤:

    1.客户端请求下载数据

    2.nn检测数据是否存在,给客户端响应

    3.客户端请求下载第一块数据

    4.nn返回目标文件的元数据

    5.客户端请求dn建立传输通道

    6.dn响应

    7.开始传输数据

    注意点:

    在读操作中在客户端和dn建立传输通道时不是采用级联方式,而是首先寻找离自己最近的副本(dn1)下载,如果数据不完整或者没有找到,就再向dn2建立传输通道,然后传输数据,依次往下,直到下载到目标文件为止。

    hdfs的重要知识点,建议收藏哦

  • 相关阅读:
    odoo11 外部数据导入方法2
    odoo 11 实现多个字段对应一个查询参数的查询
    ionic 访问odoo11之具体业务类api接口
    ionic访问odoo 11接口
    odoo 11导入外部数据过程记录
    程序发送邮件的思考
    Topshelf的Ioc实现
    查看MS Sqlserver文件大小语句
    TopShelf 自动配置Service测试
    odoo11 添加自定义模块报错问题
  • 原文地址:https://www.cnblogs.com/s1023/p/12436004.html
Copyright © 2011-2022 走看看