Chinaunix首页 | 论坛 | 博客
  • 博客访问: 56798
  • 博文数量: 12
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 140
  • 用 户 组: 普通用户
  • 注册时间: 2013-03-03 21:11
个人简介

knowledge share

文章分类

全部博文(12)

文章存档

2015年(1)

2014年(8)

2013年(3)

我的朋友

分类: 云计算

2014-05-13 16:38:26

1.1 HDFS简介

Hadoop Distributed File System (HDFS) — Apache Hadoop 项目的一个子项目, 是一个高度容错的分布式文件系统,可以理解成HDFS一个以集群方式实现的一个文件系统,HDFS设计用于在低成本硬件上运行。HDFS 提供高吞吐量应用程序数据访问功能,适合带有大型数据集的应用程序。HDFS 允许连接多个集群中包含的节点 (普通PC),那些集群上分布着一些数据文件。然后可以将那些数据文件作为一个无缝文件系统来进行访问和存储。对数据文件的访问通过一种流线型(streaming)方式进行处理,这意味着应用程序或命令通过 MapReduce 处理模型直接执行。

       HDFS 与其他分布式文件系统有许多相似点,但也有几个不同点。一个明显的区别是 HDFS 一次写入、多次读取(write-once-read-many模型,该模型降低了并发性控制要求,简化了数据聚合性,支持高吞吐量访问。将处理逻辑放置到数据附近通常比将数据移向应用程序空间更好(符合移动计算要比移动数据的成本低的原则)。HDFS 将数据写入严格限制为一次一个写入程序。字节总是被附加到一个流的末尾,字节流总是以写入顺序存储。

       HDFS 有许多目标,下面是一些最明显的目标:

?  通过检测故障和应用快速、自动的恢复实现容错性

?  通过 MapReduce 流进行数据访问

?  简单可靠的聚合模型

?  处理逻辑接近数据,而不是数据接近处理逻辑

?  跨异构普通硬件和操作系统的可移植性

?  可靠存储和处理大量数据的可伸缩性

?  通过跨多个普通个人计算机集群分布数据和处理来节约成本

?  通过分布数据和逻辑到数据所在的多个节点上进行平行处理来提高效率

?  通过自动维护多个数据副本和在故障发生时自动重新部署处理逻辑来实现可靠性

1.2 HDFS架构

HDFS采用master/slave架构。一个HDFS集群是由一个Namenodemaster)和一定数目的Datanodesslave)组成。Namenode是一个中心服务器(zookeeper server实现),负责管理文件系统的名字空间(namespace)以及客户端对文件的访问, 集群中单一Namenode的结构大大简化了系统的架构。Namenode是所有HDFS存储文件的元数据的仲裁者和管理者,用户数据永远不会流过Namenode       集群中的Datanode一般是一个节点一个,负责管理它所在节点上的存储。HDFS暴露了文件系统的名字空间,用户能够以文件的形式在上面存储数据。从内部看,一个文件其实被分成一个或多个数据块Block,块(Block)DataNode中最基本的存储单位,对于文件内存而言,一个文件的长度大小是size,那么从文件的0偏移开始,按照固定的大小,顺序对文件进行划分并编号,划分好的每一个块称为一个Block。在HDFS中,HDFS默认Block大小是64MB,不同于普通文件系统的是,HDFS中,如果一个文件小于一个数据块的大小,并不会占用整个block的存储空间,这些块存储在一组Datanode上。Namenode执行文件系统的名字空间操作,比如打开、关闭、重命名文件或目录。它也负责确定数据块到具体Datanode节点的映射。Datanode负责处理文件系统客户端的读写请求。在Namenode的统一调度下进行数据块的创建、删除和复制。


上图中展现了整个HDFS三个重要角色:NameNodeDataNodeClient

NameNode:是整个文件系统的管理节点。管理文件系统的命名空间,它维护着文件系统树及整棵树内所有的文件和目录,这些信息以两个文件形式永久保存在本地磁盘上,命名空间镜像文件fsimage和编辑日志文件editsNameNode还记录着每个文件中各块所在的数据节点信息,但是它不保存块的永久位置信息,这些信息会在系统启动时由数据节点DataNode重建。

DateNode:文件系统的工作节点。根据需要存储或检索数据块, DataNode是文件存储的基本单元,它将Block存储在本地文件系统中,保存了BlockMeta-data,同时周期性地将所有存在的Block信息发送给NameNode

Client:就是需要获取分布式文件系统文件的应用程序。

通过二个操作来说明他们之间的关系:

1.2.1 文件写入

ClientNameNode发起文件写入的请求。

NameNode根据文件大小和文件块配置情况,返回给Client它所管理部分DataNode的信息。

Client将文件划分为多个Block,根据DataNode的地址信息,按顺序写入到每一个DataNode块中。

1.2.2 文件读取

ClientNameNode发起文件读取的请求。

NameNode返回文件存储的DataNode的信息。

Client读取文件信息。

1.3 HDFS适用场景

HDFS 提供高吞吐量应用程序数据访问功能,适合带有大型数据集的应用程序,以下是一些常用的应用场景。

?  数据密集型并行计算:数据量极大,但是计算相对简单的并行处理,如大规模Web信息搜索;

?  计算密集型并行计算:数据量相对不是很大,但是计算较为复杂的并行计算,如3D建模与渲染、气象预报和科学计算;

?  数据密集与计算密集混合型的并行计算,如3D电影的渲染。

HDFS在使用过程中有以下限制:

HDFS不适合大量小文件的存储,因NameNode将文件系统的元数据存放在内存中,因此存储的文件数目受限于NameNode的内存大小;

HDFS适用于高吞吐量,而不适合低时间延迟的访问;

?  流式读取的方式,不适合多用户写入一个文件(一个文件同时只能被一个客户端写),以及任意位置写入(不支持随机写);

HDFS更加适合写入一次,读取多次的应用场景。

阅读(6287) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~