与服务器一起的日子

  • mysql
  • linux
  • 高可用
  • nginx
与服务器一起的日子
冰冷的机器也熄不灭火热的心
  1. 首页
  2. 大数据
  3. HDFS
  4. 正文

hadoop技术探秘02——什么是HDFS

2017年11月13日 539点热度 0人点赞 0条评论

HADOOP DISTRIBUTED FILE SYSTEM,简称HDFS,是一个分布式文件系统。它是谷歌的GFS提出之后出现的另外一种文件系统。它有一定高度的容错性,而且提供了高吞吐量的数据访问,非常适合大规模数据集上的应用。HDFS 提供了一个高度容错性和高吞吐量的海量数据存储解决方案。

关于容错性:

首先,节点失效将被看成是正常情况,而不再视为异常情况。整个文件系统包含了几百个或者几千个由廉价的普通机器组成的存储机器,而且这些机器是被与之匹配数量的客户端机器访问。这些节点的质量和数量都实际上都确定了在任意给定时间上,一定有一些会处于失效状态,并且某一些并不会从当前失效中恢复回来。这有可能由于程序的bug,操作系统的bug,人工操作的失误,以及硬盘坏掉,内存,网络,插板的损坏,电源的坏掉等等。因此,持续监视,错误检测,容错处理,自动恢复必须集成到这个文件系统的设计中来。

——GFS论文(中文版)

根据官方文档与GFS论文,发现以下区别:

1.hadoop是运行在商用的硬件上的(GFS运行在更加廉价的PC上)

2.他与一些传统的分布式系统有很多相似的地方,但有很大的差异。(与GFS的描述差异不是很大)

3.为了部署在低成本的硬件上,做了高度容错设计(GFS也有高度容错设计)

4.提供高吞吐量访问应用数据,适合大数据集的应用(GFS有着相同的处理,双方都对文件具有追加作用且存入不能修改)

5.hdfs原来是Apache Nutch网络搜索引擎项目的基础设施而构建的(GFS开始就是Google的存储系统,也就是说hdfs是半路出家)

6.HDFS应用程序需要一次写入一次读取许多访问模型的文件。 创建,写入和关闭的文件不需要改变,除了附加和截断之外。 支持将内容追加到文件末尾,但不能在任意点更新。 这种假设简化了数据一致性问题,并实现了高吞吐量数据访问。 MapReduce应用程序或Web爬虫应用程序完全适合这种模式(GFS和HDFS一样,也是允许追加/删除文件,不允许修改)

7.如果在应用程序运行的数据附近执行,则应用程序所请求的计算效率会更高。 当数据集的规模很大时尤其如此。 这最大限度地减少了网络拥塞并提高了系统的整体吞吐量。 我们的假设是,将计算迁移到更靠近数据的位置通常会更好,而不是将数据移动到应用程序正在运行的位置。 HDFS为应用程序提供接口,使其更接近数据所在的位置(GFS对于这里也是一样的思想,让应用程序运行在离数据库最近的节点,就能实现最快存取数据)

HDFS的节点

NameNode和DataNodes

HDFS具有主/从体系结构。 一个HDFS集群包含一个NameNode(或者namenode集群),一个主服务器(或者主服务集群),用于管理文件系统名称空间并管理客户端对文件的访问。 此外,还有许多DataNode,通常是群集中的每个节点一个DataNode,用于管理连接到它们所运行的节点的存储。 HDFS公开文件系统名称空间,并允许用户数据存储在文件中。 在内部,文件被分成一个或多个块,这些块被存储在一组DataNode中。 NameNode执行文件系统命名空间操作,如打开,关闭和重命名文件和目录。 它也决定块到DataNode的映射。 DataNode负责提供来自文件系统客户端的读写请求。 DataNode还根据来自NameNode的指令执行块创建,删除和复制。

hdfs架构

NameNode和DataNode是设计运行于商业服务器上。这些机器通常运行一个GNU/Linux操作系统(OS)。HDFS是使用java语言进行建立;任何支持java的机器都可以运行(实测对于windows系统不友好)。使用高度可移植的java语言意味着HDFS可以部署在广泛的任意类型的机器(对于windows仍旧不友好)。一个典型的部署是一个专门的机器只能运行namenode软件。集群中的其他的机器运行的节点都是一个实例(用来存储数据的datanode)。允许运行多个数据节点在同一台机器上而在实际的部署上,这是很少见的情况。

集群中的单个节点的存在,大大简化了系统的体系结构。NameNode是所有HDFS元数据的仲裁和仓储。该系统设计为,用户数据不会流经namenode节点。

(HDFS官网翻译)

对于文件的支持

HDFS文件系统被设计为存储超大文件。

每个磁盘都有默认的数据块大小,这是磁盘在对数据进行读和写时要求的最小单位,文件系统是构建于磁盘上的,文件系统的也有块的逻辑概念,通常是磁盘块的整数倍,通常文件系统为几千个字节,而磁盘块一般为4096字节(4KiB)。

HDFS是一种文件系统,自身也有块(block)的概念,其文件块要比普通单一磁盘上文件系统大的多,默认是128MiB(hadoop2.x版本,对于hadoop3.0版本,默认是256MiB)。

HDFS上的块之所以设计的如此之大,其目的是为了最小化寻址开销。

HDFS文件的大小可以大于网络中任意一个磁盘的容量,文件的所有块并不需要存储在一个磁盘上,因此可以利用集群上任意一个磁盘进行存储,由于具备这种分布式存储的逻辑,所以可以存储超大的文件,通常GiB、TiB、PiB级别。

HDFS支持传统的层次文件组织。用户或应用程序可以在这些目录中创建目录和存储文件。文件系统命名空间层次结构类似于现有的Unix文件系统;可以创建和删除文件,将文件从一个目录移动到另一个目录,或重命名文件。HDFS支持用户配额和访问权限。HDFS不支持硬链接或软链接。然而,HDFS架构并不妨碍实现这些功能。

namenode维护文件系统的命名空间。对文件系统命名空间或其属性的任何改变都是由NameNode记录。应用程序可以指定一个文件的HDFS副本数量。文件的拷贝数称为该文件的复制因子。此信息由namenode存储。

DATANODE的数据空间

HDFS旨在可靠地在大型集群中的机器上存储非常大的文件。 它将每个文件存储为一系列的块。 文件的块被复制以容错。 块大小和复制因子是可以为每个文件进行配置的。

文件中除最后一个块以外的所有块的大小相同,用户可以在将可变长度块的支持添加到append和hsync后,在不填写最后一个块到配置的块大小的情况下启动新块。

应用程序可以指定文件的副本数量。 复制因子可以在文件创建时指定,可以以后更改。 HDFS中的文件是一次性写入的(附加和截断除外),并且在任何时候都严格限定一个写入者。

NameNode做出关于块复制的所有决定信息。 它定期从群集中的每个DataNode接收Heartbeat和Blockreport。 收到Heartbeat意味着DataNode运行正常。 Blockreport包含DataNode上所有块的信息列表。

标签: 暂无
最后更新:2017年11月13日

jhin

这个人很懒,什么都没留下

点赞
< 上一篇
下一篇 >

文章评论

razz evil exclaim smile redface biggrin eek confused idea lol mad twisted rolleyes wink cool arrow neutral cry mrgreen drooling persevering
取消回复

COPYRIGHT © 2024 与服务器一起的日子. ALL RIGHTS RESERVED.

Theme Kratos Made By Seaton Jiang