当前位置: 首页 > news >正文

【HDFS】客户端读某个块时,如何对块的各个副本进行网络距离排序?

本文包含如下内容:
① 通过图解+源码分析/A1/B1/node1和 /A1/B2/node2 这两个节点的网络距离怎么算出来的
② 客户端读文件时,副本的优先级。(怎么排序的,排序规则都有哪些?)
③ 我们集群发现的一个问题。

客户端读时,通过调用getBlockLocations RPC 获取文件的各个块。
在给客户端返回这些块信息之前,NameNode会对每个块的各个副本(例如默认的3副本)按照一定规则排序。

这些规则大概有:
① 把在decommissioned/stale/slow这些状态节点上的副本移到后面;
② 计算客户端与每个副本所在节点的网络距离,把距离小的放在前面;
③ 同时也会考虑 storage type、节点的load(Xceiver线程数)等因素。

顺着 ClientProtocol#getBlockLocations 这个RPC方法往下找,最终找到相关的源码位置,
org.apache.hadoop.hdfs.server.namenode.FSNamesystem#sortLocatedBlocks方法:

此方法参数:

  • clientMachine:代表客户端机器的字符串,一般是ip;
  • blocks:客户端要读的文件的块的信息(LocatedBlocks对象里有LocatedBlock对象的列表)。
  private 
http://www.lryc.cn/news/115738.html

相关文章:

  • 【数字化处理】仿生假体控制中肌电信号的数字化处理研究(Matlab代码实现)
  • 谷歌推出Flax:JAX的神经网络库
  • PDF换行的难度,谁能解决?
  • 山东布谷科技直播程序源码使用Redis进行服务器横向扩展
  • symfony3.4中根据角色不同跳转不同页面
  • Dockerfile部署golang,docker-compose
  • 什么是Linux,如何在Windows操作系统下搭建Linux环境,远程连接Linux系统
  • Ubuntu下RabbitMQ安装与简单使用
  • 力扣62.不同路径(动态规划)
  • TypeScript 泛型的概念和基本使用
  • redis的事务和watch机制
  • objectMapper.getTypeFactory().constructParametricType 方法的作用和使用
  • 【websocket - Tornado】简易聊天应用
  • TCP 三次握手,四次挥手
  • Nginx之Rewrite重定向
  • uni-app微信小程序开发自定义select下拉多选内容篇
  • VUE+view table.exportCsv()导出.csv文档时如何防止数据格式为科学计数
  • Java基础练习六(排序)
  • 【Go】Go数据操作 - 处理JSON文件
  • 服务器之LNMP
  • 恒运资本:定向增发一般多久完成?
  • mysql进阶篇(二)
  • 考研C语言进阶题库——更新31-32题
  • 机动车号牌正则表达式(兼容新能源车牌)
  • idea如何上传项目到github(超详细)
  • 护网专题简单介绍
  • GO学习之 网络通信(Net/Http)
  • <dependency> idea中为什么这个变黄色
  • SA8000 社会责任要求之健康安全准则
  • SpringMVC的架构有什么优势?——控制器(三)