赞
踩
HDFS是Hadoop Distributed File System的简称,是Hadoop抽象文件系统的一种实现。是一个用Java实现、分布式的、可扩展的文件系统。Hadoop抽象文件系统可以与本地系统、Amazon S3等集成,甚至可以通过Web协议(webhsfs)来操作。
- HDFS的文件分布在集群机器上,同时提供副本进行容错及可靠性保证。例如客户端写入读取文件的直接操作都是分布在集群各个机器上的,没有单点性能压力。
- Hadoop Distributed File System
1.易于扩展的分布式文件系统
- 运行在大量普通廉价机器上,提供容错机制
- 为大量用户提供性能不错的文件存取服务
- HDFS的主要功能是做存储用的,把每一份数据创建多个副本、做复制,默认的副本数是3份。
数据:数据内容
元数据:文件名称 大小 所属人 地址 128k
架构中三个角色的作用
NameNode:是Master节点,集群老大
(1)管理文件系统中文件的元数据信息;
(2)维护文件到块、块到节点的对应关系;
(3)维护用户对文件的操作信息(增删改查)。DataNode:Slave节点
(1)负责存储客户端(client)发来的数据块block;
(2)执行数据块的读写操作。SecondaryNameNode:严格来说并不是NameNode备份节点,主要给NameNode分担压力
(1)周期性的将元数据节点的fsimage(文件系统目录树)和fsedits(文件系统元数据操作日志)合并,以防止日志文件过大。
(2)合并后的fsimage在从元数据节点保存了一份,以防止元数据节点失败时恢复。
- 硬件错误:数量众多的廉价机器使得硬件错误成为常态。
- 数据流访问:应用以流的方式访问数据;设计用于 数据的批量处理,而不是低延时的实时交互处理。放弃全面支持POSIX。
- 大数据集:典型的HDFS上的一个文件大小是G或T数量级的,支持一个云中文件数量达到千万数量级。
- 简单的相关模型:假定文件一次写入多次读取。未来可能支持Appending-write的模型。
- 移动计算比移动数据便宜:一个应用请求的计算,离它操作的数据越近就越高效。
- 多种软硬件平台中的可移植性
概念和特性
HDFS 是一个 文件系统,用于存储文件,通过统一的命名空间—目录树来定位文件
其次,它是分布式的,由很多服务器联合起来实现其功能,集群中的服务器有各自的角色;
HDFS核心概念
1.Blocks
物理磁盘中有块的概念,磁盘的物理Block是磁盘操作最小的单元,读写操作均以Block为最小单元,一般为512 Byte。文件系统在物理Block之上抽象了另一层概念,文件系统Block物理磁盘Block的整数倍。通常为几KB。Hadoop提供的df、fsck这类运维工具都是在文件系统的Block级别上进行操作。
HDFS的Block块比一般单机文件系统大得多,默认为128M。HDFS的文件被拆分成block-sized的chunk,chunk作为独立单元存储。比Block小的文件不会占用整个Block,只会占据实际大小。例如, 如果一个文件大小为1M,则在HDFS中只会占用1M的空间,而不是128M。
2.HDFS的Block为什么这么大?
是为了最小化查找(seek)时间,控制定位文件与传输文件所用的时间比例。假设定位到Block所需的时间为10ms,磁盘传输速度为100M/s。如果要将定位到Block所用时间占传输时间的比例控制1%,则Block大小需要约100M。
但是如果Block设置过大,在MapReduce任务中,Map或者Reduce任务的个数 如果小于集群机器数量,会使得作业运行效率很低。
3.Block抽象的好处
block的拆分使得单个文件大小可以大于整个磁盘的容量,构成文件的Block可以分布在整个集群, 理论上,单个文件可以占据集群中所有机器的磁盘。
Block的抽象也简化了存储系统,对于Block,无需关注其权限,所有者等内容(这些内容都在文件级别上进行控制)。
Block作为容错和高可用机制中的副本单元,即以Block为单位进行复制。
HDFS的优点
(1)高可靠性:hadoop按位存储和处理数据的能力值得人们信赖
(2)高扩展性:hadoop是在可用的计算机集簇间分配数据并完成计算任务的,这些集簇可以方便地扩展到数以千计的节点中。
(3)高效性:hadoop 能够在节点之间动态地移动数据,并保证各个节点的动态平衡1,因此处理速度非常快。
(4)高容错性:hadoop 能够自动保存数据的多个副本,并且能够自动将失败的任务重新分配。
(1)可构建在廉价机器上;
(2)高容错性;
(3)适合批处理;
(4)适合大数据处理;
(5)流式文件访问。
HDFS的缺点
(1)不适合低延迟数据访问
对延时要求在毫秒级别的应用,不适合采用HDFS。HDFS是为高吞吐数据传输设计的,因此可能牺牲延时HBase更适合低延时的数据访问。
(2)无法高效存储大量小文件
文件的元数据(如目录结构,文件block的节点列表,block-node mapping)保存在NameNode的内存中, 整个文件系统的文件数量会受限于NameNode的内存大小。
经验而言,一个文件/目录/文件块一般占有150字节的元数据内存空间。如果有100万个文件,每个文件占用1个文件块,则需要大约300M的内存。因此十亿级别的文件数量在现有商用机器上难以支持。
(3)不支持多用户写入及任意修改文件
HDFS采用追加(append-only)的方式写入数据。不支持文件任意offset的修改。不支持多个写入器(writer)。
为什么HDFS不适合存储小文件:
(1)所有的元数据都是存储在NameNode内存中的,而一个NameNode节点的内存是有限的;
(2)小文件的存取占用了大量的NameNode内存,导致寻道时间超过了读取时间;
(3)NameNode存储block数目是有限的。
一个block元信息消耗大约150byte内存,加入存储一亿个block,则大约需要20GB内存。如果一个文件大小为10KB,则一亿个文件大小仅为1TB,但NameNode就要消耗20GB内存。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。