数据组

数据块保存在不同的数据节点上
家用磁盘分块扇区 扇区最小512k
大数据存储机制类似 只不过每扇区64-128M
块越大 节省名字节点内存 提高吞吐量 减少文件寻找时间 节省通讯量
块越小 反之 节省带宽 浪费空间
大数据分块:可以在一台2t机器存不上4t文件的情况下,分块存在不同的存储节点上!
分块情况下,备份数据很容易,不需要整个备份,只需要替换出错点!
大数据系统不适宜存放多但数据小的文件 浪费空间 浪费性能

复制

任何一个文件有三个副本
机架感知策略:同一个机架上的主机可以直接进行通信,不经过网络交换机!
不经过交换机的情况下,网络通信速度很快
缺点:不同机架的数据块分部的不均匀
限制:每一个机架最多能保存的副本数量,默认:3
计算公式:(number_of_replicas-1)/number_of_racks+2
备份总数不能超过机架总数的三分之二
每个主机节点保存数据块的一个副本,多了没必要,造成空间浪费

三个副本存储在两个不同的机架上,三个不同的节点!
利用机架之间通信速率高的特点

HDFS 通信体系结构

底层使用TCP/ip协议
客户端命令 ———— JavaAPI —(传输层tcp/ip)-- nameno/datanode
远程过程调用 应用层,基于tcp/ip

create: 本地调用,远程(名字节点)执行
append: 附加文件(尾部)数据
setReplication: 创建附加数据
addBlock: 将其他数据块写入文件,并已datanode执行

客户端与数据节点通信频繁,采用“流”式协议,并不是远程方法调用

客户端与数据节点之间的通信使用tcp/ip 协议,之间存在Buffer(缓存),可以将客户端cpu性能完全使用,避免资源浪费!
应用缓存一般是由内存分布

readBlock: 读操作
writeBlock: 写操作
transferBlock: 备份操作
blockChecksum: 循环校验 MD5与CRC32

数据节点与名字节点通信
数据节点与名字节点之间的通信属于单向通信(远程方法调用)
registerDatanode: 注册数据节点
sendHeartbeat: 每隔一段时间发送一些心跳信息(同时反馈数据节点信息过时情况与命令),证明是否正常(每三秒)
blockReport: 定期汇报块信息数据

通过api隐藏复杂数据
元数据:创建信息,存储目录,时间,文件分块,块在哪存着,文件数据是否正常,监督文件操作!

最后修改:2021 年 04 月 21 日 09 : 41 AM
如果觉得我的文章对你有用,请随意赞赏