zoukankan      html  css  js  c++  java
  • HDFS写流程

    HDFS写流程
    [hadoop@hadoop002 hadoop-2.6.0-cdh5.7.0]$ hdfs dfs -put LICENSE.txt /
    19/02/20 21:30:22 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
    [hadoop@hadoop002 hadoop-2.6.0-cdh5.7.0]$

    对于我们操作者而言,是无感知的
    1.Client调用FileSystem.create(filePath)方法,
    去与NN进行【RPC】通信,check该路径的文件是否存在
    以及有没有权限创建该文件。 假如OK,就创建一个新文件,
    但是不关联任何的block,nn根据上传的文件大小且块大小且副本数,
    计算多少块,以及块存放的dn,最终将这些信息返回给客户端
    则为【FSDataOutputStream】。

    2.Client调用FSDataOutputStream.write方法,将第一个块的
    第一个副本写到第一个DN,写完写第二个副本,写完写第三个副本;
    当第三个副本写完,返回给ack packet给第二个副本的DN,然后第二个DN返回ack packet给第一个DN;
    第一个DN返回ack packet给FSDataOutputStream对象,标识第一个块,3副本写完!

    副本默认个数的参数设置参考:https://www.cnblogs.com/xuziyu/p/10426186.html
    然后依次写剩余的块!

    注意:

    客户端调用FSDataInputStream API的write方法首先将其中一个block写在datanode上,每一个block默认都有3个副本,并不是由客户端分别往3个datanode上写3份,而是由已经上传了block的datanode产生新的线程,由这个namenode按照放置副本规则往其它datanode写副本,这样的优势就是快。

    参考:https://www.cnblogs.com/fssqblogsit/p/6938999.html


    (对操作者来说是透明的)

    3.当向文件写入数据完成后,Client调用FSDataOutputStream.close()方法。关闭输出流,flush换成区的数据包。
    4.再调用FileSystem.complete(),通知NN节点写入成功。

    3DN
    3副本
    副本数据=DN

    1DN
    1副本
    测试:DN挂了 能不能写
    同比: 3DN 3副本 1DN挂了 肯定写不成功

    10DN
    3副本
    副本数据<DN
    测试:DN挂了 写

    总结: 存活的DN满足我们的副本数 就能写

  • 相关阅读:
    在Eclipse 2.0中使用版本控制系统CVS
    如何战胜软件测试的困境
    AJAX核心对象 XMLHttpRequest 对象使用详解 (二)
    javascript动态增加、删除、填充表格内容
    如何把SourceSafe中的数据转换成CVS的数据
    SOAP协议初级指南 (三)
    C#.Net的常见面试试题
    【转】jQuery中的编程范式 拓荒者
    DataTable的Compute方法和Expression语法 拓荒者
    下载网页内容,并编译生成CHM文件 拓荒者
  • 原文地址:https://www.cnblogs.com/xuziyu/p/10431932.html
Copyright © 2011-2022 走看看