浅谈HDFS架构

HDFS源于谷歌在2003年10月份发表的GFS (Google文件系统)论文只

1,

<李>

数据自动保存多个副本。它通过增加副本的形式,提高容错性。

<李>

某一个副本丢失以后,它可以自动恢复,这是由HDFS内部机制实现的,我们不必关心。

<李>

它是通过移动计算而不是移动数据。

<李>

它会把数据位置暴露给计算框架。

<李>

处理数据达到GB,结核病,甚至PB级别的数据。

<李>

能够处理百万规模以上的文件数量,数量相当之大。

<李>

能够处理10 k节点的规模。

<李>

简化一致性模型,实现一次写入,多次读取。文件一旦写入不能修改,只能追加。

<李>

它能保证数据的一致性。

<李>

它通过多副本机制,提高可靠性。

<李>

它提供了容错和恢复机制。比如某一个副本丢失,可以通过其它副本来恢复。

,,,,,,,,,*比如毫秒级的来存储数据,这是不行的,它做不到。

,,,,,,,,,*它适合高吞吐率的场景,就是在某一时间内写入大量的数据。但是,,,,,,,,,,,它在低延时的情况下是不行的,比如毫秒级以内读取数据,这样它,,,,,,,,,,,是很难做到的。

,,,,,,,,*存储大量小文件(这里的小文件是指小于HDFS系统的块大小的文,,,,,,,,,64件(默认))的话,它会占用NameNode大量的内存来存储文,,,,,,,,,,,件,目录和块信息。这样是不可取的,因为NameNode的内存总是有,,,,,,,,,,限的。

,,,,,,,,*小文件存储的寻道时间会超过读取时间,它违反了HDFS的设计目,,,,,,,,,,标。

,,,,,,,,*一个文件只能有一个写,不允许多个线程同时写。

,,,,,,,,*仅支据append(追加),不支持文件的随机修改。

,hdfs的特性:

四个部分组成。

浅谈hdfs架构

1、客户:就是客户端。

<李>

文件切分。文件上传hdfs的时候,客户端将文件切分成一个一个的块,然后进行存储。

<李>

与NameNode交互,获取文件的位置信息。

<李>

与DataNode交互,读取或者写入数据。

<李>

客户提供一些命令来管理hdfs,比如启动或者关闭hdfs。

<李>

客户端可以通过一些命令来访问hdfs。

2, NameNode:就是主人,它是一个主管,管理者。

<李>

管理hdfs的名称空间

<李>

管理数据块(块)映射信息

<李>

配置副本策略

<李>

处理客户端读写请求。


浅谈hdfs架构

3, DataNode:就是Slave.NameNode下达命令,DataNode执行实际的操作。

<李>

存储实际的数据块。

<李>

执行数据块的读/写操作。

4,二级NameNode:并非NameNode的热备,然后当挂掉的时候,它并不能马上替换NameNode并提供服务。

<李>

辅助NameNode,分担其工作量。

<李>

定期合并fsimage和fsedits,并推送给NameNode。

<李>

在紧急情况下,可辅助恢复NameNode。

<>强工作流程:

,,,,,然后,secondarynamenode通知切换编辑文件

,,,,,,secondarynamenode从namenode获得fsimage和编辑(通过http)

,,,,,,secondarynamenode将fsimage载入内存,然后开始合并编辑

,,,,,,secondarynamenode将新的fsimage发回给namenode

,,,,,然后,用新的fsimage替换旧的fsimage


,,,,,*当DN (DataNode)读取块的时候,它会计算校验和,

,,,,,*如果计算后的校验和,与块创建时值不一样,说明该块已经损坏。

,,,,,*客户读取其它DN上的块;神经网络(NameNode)标记该块已经损坏,然后复制块达到预期设置的文件备份数;

,,,,,* DN在其文件创建后三周验证其校验和。


浅谈HDFS架构


浅谈HDFS架构