从零学习Hadoop之认识HDFS
Hadoop分布式文件系统(Hadoop Distributed File System,HDFS)是一个用在普通硬件设备上的分布式文件系统。它与现有的分布式文件系统有很多近似的地方,但是又和这些文件系统有许多不同的地方。
HDFS
HDFS开始是为开源的Apache Nutch项目的基础结构而创建,HDFS是Hadoop项目的一部分,而Hadoop又是Lucene的一部分。
HDFS的特点
- 高容错性,可以用来部署在低廉的硬件上。
- 高吞吐量,用来访问应用程序的数据,适合有超大数据集(high throughput)的应用程序。
HDFS放宽了对POSIX(Portable Operating System Interface,可移植操作系统接口,缩写为 POSIX )的要求,这样可以实现通过流的形式访问文件系统中的数据。
硬件故障
硬件故障是常态,而不是异常。HDFS系统由成千上百存储着文件数据片断的服务器组成,为了保证一些组成部分总是失效的,因此,故障的检测和自动快速恢复是HDFS一个核心的结构目标。
流式的数据访问
HDFS不是典型的运行在常规的文件系统之上的常规程序。HDFS的设计适合批量处理,而不是用户交互式的;重点是数据吞吐量,而不是数据的反应时间,POSIX强制的很多硬性需求对很多应用不是必需的,去掉POSIX的很多关键地方的语义,可以获得更好的数据吞吐量。
大数据集
运行在HDFS之上的程序有很大量的数据集。这意味这典型的HDFS文件是GB到TB的大小,故HDFS能够很好的支持大文件。HDFS应该提供很高的聚合数据带宽,应该一个集群中支持数百个节点,还应该支持一个集群中千万的文件。
简单一致性模型
一次写入,多次读写。
移动计算比移动数据更经济
在靠近要计算的数据存储的位置进行计算是最理想的状态,尤其是在数据集特别巨大的时候。这样消除了网络的拥堵,提高了系统的整体的吞吐量。HDFS提供了接口,让程序将自己移动到里数据存储更近的位置。
轻便访问异构的软硬件平台
简单轻便的从一个平台到另外一个平台,这将推动需要大数据集的应用广泛地采用HDFS作为平台。
名字节点和数据节点
HDFS是主从结构的体系,一个HDFS集群由以下部分组成。
- 名字节点(namenode):一个,用来管理文件的名字空间和调节客户端访问文件的主服务器。
- 数据节点(datanode):一个或者多个,用来管理存储。
关于名字节点和数据节点在后面会进行星系介绍。
文件名字空间
HDFS支持传统的继承式的文件组织。
数据复制
HDFS能可靠地在集群上的大量机器之间存储非常大量的文件,它以块序列的形式存储每一个文件。文件中除了最后一个块的其它块都是相同大小的。属于文件的块为了故障容错而被复制,块的大小和复制数可以为每个文件配置。HDFS中的文件都是严格地要求任何时候只有一个写操作。
复制的选择
就近原则。
安全模式
在启动的时候,名字节点进入一个特殊的状态叫做安全模式。安全模式是不发生文件块的复制的。名字节点接收来自数据节点的心跳和块报告。一个块报告包括数据节点向名字节点报告数据块的列表。
元数据的持久化
HDFS的名字空间是由名字节点来存储的。
- 事务日志
- FsImage
通信协议
所有的通信协议都是在TCP/IP协议之上的。一个客户端和明确的配置端口的名字节点建立连接之后,它和名字节点的协议是ClientProtocal,数据节点和名字节点之间通信用DatanodeProtocal。这些协议的详细内容将在后面解释。
RPC抽象地包装了ClientProtocal和DatanodeProtocal。根据设计,名字节点不会发起一个RPC,它只是对数据节点和客户端发起的RPC做出反馈。
鲁棒性
HDFS的主要目标就是在存在故障的情况下可靠地存储数据。三个普通的故障是:
- 名字节点失效
- 数据几点失效
- 网络断开
磁盘故障、心跳和重新复制
数据节点周期性发送一个心跳信息到名字节点。
集群的重新均衡
HDFS体系结构兼容数据的重新平衡方案。
数据正确性
导致文件块可能出现损坏的情况:
- 存储设备
- 差劲的网络
- 软件缺陷
解决:校验码。
元数据磁盘失效
名字节点可以配置成多个FsImage和EditsLog的副本。
快照
目前还不支持。
数据组织
HDFS支持大文件数据块。
Hadoop问价系统的接口
- Thrift
- C语言
- FUSE
- WebDAV
- HTTP
- FTP
HDFS的Web服务
- 8020:名字节点RPC交互端口
- 50070:名字节点Web管理端口
- 50010:数据节点控制端口
- 50020:数据节点的RPC服务器地址和端口
- 50075:数据节点的HTTP服务器和端口
除8020在core-site.xml中配置,上述其它端口在hdfs-site.xml中配置。
Hadoop2中的Web服务跟Hadoop1有所改变,上述只是针对Hadoop1的介绍。