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

最新文章

  1. 黑马程序员——C语言基础 内存剖析
  2. TYVJ 4354 多重背包二进制优化
  3. Ubuntu为何永远绝对的免费?
  4. sqlserver2008 R2 创建作业(定时任务)
  5. [Redis]c# redis缓存辅助类
  6. github优秀开源项目大全-iOS
  7. Cocos2d-x 3.0 事件系统【转】
  8. 微信分享朋友链接显示js代码
  9. LinQ to SQL 查询
  10. VS2012 安装出错 :通道正在关闭
  11. pthon核心编程-读书笔记:知识点摘录与总结(方便理解和快速记忆)
  12. 编写高质量的Python代码系列(一)之用Pythonic方式来思考
  13. 在win中,给powershell客户端,搭建sshd服务器。
  14. 【相关网站 - 01】- Java 相关网站
  15. $Django 路飞学城项目简介
  16. 继上篇后的Excel批量数据导入
  17. 难点--均方误差(MSE)和均方根误差(RMSE)和平均绝对误差(MAE)
  18. show processlist命令与kill 线程
  19. http认证方式,工程部分实现
  20. MFC连接MySQL

热门文章

  1. HDUOJ-4104 Discount
  2. 如何查看USB方式连接Android设备的外接设备信息
  3. oc 类的使用
  4. OGG_GoldenGate数据迁移三进程Extract / Dump / Relicat(案例)
  5. 普里姆Prim算法介绍
  6. codeforces #296 div2 (527C) STL中set的运用
  7. python 异步编程
  8. μCOS-II系统之事件(event)的使用规则及Semaphore实例
  9. android的一些控件
  10. Generics Variance