您的位置:首页 > 大数据 > Hadoop

HDFS概述

2017-07-18 15:37 169 查看
想学习大数据方面的知识就避不开hadoop,终于下决心补充一下知识的盲区,听了厦门大学林子雨老师的大数据原理与应用课程(确实是好课,感谢老师!),记录一下自己学习到了HDFS相关知识。

HDFS是hadoop的核心设计之一,解决的是海量数据的存储问题。全程Hadoop Distribute File System,是一个分布式文件系统。

分布式文件呢,就是把文件分布存储到多个计算机节点上,成千上万的计算机节点构成计算机集群。

总体上,HDFS要实现以下的目标:

兼容廉价的硬件设备:目前分布式文件系统所采用的计算机集群,都是有普通硬件构成的,这就大大降低了硬件上的开销

流数据读写:HDFS读取数据都是批量的,一次性读取全部或者说大部分的数据。

大数据集。

简单的文件模式:HDFS存储的文件都是简单模式的,一次写入多次读取,也就是说,不允许用户继续写入、修改文件。

强大的跨平台兼容性。

HDFS特殊的设计,在实现上述优良特征的同时也使自身有一些应用的局限性,主要是:

不适合低延迟数据访问:正如前面讲到的流数据读写,HDFS不满足实时性,不适合随机读取。

无法高效存储大量小文件:后面会讲到HDFS的块,文件以块的形式存储,小文件的存储比较浪费资源

不支持多用户写入及任意修改文件

下面将按以下目录介绍HDFS:



HDFS体系结构概述:名称节点(Fslmage & EditLog)和数据节点

通信协议

客户端

HDFS体系结构的局限性

HDFS存储原理

块:

一个文件被分为多个块,块是存储的单位。HDFS的块大小远大于普通文件系统,因此可以最小化寻址开销,默认一个块是64MB。采用块概念的好处是:

支持大规模文件存储:一个很大的文件可以被拆分为若干文件块,不同的文件块可以被分发到不同的节点上。因此一个文件的大小不会受单个节点的存储容量的限制。

简化系统设置:首先,简化存储管理,因为文件大小是固定的,这样就很容易算出一个节点可以存放多少文件块。其次,简化元数据的管理,元数据不需要和文件块一起存储。

适合数据备份:每个文件块都可以冗余地存储到多个节点上

HDFS体系结构概述:我们知道,一个集群中有很多节点,分布式文件系统设置为一个主节点和多个从节点。在HDFS中,包含一个名称节点NameNode和若干个数据节点DataNode

名称节点:负责管理分布式文件系统的命名空间NameSpace,保存了两个核心数据结果:

Fslmage:用于维护文件系统树以及文件树中所有的文件和文件夹的元数据。

EditLog:操作日志文件,记录了所有针对文件的创建、删除、重命名操作。



名称节点启动的时候,它会把Fslmage文件中的内容加载到内存中,之后再执行EditLog文件中的各项操作。使得内存中的元数据与实际的同步,同步之后再新建新的Fslmage和EditLog。在名称节点的运行期间,所有的更新操作都是直接写到EditLog中的,那么,如果EditLog也变得很大的时候怎么办呢?

这时候就有我们的第二名称节点SecondaryNameNode了。第二名称节点是HDFS架构的组成部分,用来备份名称节点,同时也帮助处理EditLog文件过大时候的问题。SecondaryNameNode一般单独运行在一台机器上。第二名称节点会定期跟名称节点通信,当EditLog逐渐变大的时候请求其停止使用EditLog,暂时把新数据写入一个叫edit.new的新文件,Secon
bdfc
daryNameNode从名称节点中获取Fslmage 和EditLog文件,将Fslmage载入内存,然后一条一条执行EditLog中的各项更新操作,使得内存中的Fslmage保持最新,这个过程就是EditLog就是Fslmage的文件合并。之后第二节点将新的Fslmage再Post给名称节点,名称节点替换Fslmage,用edit.new 替换EditLog,这样,EditLog就又变小了。

数据节点 是分布式文件中的工作节点,会定期向名称节点发送自己所存储的块的列表。

通信协议:

HDFS是一个部署在集群上的分布式文件系统,因此很多数据需要通过网络进行传输。

所有的HDFS通信协议都是构建在TCP/IP协议的基础之上的。客户端与名称节点间的协议采用客户端协议,名称节点与数据节点间通过数据节点协议进行交互,客户端与数据节点间使用远程协议RPC交互。

客户端支持打开、读取、写入等常见操作,并提供了类似shell命令方式来访问HDFS中的数据,此外HDFS也提供Java API,允许应用程序访问文件系统。

HDFS体系的局限性:

只设置一个名称节点,在简化设计的同时,明显也带来了很多局限性,比如说……

命名空间的限制:名称节点保存于内存中,自然其大小受内存的限制。

性能的瓶颈:整个文件系统的吞吐量受限于单个名称节点的吞吐量。

集群的可用性:一旦这个唯一的名称节点出故障,整个集群就有大麻烦啦。

HDFS存储原理

冗余数据保存

数据存取策略

数据错误与恢复

冗余数据保存:正如前面提到,分布式文件系统大多底层都是廉价的硬件设备,那么数据的丢失和出错就不可避免,为了保证系统的容错性和可用性,HDFS采用多副本方式对数据进行冗余存储,通常一个数据块会被冗余复制三份。

HDFS将硬件出错看做一种常态而不是异常,并设计了相应的机制检测数据错误和自动恢复,主要包括:

名称节点出错:前面我们也有提到第二名称节点的存在。在1.0版本中,第二名称节点进行的是冷备份,也就是说如果名称节点出错,使用第二节点进行恢复需要一段时间,在这段时间里面就只能停止服务。而2.0版本中已经是热备份了,这时候就可以快速地使用第二节点进行备份。

数据节点出错:数据节点在平日里会定期向名称节点发送“心跳”,告诉名称节点“我还活着~”,如果名称节点突然再收不到心跳了,就会把该节点标记为“宕机”。如果检测到某个节点的复制数目不够多,名称节点也会快速为其进行复制备份。

数据出错:使用校验码。

敬请期待后续的学习~
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: