HDFS 的特点
HDFS具有高容错性的特点(fault-tolterant)的特点,因为hadoop部署在 廉价的商用集群上,所以HDFS被设计成认为硬件是常态,具有高容错性。其提供高吞吐量(high throughput)的特性, 用来访问应用程序的数据,适合有超大数据集(large data set)的应用程序。HDFS放宽了对POSIX的要求,这样可以实现通过流的形式访问文件系统中的数据。
(1)硬件故障: 一个HDFS系统中有着数百或数千个储存文件片段的廉价服务器组成,机器挂掉的事情常有发生,所以HDFS必须保证在机器挂掉的情况下不影响系统的正常运行,所以HDFS被设计成硬件故障是常态而不是异常。
(2)流式的数据访问 :运行在HDFS 上 的程序必须以流式地访问它们的数据集,它 不是典型的运行在常规文件系统之上常规程序。HDFS的设计适合批量处理,而不是用户交互式的,它的重点是高吞吐量而不是数据的访问时间,也就是说HDFS以牺牲文件访问时间来换取高吞吐量。
(3)大数据集:运行在HDFS上的程序一般都具有很大的数据集,一个HDFS可以储存T、P级别的数据。
(4)简单一致性模型:大部分的HDFS程序操作文件时需要一次写入,多次读取。一个文件一旦被创建、写入、关闭之后就不需要修改了。这个假定简化了数据一致的问题和高吞吐量的数据访问。
(5)移动计算比移动数据更经济:HDFS提供了接口,让程序自己移动到距离数据数据储存更近的位置,因为在靠近数据储存的位置计算是最为理想的状态,这样可以消除大数据集带来的网络 阻塞,提高整个系统的吞吐量。
(6)名字节点和数据节点:HDFS是经典的主从式结构体系,一个HDFS集群有以下部分组成。
名字节点:一个,用来管理文件的名字空间和调度客户端访问文件的主服务器。
数据节点:一个或多个,用来存储数据。
集群中只有一个名字节点极大的简化了系统地结构体系。名字节点是仲裁者和所有HDFS的元数据的仓库。系统设计,用户的实际数据不经过名字节点。
(7)文件名字空间:HDFS支持传统的继承式的文件组织。一个用户或一个程序可以创建目录,存储文件到很多目录中。文件系统的名字空间层次和其他文件系统相似。可以创建文件,也可以将一个文件从一个目录移动到移动到另一个目录,或重命名。
(8)大量小文件:名字节点(NameNode)存储着文件系的元数据,因此文件数量的限制也由名字节点的内存限制。
(9)复制的选择:HDFS尝试一个读操作来自距离它最近的复制。
(10)安全模式:在启动的时候,名字结点进入一个特殊的状态叫做安全模式。安全模式不发生文件块的复制。
(11)低延迟数据访问:需要低延迟访问数据在毫秒范围内的应用并不适合HDFS。HDFS 是为达到高数据吞吐量而优化的,这会以延迟为代价。
(12)元数据的持久化:HDFS的名字空间是由名字节点来存储的。名字节点从事务日志(EditsLog)来持久化每一个对文件系统的元数据的改变。完整的文件系统名字空间、文件块的映射和文件系统的配置都存在一个叫FsImage的文件中,FsImage也在名字节点的本地文件系统中。
(13)通信协议:所有的通信协议都是在TCP/IP协议之上的。一个客户端和明确的配置端口的名字结点建立链接之后,它和名字节点的协议是ClientProtocal,数据节点和名字节点之间的通信用DatanodeProtocal
RPC抽象的封装了ClientProtocal、DatanodeProtocal。根据设计,名字节点不会发起一个RPC,它只会对数据结点和客户端发起的RPC做出反馈。
(14)鲁棒性:HDFS主要的设计目标就是在存在故障的情况下正常的运行系统并可靠的存储数据。三个普通的故障是名字结点失效、数据节点失效和网络断开。