在分析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的指令.

datanode与namenode的通信原理的更多相关文章

  1. datanode与namenode的通信

    在分析DataNode时, 因为DataNode上保存的是数据块, 因此DataNode主要是对数据块进行操作. A. DataNode的主要工作流程1. 客户端和DataNode的通信: 客户端向D ...

  2. 基于web的IM软件通信原理分析

    关于IM(InstantMessaging)即时通信类软件(如微信,QQ),大多数都是桌面应用程序或者native应用较为流行,而网上关于原生IM或桌面IM软件类的通信原理介绍也较多,此处不再赘述.而 ...

  3. Socket 通信原理(Android客户端和服务器以TCP&&UDP方式互通)

    转载地址:http://blog.csdn.net/mad1989/article/details/9147661 ZERO.前言 有关通信原理内容是在网上或百科整理得到,代码部分为本人所写,如果不当 ...

  4. SSL 通信原理及Tomcat SSL 配置

    SSL 通信原理及Tomcat SSL 双向配置 目录1 参考资料 .................................................................. ...

  5. Java 下 SSL 通信原理及实例

    有关SSL的原理和介绍在网上已经有不少,对于Java下使用keytool生成证书,配置SSL通信的教程也非常多.但如果我们不能够亲自动手做一个SSL Sever和SSL Client,可能就永远也不能 ...

  6. AIDL通信原理

    AIDL (Android Interface Definition Language),通过定义通信接口来实现进程间通信.这是Google提供的一种在安卓应用进程间通信的工具.所以要了解AIDL的通 ...

  7. Java基础知识强化之网络编程笔记02:Socket通信原理图解

    1. Socket (1)Socket套接字  网络上具有唯一标识的IP地址和端口号组合在一起才能构成唯一能识别的标识符套接字 (2)Socket原理机制:  • 通信两端都有Socket.  • 网 ...

  8. Python Socket通信原理

    [Python之旅]第五篇(一):Python Socket通信原理   python Socket 通信理论 socket例子 摘要:  只要和网络服务涉及的,就离不开Socket以及Socket编 ...

  9. RS-232通信原理

    rs232串口通信原理 串口是计算机上一种非常通用设备通信的协议(不要与通用串行总线Universal Serial Bus或者USB混淆).大多数计算机包含两个基于RS232的串口.串口同时也是仪器 ...

随机推荐

  1. [原创]java WEB学习笔记16:JSP指令(page,include),JSP标签(forwar,include,param)

    本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当 ...

  2. DELPHI中四种EXCEL访问技术实现

    一.引言 EXCEL在处理中文报表时功能非常强大,EXCEL报表访问也是信息系统开发中的一个重要内容,本文总结以往开发中所用到的几中EXCEL文件访问方法,在实际工作中也得到了很好的验证,本文列举了其 ...

  3. Selenium-浮层的操作

    实现-百度登录浮层-输入登录用户名 #! /usr/bin/env python #coding=utf-8 ''' 百度首页-登录浮层 ''' from selenium import webdri ...

  4. pyglet--EventLoop对象(主事件循环,用于从系统消息队列中取出消息,并派发给各个窗口)

    一.识别系统消息,并派出该消息 EventLoop(应用程序的事件循环),用于循环的从系统消息队列中获取系统消息(包含消息的各种参数:如鼠标位置,事件类型,鼠标左右键,哪个键盘键等),然后派发相应的事 ...

  5. codeforces 633D D. Fibonacci-ish(dfs+暴力+map)

    D. Fibonacci-ish time limit per test 3 seconds memory limit per test 512 megabytes input standard in ...

  6. stl_multiset.h

    stl_multiset.h // Filename: stl_multiset.h // Comment By: 凝霜 // E-mail: mdl2009@vip.qq.com // Blog: ...

  7. ACM学习历程—HDU4417 Super Mario(树状数组 && 离线)

    Problem Description Mario is world-famous plumber. His “burly” figure and amazing jumping ability re ...

  8. 51nod 1486 大大走格子——容斥

    题目:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1486 已知起点到某个障碍点左上角的所有点的不经过障碍的方案数,枚举 ...

  9. bzoj 2535 & bzoj 2109 航空管制 —— 贪心+拓扑序

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2535 https://www.lydsy.com/JudgeOnline/problem.p ...

  10. codeblocks如何支持_tmain?可移植代码的编码推荐

    codeblocks默认源代码文件编码根据OS而定,编译时编码UTF-8. 在你不更改任何codeblocks配置时:                    在WINDOWS中:源代码——WINDOW ...