写的不到位的地方,欢迎评论指出不足之处
1、节省消耗
● 为了降低整体的带宽消耗和读取延时,HDFS会尽量让读取程序读取离它最近的副本
● 如果在读取程序的同一个机架上有一个副本,那么就读取该副本
● 如果一个 HDFS 集群跨越多个数据中心,那么客户端也将首先读本地数据中心的副本
● 总之,先读取最近的(本地)
2、全级操作(获取所有块)
● 语义
● 下载一个文件
● HDFS Client 和 NameNode 交互文件元数据获取 fileBlockLocation(块的位置信息)
● NameNode 会按距离策略排序返回
● HDFS Client 尝试下载 Block 并校验数据完整性
● 如果在读取某个 DataNode 时(读取失败、校验不对),则从副本中读取
3、子级操作(获取指定块)
● 语义
● 下载一个文件其实是获取文件的所有Bock元数据,那么子集获取某些 Block应该成立
● HDFS 支持 Client 给出文件的 offset
● 自定义连接哪些 Block 的 DataNode,自定义获取数据
● 这个是支持计算层的分治、并行计算的核心