写点什么

深入理解 HDFS(四):通信渠道

作者:冰心的小屋
  • 2023-08-08
    北京
  • 本文字数:1065 字

    阅读完需:约 3 分钟

深入理解 HDFS(四):通信渠道

试想下面的场景:


  • 场景 1:当 HDFS 集群启动时,Datanode 如何向 Namenode 进行注册?

  • 场景 2:当 HDFS 集群运行时,Namenode 如何收集汇总所有的 Block 信息?又通过什么方式·监听 Datanode 心跳?主动还是被动?

  • 场景 3:当你使用 HDFS Client 上传文件,Client 都和谁进行了联络?分别联络了什么内容?而文件最终是如何从 Client 到 Datanode 中的?是串行传输还是并行?


对于上面的场景 HDFS 内部是如何通信的呢?

1. 事件

HDFS 集群每天都会有各种各样不同种类的事件,可以按照主题对这些事件进行划分:

2. Namenode 通信渠道

Namenode 在启动时会为上面不同的主题事件创建专属的通信渠道:


  • serviceRpcServer: 处理 HDFS 集群内部服务发送的请求,例如 BackupNode 和 Datanodes 等;

  • clientRpcServer:默认绑定 9000 端口,处理客户端发送的请求,例如客户端创建文件夹、上传和访问文件等;

  • lifelineRpcServer:处理和生命周期相关的请求,例如健康信息和 Namenode 各种状态的切换;

  • HTTP Server:默认绑定 9870 端口,提供 Namenode 的概览界面,其中包括集群状态、存储资源、Datanode 管理和其他查看日志、指标、配置的工具。

3. Datanode 通信渠道

Datanode 主要处理和 Block 相关的事件,可能来自客户端,也可能是其他 Datanode 节点。


  • ipcServer:默认绑定 9867 端口,处理内部其他 Datanode 节点发送的请求,请求有如下分类:

  • 节点自身相关: getDatanodeInfo、getVolumeReport 和 shutdownDatanode 等;

  • Block 相关: getBlockLocalPathInfo、deleteBlockPool 和 triggerBlockReport 等;

  • Balancer 相关:getDiskBalancerSetting、getBalancerBandwidth、submitDiskBalancerPlan 和 cancelDiskBalancePlan。

  • dataXceiverServer:默认绑定 9866 端口,接收 Block 数据流,可能来自 Client 或其他 Datanode 节点;

  • HTTP Server:默认绑定 9864 端口,提供 Datanode 的概览界面,其中包括 Block Pool 信息、存储资源、Datanode 管理和其他查看日志、指标、配置的工具。


Datanode 也可以作为 Client 角色,与 Namenode 和 其他 Datanode 节点通信:


  • 和 Namenode 通信主要有两类请求:

  • 节点自身相关:启动时的注册 registerDatanode、运行时的心跳 sendHeartbeat 和节点信息 sendLifeline;

  • Block 相关:上报 blockReport、缓存 cacheReport、异常报告 errorReport、block 的添加或删除 blockReceivedAndDeleted 以及 block 的同步提交 commitBlockSynchronization。

  • 其他 Datanode 节点通信:使用 BlockSender 发送 block 数据流。

4. 让通信渠道联通起来

下面是通过使用 HDFS Client 上传文件,看看内部是如何通信的:


发布于: 刚刚阅读数: 3
用户头像

分享技术上的点滴收获! 2013-08-06 加入

一杯咖啡,一首老歌,一段代码,欢迎做客冰屋,享受编码和技术带来的快乐!

评论

发布
暂无评论
深入理解 HDFS(四):通信渠道_hdfs_冰心的小屋_InfoQ写作社区