hadoop中hdfs的结构图
HDFS:分布式文件系统被设计成适合运行在通用硬件的分布式文件系统。HDFS是一个高度容错的系统,适合部署在廉价服务器上面,适合应用在集群。下面是HDFS的三个特点:
1.超大文件:这里的文件指的是几百Gb甚至几百TB的文件,分别分布在集群中的服务器。而目前已经有存储PB级别的集群了。
2.采用流方式进行数据访问:
(1) 而流方式是什么呢?网上很多博主把流式数据方访问比如为流水,特点就是,像流水一样,不是一次过来而是一点一点“流”过来。而你处理流式数据也是一点一点处理。如果是全部收到数据以后再处理,那么延迟会很大,而且在很多场合会消耗大量内存。
(2)一次写入、多次读取 :HDFS存储的数据集作为hadoop的分析对象。在数据集生成后,长时间在此数据集上进行各种分析。每次分析都将设计该数据集的大部分数据甚至全部数据,因此读取整个数据集的时间延迟比读取第一条记录的时间延迟更重要。
3.运行在廉价服务器上
HDFS设计理念之一可以让他运行在廉价硬件上面,即使硬件出现了错误,也可以通过容错策略来保证数据的高可用。
下面是HDFS的概念图
什么是元数据
任何文件系统中的数据分为数据和元数据。数据是指普通文件中的实际数据,而元数据指用来描述一个文件的特征的系统数据,诸如访问权限、文件拥有者以及文件数据块的分布信息(inode...)等等。在集群文件系统中,分布信息包括文件在磁盘上的位置以及磁盘在集群中的位置。用户需要操作一个文件必须首先得到它的元数据,才能定位到文件的位置并且得到文件的内容或相关属性。这里举个例子:元数据在数据库概念设计里面是这样描述的:描述数据的数据,比如在数据库里面建一张表,表名是user,那么user就是元数据,因为系统可以根据元数据来获取user表的信息,比如user表的权限,索引,数据库列名等。
而HDFS就是将巨大的数据变成大量数据的
上面的途中元数据块标识后生成了相应的磁盘块,举个例子,比如一个数据长度为10000通过分片分为三份,分别是0~3333,3333~6666,6666~10000,那么就会在元数据块记录了0~3333数据块分布在磁盘1,存储量为3333字节,检验方式是什么。其他分片数据依次类推。ps下面蒋结合大数据的NameNode和DataNode结合分析,加深元数据理解:
一个HDFS文件系统包括一个主控节点NameNode和多个DataNode,其中NameNode对应元数据,而DataNode对应的是元数据描述的数据。
NameNode:NameNode是一个主服务器,用来管理整个文件系统的命名空间和元数据,以及处理来自外界的文件访问请求。NameNode 保存了文件系统的三种元数据:
1) 命名空间, 即整个分布式文件系统的目录结构;
2 ) 数据块与文件名的映射表;
3) 每个数据块副本的位置信息,每一个数据块默认有3 个副本
DataNode:NameNode 上可以执行文件操作,比如打开、关闭、重命名等; 而且NameNode 也负责向DataNode分配数据块并建立数据块和DataNode 的对应关系。
DataNode 负责处理文件系统用户具体的数据读写请求,同时也可以处理NameNode 对数据块的创建、删除副本的指令。
典型的部署模式采用NameNode单独运行于一台服务器节点上,其余的服务器节点,每一台运行一个DataNode
HDFS的基本访问流程:
首先,用户的应用程序通过HDFS 的客户端程序将文件名发送至NameNode 。NameNode 接收到文件名之后,在HDFS 目录中检索文件名对应的数据块,再根据数据块信息找到保存数据块的DataNode 地址,将这些地址回送给客户端。
客户端接收到DataNode 地址之后,与DataNode 并行地进行数据传输操作,同时将操作结果的相关日志(比如是否成功,修改后的数据块信息等)提交到NameNode 。
网友评论