HDFS 官方文档 中文

来源:互联网 发布:做微课的软件 编辑:程序博客网 时间:2024/05/16 14:43

HDFS是一个分布式文件系统,在普通的价格低廉的商用机器上运行,具有很高的容错性,读写性能很高,比较适用于大块文件,HDFS对外提供POSIX标准的流接口来读写文件。
1.设计目标
1.1宕机容忍
一个HDFS集群会包含数百上千个机器,每个都存储整个HDFS的一部分数据,如果有宕机情况,快速的侦测宕机和自动恢复是HDFS架构的主要设计目标。
1.2流式数据访问
HDFS设计目标更多是为批量处理使用,为性能考虑要用流式数据访问。
1.3大数据量
HDFS设计为大数据量服务,一个集群要容纳很大数据量。
1.4数据一致性
HDFS主要使用场景为一次写入多次读取,这种场景下,一个文件一般被写入HDFS后就不改变其内容了。HDFS为该场景设计,并提升性能。
1.5实现本地计算
也就是计算发生的位置要去接近数据所在的位置,尤其是数据量很大的时候,这样可以减少网络开销,让计算去寻找数据,而不是让数据去寻找计算。
2.NameNode和DataNode
HDFS是一个master-slave架构,一个HDFS由两个NameNode(Master)和两个或多个(Slave)DataNode组成,NameNode负责管理文件系统的命名空间和文件的访问权限,。NameNode负责给对外的接口给一个新的文件系统命名空间。
在内部,一个较大的外部文件写入HDFS的时候,会被切分成一个或多个数据块,NameNode有数据块向DataNode的映射关系。DataNode一般每台机器一个,负责管理数据的存储,比如创建数据块、删除数据块、数据块备份。

HDFS架构

2.数据备份
HDFS要为大文件提供分布式的可靠存储,每个外部文件在HDFS被存为一组数据块,除了最后一个数据块之外的所有数据块都是一样的大小,一个大文件的数据块是有备份的,可以在客户端配置备份数,一个外部文件的写入时的备份数可以指定,写入之后也可以更改。HDFS内部有个写锁,保证任何时候只有一个文件写入。
NameNode的行为都是靠DataNode定时周期传来的信息而定,这些信息有DataNode正常工作的信息,还有DataNode的数据块的信息。
3数据组织
3.1数据块
HDFS为存储多个大文件设计,一个典型的数据块是64MB,一个外部文件存到HDFS里会被切成64MB大小的chunk,如果可能每个chunk将会存在一个不同的DataNode上。
3.2步骤
一个创建文件的客户端请求不是直接到达NameNode,HDFS客户端首先会缓存这个文件到一个临时本地Linux文件系统里的文件,当这个临时文件积累超过HDFS设定的数据块大小,客户端会和NameNode通信,NameNode这时会向HDFS插入一个文件名并分配一个数据块,
然后NameNode返回给客户端一个DataNode的标识,刚才的临时文件这时写往DataNode。
之后客户端会告诉NameNode文件关闭了,NameNode会commit这次文件创建操作为一个持久化的操作。这种有客户端缓存的方式提高了性能。
3.3后续备份的完成,pipeline式。
在上述过程中,当NameNode返回给客户端信息的时候,会返回备份数个DataNode的列表,这时客户端会往该列表的第一个DataNode写数据,第一个DataNode接收一部分数据就向下一个也是第二个DataNode写数据(同时也向硬盘写),第二个DataNode也是接收一部分数据就往下一个写,这样可以保证每个DataNode都是在接收数据的同时往下一个写数据(同时写硬盘)。

0 0
原创粉丝点击