HDFS分布式存储框架

HDFS实现了大数据的分布式存储,在HDFS集群中主要包括namenode节点和datanode节点。

namenode节点

namenode节点负责管理元数据信息以及响应客户端的请求(上传、下载...注意,HDFS集群不支持修改操作)。

管理元数据

什么是元数据,为什么需要对元数据信息进行管理呢?因为集群是分布式的,不是单机存储(文件存储在真是路径下)。虽然是分布式存储,但是我们访问的时候实际上是看不到集群的,就像是在一个计算机上进行操作(这台计算机如同Linux系统一般,所有文件存储在根目录“/”下),用户不需要知道文件具体存放在集群中的哪个节点。要实现这样的功能,就需要元数据信息。总的来说,元数据保存了虚拟路径到真实路径的映射(一条元数据信息大概占用150byte)。虚拟路径是指HDFS中的路径,真实路径包括了一下信息:文件具体切成了几个block,每个block偏移量及具体存放位置。

元数据的存储目录在集群启动之前已经创建好,我们知道集群启动前需要对namenode进行格式化操作(hdfs namenode -format),这个格式化操作其实就是创建用来保持元数据的目录,并写入一些文件,元数据信息及其存储路径(真实路径)如下图所示。可以看出元数据分为两种,分别是fsimage和edits。其中edits保存最新的元数据信息,fsimage保存较旧的元数据(当edits大到一定程度时合并到fsimage,合并操作(checkpoint)由secondNamenode负责)。

响应客户端请求

对HDFS的访问是通过namenode来完成。当用户上传文件时,首先需要向namenode申请,namenode返回集群中的datanode给用户所在主机(同时,namenode也保存了所上传文件的元数据信息,写入了fsimage),然后向这些datanode写入。当需要从集群中下载文件时,首先把文件的虚拟路径丢给namenode,namenode找到虚拟路径所对应的真实路径返回给用户所在主机,然后从真实路径进行下载。下载文件时涉及到一个问题,就是对元数据信息进行检索,当集群存储的文件很多时,元数据信息可能有几个G,怎么对这个文件进行快速的检索?直接对磁盘中的文件进行检索肯定是不行的,这样很慢,实际情况是namenode启动时会把元数据信息加载到内存中(edits和fsimage都加载),实现快速访问。因此,namenode节点需要配备较大的内存(每百万数据块需要1000MB内存,一个数据块一条元数据信息)


datanode节点

datanode节点工作机制相对namenode简单很多,datanode负责真实数据的存储。datanode上存储的文件是以block为单位,block默认大小为128M,小于128M的文件也视为一个block,大于128M的文件会被切分成多个block。block的存储路径及block文件如下图所示。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值