zoukankan      html  css  js  c++  java
  • HDFS 运行流程

    客户端文件读数据流程:
    1、客户端通过调用FIleSystem 的 open方法获取需要读取的数据文件。
    2、dfs 通过RPC来调用NameNode,获取要读取的数据文件对应的block存放在哪些DataNode上。
    3、客户端先到距离最近的DataNode上调用FSDataInputStream 的read 方法,将数据从DataNode传输到客户端。
    4、当读取完所有的数据后,FSDataInputstream 会关闭与DataNode的连接,寻找下一块的最佳位置(即距离最近的下一块)。
    5、当客户端完成读取操作之后,会调用FSDataInputStream的close方法完成对资源的关闭工作。


    客户端写数据流程:
    1、客户端通过调用dfs的create 方法来创建一个文件。
    2、dfs 向NameNode 发起RPC请求,在namespace 中创建一个新的文件
    3、客户端调用FSDataOutputStream 的write方法将数据写到一个内部队列中,假设副本系数为3,那么将队列中的数据写入到三个副本对应的DataNode上
    4、FSDataOutputStream 内部维护者一个确认队列,当接收到所有DataNode写完消息之后,数据才会从确认队列中消除
    5、当客户端完成数据的写入之后,会对数据流调用close方法关闭资源。

    HDFS上的文件对应的Block 保存有多个副本并且提供容错机制,因此副本丢失或者宕机时能够自动恢复,默认将会保存三个副本

    副本存放策略:
    第一个副本放置在上传文件的DataNode上,如果是集群外提交,则随机挑选一个节点
    第二个副本放置在与第一个副本不同机架的节点上
    第三个副本放置在与第二个副本相同机架的不同节点上。

    上传到HDFS系统中的文件副本数是由当时的Hadoop系统副本数决定的,不会受副本系数的影响。(比如说上传hello.txt时的副本系数为3,那么hello.txt 的副本数就是3,以后无论怎么修改副本系数,hello.txt 的副本数都不会变了)

    在上传文件时,可以指定副本系数。dfs.replication 是客户端属性,如果不指定,将会采用默认的副本数。
    例如: hadoop fs -setrep 6 testHadoop/hello.txt 那么hello.txt 的副本系数就是6。
    指定的副本系数只会影响本次文件的上传,并不会修改掉默认的副本数,默认的副本数可以在hdfs-site.xml 中进行设置。


    HDFS 负载均衡:
    当某个DataNode 上的空闲空间低于某个阈值后,系统将会自动地将数据从这个DataNode上同步到其他的数据节点上。
    在Hadoop 中,包含一个start-balancer.sh的脚本,通过这个脚本可以设置HDFS 的数据均衡服务。

    ./start-balancer.sh -threshold 通过threshold 可以设置阈值,取值范围0-100,默认是10.
    理论上该参数值越小,整个集群越平衡。

  • 相关阅读:
    SQL Server 中WITH (NOLOCK)浅析
    C#中Monitor对象与Lock关键字的区别分析
    lock,Monitor,Mutex的区别
    如何在windows7中使用“专用字符编辑器”中的字
    ppapi,npapi
    配置OpenLDAP,Java操作LDAP,DBC-LDAP进访问
    List of Mozilla-Based Applications
    TLS协议分析
    编译Chrome详细步骤
    黑客惯用软件
  • 原文地址:https://www.cnblogs.com/wbringarden/p/10217433.html
Copyright © 2011-2022 走看看