zoukankan      html  css  js  c++  java
  • Datanode 怎么与 Namenode 通信?

    在分析DataNode时, 因为DataNode上保存的是数据块, 因此DataNode主要是对数据块进行操作.
    A. DataNode的主要工作流程

    1. 客户端和DataNode的通信: 客户端向DataNode的数据块读写, 采用TCP/IP流接口(DataXceiver)进行数据传输
    2. 客户端在检测到DataNode异常, 主动发起的数据块恢复, 客户端会通过ClientDatanodeProtocol接口采用RPC调用的方式和DataNode通信.
    3. 数据块替换和拷贝, 由负载均衡器Balancer发起的, 是发生在DataNode之间. 也是通过DataXceiver进行数据传输
    4. DataNode在启动后会向NameNode分别完成: 握手, 注册, 心跳, 块报告.
    5. NameNode根据DataNode的块报告和心跳, 会返回给DataNode指令. 通过这种方式NameNode间接地和DataNode进行通信.
      实际上NameNode作为Server端, 是不会主动去联系DataNode的, 只有作为客户端的DataNode才会去联系NameNode.
      DataNode在接收到NameNode的指令信息, 被要求去做: 重新向NameNode注册, 数据块传输, 恢复等.
    6. NameNode检测到数据块的副本个数不足. 要求DN执行数据块传输(DNA_TRANSFERBLOCK), DataNode使用DataTransfer也是基于DataXceiver流接口.
    7. NameNode发起的数据块恢复(DNA_RECOVERBLOCK), 是检测到客户端/租约错误, 恢复策略是选取参与到恢复过程中的数据块的最小长度.
    8. 不管是客户端错误会被NN返回数据块恢复命令给DN执行恢复操作, 还是DN错误由客户端主动触发的数据块恢复操作. 都会使用到
      InterdatanodeProtocol的两个数据块恢复方法(startBlockRecovery和updateBlock).
      因为数据块恢复实际上是在DN之间根据恢复策略恢复到数据块正常的状态. 而且恢复时不像写数据没有数据来源. 所以是在DN之间进行通信.

    B. 从DataNode的功能来看:

    1. DataNode实现的两个接口ClientDatanodeProtocol和InterDatanodeProtocol都用于数据块恢复.
    2. 数据块的其他操作使用TCP/IP流式接口来完成: DataXceiver(读写, 替换, 复制)和DataTransfer(传输).

    C. 从DataNode的通信来看:

    1. 客户端可以向DataNode发起读写数据块请求, 主动发起数据块恢复.
    2. DataNode向NameNode握手, 注册, 心跳, 块报告. 并接收NameNode的指令.

    原文出处:https://www.cnblogs.com/30go/

  • 相关阅读:
    【转】做好测试计划和测试用例工作的关键
    【转】RESTful Web Services初探
    最快排序和搜索算法的最简代码实现_转
    排序算法
    libevent简述
    linux异步IO--aio
    长志气戒傲气 必须时刻保持冷静
    LACP-链路聚合
    AM335x移植linux内核_转
    4种用于构建嵌入式linux系统的工具_转
  • 原文地址:https://www.cnblogs.com/bigband/p/13550846.html
Copyright © 2011-2022 走看看