大数据学习笔记-3-HDFS分布式文件系统

Posted 小神王

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了大数据学习笔记-3-HDFS分布式文件系统相关的知识,希望对你有一定的参考价值。

在之前Hadoop介绍中提及过,基本上所有大数据平台的核心功能是两个方面:(1)大量数据的分布式存储 和 (2)大量数据的分布式处理。

HDFS就是用来解决第一个问题的。


小目录

1. HDFS简介和特点

2. HDFS中涉及的一些主要概念


1.HDFS简介和特点

(1)简介:

HDFS(Hadoop Distributed File System),即Hadoop分布式文件系统,是Hadoop平台的核心子项目,是分布式计算中数据存储和管理的基础系统模块。分布式文件存储系统是将文件存储在多个计算机节点上,这些计算机节点构成了计算机集群。


(2)特点:

a. HDFS可以兼容比较廉价的硬件设备,以前的数据平台基本上需要比较昂贵的服务器去支撑的,现在小型的普通PC机也能作为一个几点纳入到整个计算集群当中,极大减少了企业在硬件上的成本;

b. 可以实现流式读写。流式读写按照通俗理解(我本人只能理解通俗理解......)就是按照顺序来,按照预先设定好的顺序去写文件或读文件。流式读写可以减少磁盘寻址的开销,只需要寻址一次就可以一直访问,因此流式读写比较适合存储在硬盘上的HDFS文件。和流失读写相反的是随机访问,随机访问对数据的定位、查找和修改的延迟较小,传统关系型数据库比较符合随机访问;

c. 支持大数据集。HDFS可以将大数据集进行拆分放在不同的数据节点上,这也是为什么称为分布式存储的一个点;

d. 允许追加,不允许修改。分布式大数据量存储系统从设计之初就不太考虑文件修改的问题,一般只考虑增量追加存储,如果需要修改内容,那就直接追加一个新文件。


2. HDFS中涉及的一些主要概念

先看一下HDFS的大体架构:

我整理的三个比较重要的概念是:块 + 名称节点和数据节点两大核心组件 + HDFS的存储特点。

(1)块

HDFS默认一个块是64MB,也可以自己定义大小,如128MB,一个文件被分成多个块,以块作为单位进行存储。这样可以带来的好处是:

a. 可以支持大规模的数据存储,一个大文件可以被拆分为多个小的块,然后不同的块可以存储在不同的计算机节点上,所以一个大文件并不会受到单一节点的存储容量限制,拥有非常强大的扩展性;

b. 系统设计简单:块大小固定,可以方便地计算出一个节点能存多少东西;

c. 块很容易备份。


(2)HDFS两大组件

HDFS的两大组件是名称节点和数据节点。

  • 名称节点

    名称节点,Master Node, 负责文件元数据的存储,相当于数据目录,元数据是描述数据的数据,提供数据的属性,存储位置等信息。

名称节点在HDFS中可以提供的信息有:

a. 文件是什么

b. 文件被分为多少块

c. 每个块和文件之间的相互映射关系

d. 每个块被存在哪个服务器上

名称节点包含了两个比较核心的数据结构:FsImage和EditLog,前者主要负责保存文件树,这样可以知道整个文件系统目录是什么样子的,后者主要是记录对文件本身做过哪些增删改。由此出现一个问题是,当对一个文件的增删改行为越来越多,EditLog的体积会越来越大,如果名称节点正常运行时影响不大,但当名称节点重启的时候,名称节点需要先将FsImage里面的所有内容映像到内存中,然后再一条一条地执行EditLog中的记录,当EditLog文件非常大的时候,会导致名称节点启动操作非常慢。因此用第二名称节点来解决这个问题。第二名称节点也就是名称节点的冷备份,可以解决EditLog不断增大的问题。

  • 数据节点

    数据节点,Data Node,是存储具体的文件数据,它是存储在计算机的磁盘上的,会根据客户端或者有何名称节点的调度对数据进行存储和检索,定期向名称节点发送自己所存储的块的列表




(3)HDFS存储原理

  • 数据冗余保存

    冗余值默认为3,也就是一份文件备份3份。这样做的优点是:一是加快数据访问速度,如果有多个访问请求,可以直接将访问分别安排在不同的冗余副本上。二是容易检查错误,两两对照可以发现错误的数据块。三是数据比较可靠,抗风险能力强。

  • 数据的存放和读取

    存放:

    第三副本放置在第一副本相同机架的不同数据节点上,第一副本优先放置在上传文件的节点上,如果是集群外提交,则随机挑选一台磁盘不太满、CPU不太忙的节点,第二副本放在与第一副本不同机架的数据节点上。




    读取:

    数据的读取采用就近原则,节省读取的资源开销。

    HDFS提供一个API接口以确定数据节点所属机架ID,客户端读取数据时,从名称节点获得数据块不同副本的存放位置列表,这些列表中包含了副本所在的数据节点,通过API可以得到这些节点位于哪个机架,获得机架ID,当发现某个副本的机架ID和客户端的机架ID相同时,优先从相同机架ID的副本读取数据。如果没有发现相同的ID,随机选择一个副本进行读取。

    

  • 数据错误与恢复


HDFS的两大核心组件名称节点和数据节点。

如果名称节点报错,因为存在第二名称节点,前文提到过它是名称节点的冷备份,因此可以从第二名称节点回复数据,但同时由于是冷备,需要整个HDFS从备份中修复完成后才能重新运行,中间会有时间上的损耗。

如果是数据节点报错,由于名称节点和数据节点定期会进行通信,如果名称节点接收不到数据节点的“心跳”状态报告时,数据节点会被标记为宕机。同时,名称节点发现某个数据块副本数量小于冗余因子(也就是上文提到的3个),那名称节点会启动数据冗余备份,生成新副本。由此可见,HDFS可以调整副本的位置,另一方面也说明HDFS可以调整整个集群的负载结构。


以上是关于大数据学习笔记-3-HDFS分布式文件系统的主要内容,如果未能解决你的问题,请参考以下文章

hadoop安装

《从0开始学大数据》学习后感

大数据系统架构师学习笔记

深入浅出学大数据分布式文件系统HDFS及HDFS的编程实践

《从0开始学大数据》的启示

《从0开始学大数据》的启示