A-A+

从零学习Hadoop之认识HDFS

2016年04月03日 Hadoop 暂无评论 阅读 181 views 次

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的介绍。

 

 

标签:

给我留言

*

Copyright © If Coding 保留所有权利.   Theme  Ality   

用户登录