Hadoop入门(2)HDFS的核心概念和工作原理

Hadoop之HDFS

目录

一、简述Hadoop的生态系统

二、分布式文件系统

三、HDFS

(一)HDFS优点和缺点

(二)HDFS的部分专业术语

(三)HDFS的部分核心组件

(四)HDFS的工作流程

1、如何分块

2、如何备份

3、检测数据(块)损坏流程

4、检测数据节点(DN)损坏流程

5、写文件流程

6、读文件流程

四、参考与推荐


 

一、简述Hadoop的生态系统

  • Hadoop的核心是HDFS(分布式存储系统)+MapReduce(分布式计算框架)

 Hadoop入门(2)HDFS的核心概念和工作原理_第1张图片

  • Flume(日志收集,常用于推荐系统的数据收集)
  • Sqoop(数据转移,用于两个数据库的数据转移传递)
  • Storm(数据分析,即时计算,不同于hadoop的批量计算)
  • Ambari(简化Hadoop复杂操作的工具)
  • Mapreduce(解决数据计算问题,比较笨重,过时啦)
  • YARN(资源管理调度系统,出现在Hadoop2.x)
  • Hive("Hadoop的sql",将sql语言翻译成MapReduce程序)
  • Zookeeper(数据管理,约等于文件系统+通知机制)
  • Spark(数据清洗,简化Mapreduce的上手难度)
  • HDFS(解决数据存储问题)
  • Hbase(数仓建模,解决数据查询问题)

二、分布式文件系统

  • 集群:多个人在一起作同样的事 。
  • 分布式 :多个人在一起作不同的事 。
  • 分布式结构如下。 

Hadoop入门(2)HDFS的核心概念和工作原理_第2张图片

  • 简而言之,分布式系统就是由多台机器组成的大的机器集群系统。而分布式文件系统就是将一个大文件分成多个小文件并存储,负责管理文件的系统。
  • 分布式文件系统在物理结构上是由计算机集群中的多个节点构成的,这些节点分为两类,一类叫“主节点”(Master Node)或者也被称为“名称结点”(NameNode),另一类叫“从节点”(Slave Node)或者也被称为“数据节点”(DataNode),正如字面意思一样,主机负责与外界打交道,从机被主机管理。 

Hadoop入门(2)HDFS的核心概念和工作原理_第3张图片


三、HDFS

  • Hadoop的分布式文件系统。

(一)HDFS优点和缺点

  • 大存储(分布式)
  • 比传统机器读写快(并发读写,不受单台机器的吞吐量和容量限制)
  • 成本低,支持廉价硬件
  • 容错率高(因为支持备份)
  • 移动计算(把计算任务下发到数据所在的节点进行处理)
  • 不适合小文件存储。(生成的记录信息浪费空间)。
  • 适合用于处理批量数据,而不适合于随机定位访问(量大难查)。
  • 不适合多次修改(满足一致性原则)

 

(二)HDFS的部分专业术语

数据块(Block)

  • 当我们遇到一个大的数据时,HDFS会将它拆分成许多个小的数据块(Block),以便分布式存储。

元数据(MateData)

  • 记录了这些数据块分别在哪个数据节点存储,顺序按照距离远近排序,越近越前。
  • 描述数据的数据,这种信息一般称为“元数据”。

 

(三)HDFS的部分核心组件

名称节点(简称NN,NameNode)

  • 也称主节点,作为中心服务器,主要负责接受客户端的读写请求。在主节点的统一调度下进行数据块的创建、删除和复制等操作,主节点的元数据信息会在启动后加载到内存里,以便快速查询。
  • 管理数据节点。
  • 控制客户端的访问权限。
  • 需要维护块信息表数据节点信息表
  • NameNode有两个重要文件,如下。
  1. fsimage:元数据镜像文件,保存文件系统的目录树。
  2. edits:元数据操作日志(针对目录树的修改操作),被写入共享存储系统中。

第二名称节点(简称SNN,Secondary NameNode)

  • 并不是主节点的备份文件,但是是备用主节点。
  • 它主要为了帮助主节点分担压力,类似主节点的“助手”。它的主要工作是在主节点忙时,帮助主节点合并edits ,减少NN启动时间,合并流程如下图。 

Hadoop入门(2)HDFS的核心概念和工作原理_第4张图片

数据节点(简称DN,DataNode)

  • 主要为了存储数据块。
  • 必须向主节点汇报心跳、块列表和其他确认信息ack。

 

(四)HDFS的工作流程

1、如何分块

  • 当我们遇到一个大的数据时,HDFS会将它拆分成许多个小的数据块(Block),以便分布式存储。
  • 数据块容量太小不合适,寻址困难。
  • 数据块容量太大也不合适,容易产生外部碎片。
  • 在Hadoop2.x,这个块的大小默认是128MB,Hadoop1.x版本,默认大小是64MB。若文件大小不到128MB,则单独存成一个块。

2、如何备份

  • 分好块后,为了保证容错性(软硬件出错导致的数据丢失之类),HDFS需要对数据块进行备份。Hadoop默认一个数据块备份3个副本,分布策略如下。
  • 第一个副本:随机挑选一台磁盘不太满,CPU不太忙的节点。
  • 第二个副本:放置在于第一个副本不同的机架的节点上。
  • 第三个副本:与第二个副本相同机架的节点。
  • 更多副本:随机节点 

Hadoop入门(2)HDFS的核心概念和工作原理_第5张图片

  • 存储过程正如下图一般。 (右上角的是元数据表) 

Hadoop入门(2)HDFS的核心概念和工作原理_第6张图片

Hadoop入门(2)HDFS的核心概念和工作原理_第7张图片

 

3、检测数据(块)损坏流程

  1. 数据节点会周期性向主节点汇报自己的块列表信息。
  2. 汇报信息前,数据节点会通过验证校验码去筛选是否存在数据块的数据损失,如果发现数据块数据有所损失,则不上报。
  3. 主节点通过对比自己的块列表和数据节点上报的信息,知道数据块的损坏情况,并更新自己的块表。

4、检测数据节点(DN)损坏流程

  1. 数据节点通过向主节点发送心跳保持与其联系(3秒一次)。
  2. 如果主节点10分钟没有收到数据节点的心跳,则认为其已经意外丢失,主节点会开始复制他在其他数据节点上的备份数据块,重新备份。

5、写文件流程

  Hadoop入门(2)HDFS的核心概念和工作原理_第8张图片

Hadoop入门(2)HDFS的核心概念和工作原理_第9张图片

Hadoop入门(2)HDFS的核心概念和工作原理_第10张图片

  • 数据通常以64kb被写入(被称为数据包),所有数据包在被节点接受写入后,都会返回一个确认信息给客户端,如果客户端没收到确认信息,它就会重新调整管道。

 

  • 下面是详细的解释。

Hadoop入门(2)HDFS的核心概念和工作原理_第11张图片

 

  • (1)客户端调用DistributedFileSystem对象的create()方法新建文件。
  • (2) DistributedFileSystem会对NameNode创建一个RPC调用, 在文件系统的命名空间中创建一个新文件,需要注意的是,此刻该文件中还没有相应的数据块。
  • (3) NameNode通过执行不同的检查来确保这个文件不存在而且客户端有新建该文件的权限。如果这些检查都通过了,NameNode就会为创建新文件写下一条记录;反之,如果文件创建失败,则向客户端抛出一个IOException异常。
  • (4)随后DistributedFileSystem向客户端返回一个FSDataOutputStream对象,这样客户端就可以写入数据了。和读取事件类似,FSDataOutputStream封装一个DFSOutputStream对象,该对象负责处理DataNode和NameNode之间的通信。在客户端写入数据的时候,DFSOutputStream将它分成一个个的数据包,并且写入内部队列,被称之为”数据队列”(data queue)。
  • (5) DataStream处理数据队列,它的任务是选出适合用来存储数据副本的一组DataNode,并据此要求NameNode分配新的数据块。这一组DataNode会构成一条管线,DataStream会将数据包流式传输到管线中的第一个DataNode,然后依次存储并发送给下一个DataNode.
  • (6) DFSOutPutStream也维护着一个内部数据包队列来等待DataNode的收到确认回执,称为"确认队列”(askqueue)。收到管道中所有DataNode确认信息后,该数据包才会从确认队列删除。
  • (7)客户端完成数据的写入后,会对数据流调用close()方法。

6、读文件流程

 Hadoop入门(2)HDFS的核心概念和工作原理_第12张图片

Hadoop入门(2)HDFS的核心概念和工作原理_第13张图片

  • 如果出现了因为数据错误导致的读错误,那么客户端会去列表中的其他备份节点读数据。

 

  • 下面是详细的解释。 

Hadoop入门(2)HDFS的核心概念和工作原理_第14张图片

  • (1)客户端通过调用FileSystem对象的open(方法打开要读取的文件,对于HDFS来说,这个对象是DistributedFileSystem的一个实例。
  • (2) DistributedFileSystem通过使用远程过程调用 (RPC) 来调用NameNode,以确定文件起始块的位置。
  • (3)对于每个块,NameNode返回到存有该块副本的DataNode地址。此外,这些DataNode根据它们与客户端的距离来排序。如果该客户端本身就是一个DataNode,那么该客户端将会从包含有相应数据块副本的本地DataNode读取数据。DistributedFileSystem类返回一 个FSDatalnputStream对象给客户端并读取数据,FSDatalnputStream转而封装DFSInputStream对象,该对象管理着DataNode和NameNode的I/O。接着,客户端对这个输入流调用read()方法。
  • (4)存储着文件起始几个块的DataNode地址的DFSInputStream,接着会连接距离最近的文件中第一个块所在的DataNode。通过对数据流的反复调用read()方法,实现将数据从DataNode传输到客户端。
  • (5)当快到达块的末端时,DFSInputStream会关闭与该DataNode的连接, 然后寻找下一个块最佳的DataNode.
  • (6)当客户端从流中读取数据时,块是按照打开的DFSInputStream与DataNode新建连接的顺序进行读取的。它也会根据需要询问NameNode从而检索下一批数据块的DataNode的位置。一旦客户端完成读取,就对FSDatalnputStream调用close()方法。

四、参考与推荐

  1. 用漫画形式解说HDFS的存储原理,通俗易懂,感谢画家作者。
  2. 详解HDFS,通俗易懂,感谢画家作者。
  3. 《Google file system》(暂未看),用于处理存储的分布式文件系统(GFS
  4. 《Google MapReduce》(暂未看),用于计算的分布式计算框架MAPREDUCE
  5. 《从零开始学Hadoop大数据分析》,hdfs的读写流程的详细解释转载自此书,感谢作者。

你可能感兴趣的:(Hadoop入门(2)HDFS的核心概念和工作原理)