深入理解 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 上传文件,看看内部是如何通信的:
版权声明: 本文为 InfoQ 作者【冰心的小屋】的原创文章。
原文链接:【http://xie.infoq.cn/article/913a108eddadfc34ffc88c50a】。文章转载请联系作者。
评论