Hadoop之分布式文件存储系统Hdfs

简单了解一下Hadoop的Hdfs(分布式文件存储系统)

1、Hdfs将一个很大的数据分割成很多小的数据块(Blocks)存储在数据节点(DataNode)上,由NameNode进行管理
2、提供副本进行容错及可靠性保证,每个数据默认在两个不通机架的三个节点上保存由三个副本
3、HDFS是针对MapReduce设计的,使得数据尽可能根据其本地局部性进行访问与计算。
5、提供对这些信息的快速访问,并提供可扩展的方式。能够通过简单加入更多服务器的方式就能够服务更多的
在这里插入图片描述
NameNode
文件信息在硬盘上保存成两个文件:命名空间镜像文件(fsimage)和修改日志文件(edit log)。此外,NameNode还保存一个文件,用来存储数据块在数据节点的分布情况。系统启动之时,这些信息会加载到内存中。
1.存储文件元数据,比如整棵树的目录结构,运行时所有数据都保存到内存,整个HDFS可存储的文件数受限于NameNode的内存大小
2.运行NameNode的服务器至关重要,只有1个,一旦失效则整个文件系统失效
3.只对元数据的增删做日志记录,不对block和文件流做记录。
4.DataNode故障时,负责创建更多的副本block5、数据会定时保存到本地磁盘,但不保存block的位置信息,而是由DataNode注册时上报和运行时维护(NameNode中与DataNode相关的信息并不保存到NameNode的文件系统中,而是NameNode每次重启后,动态重建)
DataNode
1.存储真实数据,即各个数据块
2.可运行在多种文件系统上(ext3/4,NTFS …)
3.通知NameNode自己有哪些block(定期像NameNode发送心跳包)
4.NameNode在同一机架创建放置一个副本, 另一机架放置2个副本。
5、负责数据的读写操作和复制操作
Block数据块;
1、 基本存储单位,一般大小为64M(配置大的块主要是因为:1)减少搜寻时间,一般硬盘传输速率比寻道时间要快,大的块可以减少寻道时间;
2)减少管理块的数据开销,每个块都需要在NameNode上有对应的记录;
3)对数据块进行读写,减少建立网络的连接成本)一个大文件会被拆分成一个个的块,然后存储于不同的机器。如果一个文件少于Block大小,那么实际占用的空间为其文件的大小基本的读写单位,类似于磁盘的页,每次都是读写一个块每个块都会被复制到多台机器,默认复制3份
Secondary
NameNode定时与NameNode进行同步(定期合并文件系统镜像和编辑日志,然后把合并后的传给NameNode,替换其镜像,并清空编辑日志,类似于CheckPoint机制),但NameNode失效后仍需要手工将其设置成主机

HDFS读操作

在这里插入图片描述
1、客户端调用FileSystem 实例的open 方法,获得这个文件对应的输入流InputStream。
2、通过RPC 远程调用NameNode ,获得NameNode 中此文件对应的数据块保存位置,包括这个文件的副本的保存位置( 主要是各DataNode的地址) 。
3、获得输入流之后,客户端调用read 方法读取数据。选择最近的DataNode 建立连接并读取数据。
4、如果客户端和其中一个DataNode 位于同一机器(比如MapReduce 过程中的mapper 和reducer),那么就会直接从本地读取数据。
5、到达数据块末端,关闭与这个DataNode 的连接,然后重新查找下一个数据块。
6、不断执行第2 - 5 步直到数据全部读完。
7、客户端调用close ,关闭输入流DFS InputStream。

Hdfs写操作

在这里插入图片描述
1.应用程序通过HDFS客户端向NameNode发起远程过程调用请求。

2.NameNode检查要创建的文件是否存在以及是否有足够的权限。

3.如果检测成功,NameNode会返回一个该文件的记录,否则让客户端抛出异常。

4.HDFS客户端把文件切分为若干个packets,然后向NameNode申请新的blocks存储新增数据。

5.NameNode返回用来存储副本的数据节点列表。

6.HDFS客户端把packets中的数据写入所有的副本中。

7.最后一个节点数据写入完成以后,客户端关闭。

猜你喜欢

转载自blog.csdn.net/qq_41700030/article/details/100025298