hdfs以流式数据访问模式来存储超大文件,其构建思路为:一次写入,多次读取是最高效的访问模式;hdfs是为了搞数据吞吐量优化的;hdfs只支持单个写入者,而且写操作总是以 “ 只添加 ” 的方式在文件末尾写数据。
hdfs概念
1.块(block)
hdfs的块默认为128M,hdfs上的文件也被划分为块大小的多个分块,作为独立的存储单元。但与面向单一磁盘的文件系统不同的是,hdfs中小于一个块大小的文件不会占用整个块的空间
对分布式文件系统中的块适合用于数据备份进而提供数据容错能力和提高可用性。将每个快复制到少数几个物理上相互独立的机器上(默认为3个)
2.namenode和datanode
hdfs集群有一个namenode(管理节点)和多个datanode(工作节点)
namenode管理文件系统的命名空间,它维护着文件系统树及整棵树内所有的文件和目录。这些信息以两个文件形式永久的保存在本地磁盘上:命名镜像空间文件(fsimages)和编辑日志文件(edit logs);
datanode根据需要存储并检索数据块(受客户端或namenode调度),并且定期向namenode发送他们存储的块的列表
联邦hdfs
namenode在内存中保存文件系统中的每个文件和每个数据块的引用关系,这意味着对于一个拥有大量文件的超大集群来说,内存将成为限制系统横向扩展的瓶颈。在2.x版本引入的联邦hdfs允许系统通过添加namenode来实现扩展,其中每个namenode负责管理文件系统命名空间的一部分。
在联邦环境下,每个namenode维护一个命名空间卷(namespace volume),由命名空间的元数据和一个数据块池(block pool)组成,数据块池包含该命名空间下文件的所有数据块。命名空间卷之间相互独立,其中一个namenode失效也不会影响其他namenode维护命名空间的可用性