您的位置:首页 > 运维架构

【Hadoop权威指南】Hadoop分布式文件系统(第三天)

2015-06-26 16:39 260 查看
当数据集超过一个单独的物理计算机的存储能力时,便有必要将它分布到多个独立的计算机。管理着跨计算机网络存储的文件系统称为分布式文件系统。因为它们是基于网络的,所有网络编程的复杂性都会随之而来,所以分布式文件系统比普通磁盘文件系统更复杂。

Hadoop有一个被称为HDFS的分布式系统,全称为Hadoop Distributed Filesystem。HDFS是Hadoop的旗舰级文件系统。

HDFS的设计

HDFS是为以流式数据访问模式存储超大文件而设计的文件系统,在商用硬件的集群上运行。

超大文件:

“超大文件”在这里指几百MB,几百GB甚至几百TB大小的文件。目前已经有Hadoop集群存储PB(petabytes)级的数据了。

流式数据访问:

HDFS建立在这样一个思想上:一次写入、多次读取模式是最高效的。一个数据集通常由数据源生成或复制,接着在此基础上进行各种各样的分析。每个分析至少都会涉及数据集中的大部分数据(甚至全部),因此读取整个数据集的时间比读取第一条记录的延迟更为重要。

商用硬件:

Hadoop不需要运行在昂贵并且可靠性的硬件上。它被设计运行在商用硬件的集群上,因此至少对于大的集群来说,节点故障的几率还是较高的。HDFS在面对这种故障时,被设计为能够继续运行而让用户察觉不到明显的中断。

同时,那些并不适合HDFS的应用也是值得研究的。在目前,HDFS还不太适用某些领域,不过日后可能会有所改进。

低延迟数据访问:

需要低延迟访问数据在毫秒范围内的应用并不适合HDFS。HDFS是为达到高数据吞吐量而优化的,这有可能会以延迟为代价。目前,对于低延迟访问,HBase是更好的选择。

大量的小文件:

名称节点(namenode)存储着文件系统的元数据,因此文件数量的限制也由名称节点的内存量决定。

多用户写入、任意修改文件:

HDFS中的文件只有一个写入者,而且写操作总是在文件的末尾。它不支持多个写入者,或是在文件的任意位置修改。

HDFS的概念

块:一个磁盘有它的块大小,代表着它能够读写的最小数据量。文件系统通过处理大小为一个磁盘块大小的整数倍数的数据块来运作这个磁盘。

HDFS也是有块的概念,不过是更大的单元,默认为64MB。与单一磁盘上的文件系统相似,HDFS上的文件也被分为以块为大小的分块,作为单独的单元存储。但与其不同的是,HDFS中小雨一个块大小的文件不会占据整个块的空间。

在分布式文件系统中使用抽象块会带来很多好处:(1)一个文件可以大于网络中任意一个磁盘的容量。(2)使用块抽象单元而不是文件会简化存储子系统。

名称节点与数据节点:HDFS集群有两种节点,以管理者—工作者的模式运行,即一个名称节点(管理着)和多个数据节点(工作者)。名称节点管理文件系统的命名空间。它维护着这个文件系统树及这个树内所有的文件和索引目录。这些信息以两种形式将文件永久保存在本地磁盘上:命名空间镜像和编辑日志。名称节点也记录着每个文件的每个块所在的数据节点,但它并不永久保存块的位置,因为这些信息会在系统启动时由数据节点重建。

客户端代表用户通过与名称节点和数据节点交互来访问整个文件系统。

数据节点是文件系统的工作者。它们存储并提供定位块的服务(被用户或名称节点调用时),并且定时的向名称节点发送它们存储的块的列表。

没有名称节点,文件系统将无法使用。事实上,如果运行名称节点的机器被毁坏了,文件系统上所有的文件都会丢失,因为我们无法知道如何通过数据节点上的块来重建文件。因此,名称节点能够经受故障是非常重要的,Hadoop提供了两种机制来确保这一点。

第一种机制就是复制那些组成文件系统元数据持久状态文件。Hadoop可以通过配置使名称节点在多个文件系统上写入其持久化状态。这些操作是具同步性和原子性的。一般的配置选项是,在本地磁盘上写入的同时,写入一个远程NFS挂载(mount)。

另一种可行的方法是运行一个二级名称节点,虽然它不能作为名称节点使用。这个二级名称节点的重要作用就是定期的通过编辑日志合并命名空间镜像,以防止编辑日志过大。这个二级名称节点一般在其他单独的物理计算机上运行,因为它也需要占用大量CPU和内存来执行合并操作。它会保存合并后的命名空间镜像的副本,在名称节点失效后就可以使用,但是,二级名称节点的状态比主节点滞后的,所以主节点的数据若全部丢失,损失仍在所难免。在这种情况下,一般把存在NFS上的主名称节点元数据复制到二次名称节点上并将其作为新的主名称节点运行。

Hadoop文件系统

Hadoop有一个抽象的文件系统概念,HDFS只是其中的一个实现。

数据流



图1:客户端从HDFS中读取数据



图2:客户端对HDFS写入数据
保持HDFS集群的平衡

向HDFS复制数据时,考虑集群的平衡相当重要。文件快在集群中均匀地分布时,HDFS能达到最佳工作状态。

Hadoop归档文件

每个文件以块方式存储,块的元数据存储在名称节点的内存里,此时存储一些小的文件,HDFS会较低效。因此,大量的小文件会耗尽名称节点的大部分内存。

Hadoop Archives或HAR文件,是一个更高效的将文件放入HDFS块中的文件存档设备,在减少名称节点内存使用的同时,仍然允许对文件进行透明的访问。具体说来,Hadoop Archives可以用作MapReduce的输入。

对于HAR文件,还需要了解它的一些不足。创建一个归档文件会创建原始文件的一个副本,因此需要与要归档的文件同样大小的磁盘空间。虽然归档的文件能被压缩,但目前还不支持档案压缩。

一旦创建,Archives便不可改变。要增加或移除文件,必须重新创建归档文件。事实上,这对那些写后便不能改的文件来说不是问题,因为它们可以定期成批归档。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  hadoop hdfs mapreduce