2.HDFS架构HDFS 是一个高度容错性的系统,适合部署在廉价的机器上。 HDFS 能提供高吞吐量的数据访问,非常适合大规模数据集上的应用。其解决了海量数据存储问题,突破了单体服务器的存储能力。
HDFS是分布式主从系统架构,通常包含一个NameNode 节点和多个 DataNode 节点。存储文件时,一个文件被分成了一个或者多个数据块,并存储在多个 DataNode 上,不同DataNode 会对其他DataNode 的数据块进行备份,称为副本(默认共3个)
2.1 NameNode
NameNode可以当做一个管理者。
基于内存存储管理文件的元数据信息。HDFS集群的管理者master:管理集群中所有的datanode。元数据:描述数据属性的信息。如文件名、大小、存储位置、类型、权限等。
接收客户端文件操作的请求(文件元数据操作请求)。掌握datanode健康状况,了解磁盘容量,数据分布的负载均衡。均衡使用datanode的磁盘空间。集合多个datanode服务器的网络带宽,提高数据传输速度。
存储了文件拆分后的block分布信息。如打开,关闭和重命名文件和目录。
如:block0–所在datanode的ip–起始位置–大小–checksum校验和
2.2 DataNode
HDFS的从机slave,数据节点。(干活的)
DataNode 是文件系统的工作节点,供客户端和NameNode 调用并执行数据块datablock的上传下载创建删除请求。管理存储数据文件切分后的block块(默认128MB),存放硬盘上。定期向namenode发送心跳(3s),告知datanode(ip 磁盘容量)。2.3 block
文件切分后的数据块。
默认大小:128MB 原因:现有服务器机房局域网网络带宽千兆带宽==125MB/s 注意: block过大:导致单个block网络传输速度过慢,无法利用多个datanode网络传输的带宽。 block过小:block个数过多,导致namenode内存过度占用,导致不足。
2.4 replication:副本
每个block在hdfs的datanode会存储多份。
默认replication=3,每个block有3份。 原因:防止datanode因为单点故障,导致数据丢失。
2.5 checksum:校验和
hdfs文件的数字指纹。
作用:datanode定期向namenode汇报文件的checksum,由namenode判断文件是否完整。注意: 如果文件不完整,namenode会协调从损坏数据块的副本所在DataNode拷贝损坏的数据块。
3、HDFS相关原理3.1NameNode持久化
3.1.1 SecondaryNameNode
NameNode会将客户端的操作指令信息存储到Editslog文件中,然后再按照指令操作元数据。
SecondaryNameNode向NameNode发起合并请求。NameNode将当前的Editslog文件保存改名edits,并新建EditsLog继续持久化工作。将改名后的edits文件和本地的FSImage(旧)发送给sencondaryNameNode。SecondaryNameNode负责将FSImage(旧)+edits文件合并成FSImage(新)。将新的FSImage(新)发送给NameNode保存。非实时merge,一旦NameNode挂了,可能会导致元数据丢失;
持久化触发条件: 1.超过3600s 2.edits.log的大小超过64M时 3.默认累计操作次数满100w次操作就会触发保存检查点操作
3.1.2 Standby NameNode
HDFS 第一次格式化后, NameNode 就会生成 fsimage 和 editslog 两个文件。Standby NameNode从主用 NameNode 上下载FSimage,并从共享存储中读取 EditLog;Standby NameNode将日志和旧的元数据合并,生成新的元数据 FSImage.ckpt;Standby NameNode将元数据上传到主用NameNode;NameNode 将上传的元数据进行回滚。实时merge,一旦前者挂了,后者能够马上顶上,不会出现元数据丢失。
非HA高可用时,有Secondary NameNode;HA时,有Standby NameNode。