HDFS 通信框架

news/2024/5/20 4:03:00 标签: hadoop, hdfs

1.HDFS 的各节点之间的通信框架概述
HDFS 之间的通信方式有两种:
(1)基于 RPC 的通信 (2)基于 TCP 或 HTTP 的通信
1)RPC 通信的接口
定义了客户端和 NameNode 的接口,客户端和 DataNode 的接口,DataNode 和 NameNode 的接口,DataNode 和 DataNode 的接口。
底层采用 Hadoop 的 RPC 通信协议,实现客户端与服务端之间的通信
2)基于 TCP 和 HTTP 通信的流式接口
(1)HDFS 客户端和 DataNode 以及 DataNode 之间的数据块的传输是基于 TCP 的(数据量大)
(2)Active NameNode 和 Standby NameNode 之间是采用 HTTP 接口实现通信的

2.HDFS 中 RPC 的通信接口及其主要功能
1)ClientProtocol
定义了所有由客户端发起,NameNode 响应的操作
核心:HDFS 文件读写相关的操作
(1)HDFS 文件读相关的操作
Ⅰ.getBlockLocations() 获得数据块的位置信息
Ⅱ.reportBadBlocks() 发现读数据异常时告知 NameNode 错误(校验和不正确)的数据块位置
(2)写数据相关操作
Ⅰ.create() 在 HDFS 的文件系统目录树创建一个空文件
Ⅱ.addBlock 向指定文件中添加一个新的数据块
Ⅱ.complete() 客户端完成写入操作(每个数据块满足系统配置的最小副本数,默认为 1)时告知 NameNode
2)DataNodeProtocol
NameNode 和 DataNode 之间通信的唯一方式
(1)DataNode 启动相关指令
Ⅰ.registerDataNode() 向 NameNode 注册
Ⅱ.blockReport() 汇报数据块信息
(2)心跳相关方法
sendHeartBeat() 向 NameNode 发送心跳信息,汇报 DataNode 的状态信息。NameNode 会返回一个 HeartbeatResponse 对象,内部封装了一个 DataNodeCommand 对象数组,包含了 NameNode 对 DataNode 的指令信息。心跳默认每 3 秒一次
(3)DataNode 数据块汇报指令
blockReport() 告知 NameNode 自己所有本地存储的数据块,启动时调用,默认汇报间隔为 6 小时
3)ClientDatanodeProtocol
客户端和 DataNode 之间的通信接口
(1)文件读写
Ⅰ.getReplicaVisibleLength() 获取数据块真实长度(可能由于某些错误导致与 NameNode 中的元数据信息不一致)
Ⅱ.getBlockLocalPathInfo() 本地化读取数据,避免跨节点传输

3.HDFS 中流式接口及其主要功能
1)DataTransferProtocol
基于 TCP 的流式接口,HDFS 客户端和 DataNode 以及 DataNode 之间的数据块的传输
Ⅰ.readBlock:从当前 DataNode 读取指定的数据块
Ⅱ.writeBlock:将指定的数据块写入数据流管道(pineline)中
2)HTTP 接口
Active NameNode 和 Standby NameNode 之间是采用 HTTP 接口实现通信,传输 fsimage。
Standby NameNode 会通过 HTTP 告知 Active NameNode 下载端口和地址,之后 Active NameNode 发起 HTTP 请求下载新合并的 fsimage


http://www.niftyadmin.cn/n/958862.html

相关文章

append()函数能用在列表元组字典中,不能用在字符串中,正反例

反&#xff1a; name Jose name.append(Jimenez)———————————————————— AttributeError Traceback (most recent call last) <ipython-input-62-f7a393e2dc37> in <module>1 name Jose ----> 2 name.append(J…

京东css3动画全屏海报_小猿圈WEB前端之HTML5+CSS3面试题(二)

上次小猿圈web前端老师讲到关于HTML5CSS3面试题&#xff0c;因为篇幅有限&#xff0c;只写了其中的一部分&#xff0c;下面我们就了解余下关于HTML5CSS3面试题的内容。一、消除transition闪屏.css{/*设置内嵌的元素在 3D 空间如何呈现&#xff1a;保留 3D*/-webkit-transform-s…

浅析 Spark RDD 的依赖关系

RDD 依赖关系和血缘关系 说明&#xff1a; 调用 toDebugString 方法可以查看 RDD 保存的血缘关系 RDD 窄依赖 新的 RDD 的一个分区的数据依赖于旧的 RDD 一个分区的数据&#xff0c;这个依赖称之为 OneToOne 依赖&#xff08;窄依赖&#xff09; 窄依赖表示每一个父(上游)RDD …

连接函数concatenate()把a、b两个数组连接起来

import numpy as np#读取数据 X [] f open(D:\g\datag\datas.txt) for v in f:X.append([float(v.split(,)[-2]),float(v.split(,)[-1])]) X np.array(X) a X[:,:1]/18.68*100 b X[:,1:]/17.54*100 X np.concatenate((a,b),axis 1) X

spark sql 本地调试_大数据分析工程师面试集锦:Spark 面试指南

本篇文章为大家带来spark面试指南&#xff0c;文内会有两种题型&#xff0c;问答题和代码题&#xff0c;题目大部分来自于网络上&#xff0c;有小部分是来自于工作中的总结&#xff0c;每个题目会给出一个参考答案。为什么考察Spark&#xff1f;Spark作为大数据组件中的执行引擎…

浅析 Spark 中 Key-Value 类型的 RDD

1.partitionBy 1&#xff09;函数签名 def partitionBy(partitioner: Partitioner): RDD[(K, V)]2&#xff09;函数说明 将数据按照指定 Partitioner 重新进行分区。Spark 默认的分区器是 HashPartitioner 注意&#xff1a;要将 rdd 转换为 Key-Value 元组类型&#xff0c;才…

sap 获取计划订单bapi_PP 常用bapi

BAPI&#xff1a;在SAP中可以允许使用BAPI访问标准功能&#xff0c;这些接口可以由外部应用程序开发的客户和配套软件的合作伙伴以及其他SAP应用程序使用。定义SAP业务对象类型的API方法&#xff0c;这些对象类型范围内的业务框架&#xff0c;用于基于对象的组件之间的通信。业…

位置参数、关键词参数;默认参数,可变参数区别

位置参数&#xff1a; 调用函数时根据函数定义的参数位置来传递参数。 关键词参数&#xff1a;&#xff08;字典&#xff09; 用于函数调用&#xff0c;通过“键-值”形式加以指定。可以让函数更加清晰、容易使用&#xff0c;同时也清除了参数的顺序需求。 默认参数&#xff…