。
HDFS源于谷歌在2003年10月份发表的GFS (Google文件系统)论文只
1,
- <李>
数据自动保存多个副本。它通过增加副本的形式,提高容错性。
李> <李>某一个副本丢失以后,它可以自动恢复,这是由HDFS内部机制实现的,我们不必关心。
李>
- <李>
它是通过移动计算而不是移动数据。
李> <李>它会把数据位置暴露给计算框架。
李>
- <李>
处理数据达到GB,结核病,甚至PB级别的数据。
李> <李>能够处理百万规模以上的文件数量,数量相当之大。
李> <李>能够处理10 k节点的规模。
李>
- <李>
简化一致性模型,实现一次写入,多次读取。文件一旦写入不能修改,只能追加。
李> <李>它能保证数据的一致性。
李>
- <李>
它通过多副本机制,提高可靠性。
李> <李>它提供了容错和恢复机制。比如某一个副本丢失,可以通过其它副本来恢复。
李>
,,,,,,,,,*比如毫秒级的来存储数据,这是不行的,它做不到。
,,,,,,,,,*它适合高吞吐率的场景,就是在某一时间内写入大量的数据。但是,,,,,,,,,,,它在低延时的情况下是不行的,比如毫秒级以内读取数据,这样它,,,,,,,,,,,是很难做到的。
,,,,,,,,*存储大量小文件(这里的小文件是指小于HDFS系统的块大小的文,,,,,,,,,64件(默认))的话,它会占用NameNode大量的内存来存储文,,,,,,,,,,,件,目录和块信息。这样是不可取的,因为NameNode的内存总是有,,,,,,,,,,限的。
,,,,,,,,*小文件存储的寻道时间会超过读取时间,它违反了HDFS的设计目,,,,,,,,,,标。
,,,,,,,,*一个文件只能有一个写,不允许多个线程同时写。
,,,,,,,,*仅支据append(追加),不支持文件的随机修改。
,hdfs的特性:
四个部分组成。
1、客户:就是客户端。
- <李>
文件切分。文件上传hdfs的时候,客户端将文件切分成一个一个的块,然后进行存储。
李> <李>与NameNode交互,获取文件的位置信息。
李> <李>与DataNode交互,读取或者写入数据。
李> <李>客户提供一些命令来管理hdfs,比如启动或者关闭hdfs。
李> <李>客户端可以通过一些命令来访问hdfs。
李>2, NameNode:就是主人,它是一个主管,管理者。
- <李>
管理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在其文件创建后三周验证其校验和。