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/p/8492362.html

时间: 2024-10-17 12:50:48

datanode与namenode的通信的相关文章

DataNode与NameNode交互机制相关代码分析

HDFS Federation是为解决HDFS单点故障而提出的NameNode水平扩展方案,该方案允许HDFS创建多个Namespace以提高集群的扩展性和隔离性.在Federation中新增了block-pool的概念,block-pool就是属于单个Namespace的一组block,每个DataNode为所有的block-pool存储block,可以理解block-pool是一个重新将block划分的逻辑概念,同一个DataNode中可以存储属于多个block-pool的多个block.所

Hadoop源码学习笔记(5) ——回顾DataNode和NameNode的类结构

Hadoop源码学习笔记(5) ——回顾DataNode和NameNode的类结构 之前我们简要的看过了DataNode的main函数以及整个类的大至,现在结合前面我们研究的线程和RPC,则可以进一步看看几个对象的大至结构以及调用关系. 我们知道,三个结构(客户端,NameNode,DataNode)是能过网络调用的,走的是RPC.那在底层通讯时谁做服务器谁做客户端呢?我们先回顾一下这三者关系: 这样看,看不出,我们进入源码,看一下夹在中间的NameNode: 在这个initialize函数中,

HDFS(一)架构及文件读写流程

Hadoop 中有三大组件:HDFS.MapReduce.YARN,HDFS 负责大文件存储的问题,MapReduce 负责大数据计算,而 YARN 负责资源的调度,接下来的文章我会一一介绍这几个组件.今天我们先来聊聊 HDFS 的架构及文件的读写流程. 总体架构 HDFS 设计的目的是为了存储大数据集的文件,因此一台服务器是应付不了的,我们需要一个集群来实现这个目标.当用户需要存储一个文件时,HDFS 会将这个文件切分为一个个小的数据块(在 2.x 的版本中,每个数据块默认大小为 128M),

好程序员大数据学习路线分享HDFS读流程

1.客户端或者用户通过调用FileSystem对象的Open()方法打开需要读取的文件,这时就是HDSF分布式系统所获取的一个对象 2.FileSystem通过远程协议调用NameNode确定文件的前几个Block的位置,对于每一个block,NameNode返回一个含有Block的元数据信息,接下来DataNode按照上面定义的距离(offSet偏移量)进行排序,如果Client本身即是一个DataNode,那么就会优先从本地DataNode节点读取数据. HDFS完成上面的工作之后返回一个F

Hadoop中NameNode、DataNode和Client三者之间的通信方式是什么?怎样进行合作?

一直没有重视三者之间的通信问题,在此整理一下提问:datanode之间有没有交互?Hadoop安装时ssh如何配置? 1.背景知识: 在Hadoop系统中,master/slaves/client的对应关系是:master---namenode:slaves---datanode:client---dfsclient:通信方式简单地讲:client和namenode之间是通过rpc通信:datanode和namenode之间是通过rpc通信:client和datanode之间是通过简单的sock

Hadoop介绍-4.Hadoop中NameNode、DataNode、Secondary、NameNode、JobTracker TaskTracker

Hadoop是一个能够对大量数据进行分布式处理的软体框架,实现了Google的MapReduce编程模型和框架,能够把应用程式分割成许多的 小的工作单元,并把这些单元放到任何集群节点上执行.在MapReduce中,一个准备提交执行的应用程式称为「作业(job)」,而从一个作业划分出 得.运行于各个计算节点的工作单元称为「任务(task)」.此外,Hadoop提供的分布式文件系统(HDFS)主要负责各个节点的数据存储,并实现了 高吞吐率的数据读写. 在分布式存储和分布式计算方面,Hadoop都是用

Hadoop学习笔记,MapReduce任务Namenode DataNode Jobtracker Tasktracker之间的关系

一.基本概念 在MapReduce中,一个准备提交执行的应用程序称为“作业(job)”,而从一个作业划分出的运行于各个计算节点的工作单元称为“任务(task)”.此外,Hadoop提供的分布式文件系统(HDFS)主要负责各个节点的数据存储,并实现了高吞吐率的数据读写. 在分布式存储和分布式计算方面,Hadoop都是用主/从(Master/Slave)架构.在一个配置完整的集群上,想让Hadoop这头大象奔跑起来,需要在集群中运行一系列后台程序.不同的后台程序扮演不用的角色,这些角色由NameNo

hadoop中NameNode、DataNode和Client三者之间协作关系及通信方式介绍

1)NameNode.DataNode和Client NameNode可以看作是分布式文件系统中的管理者,主要负责管理文件系统的命名空间.集群配置信息和存储块的复制等.NameNode会将文件系统的Meta-data存储在内存中,这些信息主要包括了文件信息.每一个文件对应的文件块的信息和每一个文件块在DataNode的信息等. DataNode是文件存储的基本单元,它将Block存储在本地文件系统中,保存了Block的Meta-data,同时周期性地将所有存在的Block信息发送给NameNod

04 namenode和datanode

namenode元数据管理 1.什么是元数据? hdfs的目录结构及每一个文件的块信息(块的id,块的副本数量,块的存放位置<datanode>) 2.元数据由谁负责管理? namenode 3.namenode把元数据记录在哪里? namenode的实时的完整的元数据存储在内存中: namenode还会在磁盘中(dfs.namenode.name.dir)存储内存元数据在某个时间点上的镜像文件: namenode会把引起元数据变化的客户端操作记录在edits日志文件中: namenode主要