HDFS架构原理

HDFS架构

1、设计思想

hdfs是一个很好的分布式存储系统,解决了一个系统盘存储不了大量数据的问题,故使用多台机器的磁盘空间作为文件的存储系统,并将一个文件切分成多个块,将切分后的多个块分散存储在多台机器上。一个块的大小默认是128M,而且每一个文件北切分的块都是独立的,会被存储在不通过的机器上。隐藏不会有超大文件的影响,也可以部署在廉价机器上。
hdfs提供的功能:
要对文件进行切分
要能够查出文件本切分的块
机器挡掉了,启用副本机制

hdfs组成架构

HDFS架构原理_第1张图片
hdfs主要包含:namenode、datanode、Secondarynode 、hdfsClient
hdfsClient:客户端自己编写的代码+hadoopapi
作用
切分上传的文件
写文件时与namenode交互,获取文件的位置信息
与datanode交互,读取或写入文件
可以通过一些命令来管理或者访问hdfs
namenode:hdfs的 元数据(内存中)管理者
作用
管理hdfs的文件目录树
管理block的映射信息和副本信息
处理客户端的读写请求(主要是返回block位置信息)
datanode:实际存储数据块的节点,服从namenode的命令,几台服务器就有几个datanode
作用
存储数据块
响应读写操作

Secondarynode :是namenode的助手
作用
定期合并 Fsimage 和 Edits,并推送给 NameNode。

Fsimage 镜像文件,是元数据在某个时间段
的快照,Edits 记录了生成快照之后的一些列操作。
HDFS 在最初格式化启动时,
创建 Edits 和 Fsimage 文件,并在内存中维护一版元数据信息。
edits主要记录我们对hdfs的一些操作,如删除文件,创建文件等,
Fsimage是多个edits的合并,存的是元数据目录树信息,当namenode挂掉后,可以通过Fsimage进行恢复。

注意:hdfs的每一次重启,需要将 Fsimage 加载到内存中,并把 Eidts 文件中的操作执行一遍,才是完整的元数据信息
缺点
不适合低延时数据访问(hbase可以)
无法存储大量的小文件。因为会占用namenode大量的内存,导致nn的崩溃。且小文件的寻址时间要大于读取时间,违反了hdfs的设计目标。
不支持并发写入、文件随机修改。

hdfs的写数据流程

HDFS架构原理_第2张图片
客户端向namenode请求上传文件,namenode检查目录结构是否存在,存在把此目录结构返回给客户端,不存在返回异常。
客户端请求上传第一个数据块,可以上传到那几个dtanode上,namenode返回多个datanode节点(视集群个数而定)。
datanodse根据路由路径选取离得最近的datanode节点,请求上传block,此datanode又与其他的datanode的建立联系,形成一个完整的通道。
此时datanode开始上传第一个数据块,(先从磁盘读取数据放到一个本地内存缓存),以 packet(64KB)为单位,datanode 收到一个 packet 就会传给其他datanode,一个给一个传输;
当一个block上传完成后,重新请求上传第二个block,继续请求namenode可以上传到那几个datanode,在重复以上步骤,直至上传到一个完整的文件。

hdfs读数据流程

HDFS架构原理_第3张图片
客户端向namenode发起读请求,namenode接收到请求,检查文件是否 存在,存在返回请求文件的block列表,不存在报异常。
然后客户端根据block列表(各个块所在的datanode地址)根据最近路由路径原则,去读取相应的block块,当第一个block读取完毕,接着读取写一个block块,如果第一批 block 都读完了,就会再向 NameNode 请求下一批blocks 的 location,然后继续读,如果所有的 block 块都读完,这时就会关闭
掉所有的流

你可能感兴趣的:(hadoop,hdfs,大数据)