大数据

落爺英雄遲暮 提交于 2020-08-11 05:06:34

HDFS

  • 主要内容

 

① HDFS概述

1.1 HDFS定义

  • HDFS是一个文件系统,用于存储文件;其次,它是分布式的,由很多服务器联合起来实现功能;
  • HDFS的使用场景适合一次写入,多次读出的场景,且不支持文件的修改。适合用来作数据分析,不适合做网盘应用。
  • HDFS只是分布式文件管理系统中的一种。

1.2 HDFS优缺点

优点:

缺点:

1.3 HDFS组成架构

简单来说就是:

NN:存储数据的目录;

DN:存储具体的信息;

2NN:辅助NN工作;

1.4 HDFS文件块大小(面试重点

HDFS中的文件是分块(block)存储的,block在hadoop 2.x中默认是128M,在hadoop 1.x中是64M。

 

② HDFS的数据流(面试重点)--- 相当重要

HDFS写数据流程:

具体流程:

1 客户端向NamaNode请求上传文件,NameNode检查目标文件是否已存在,父目录是否存在。

2 NameNode返回是否可以上传。

3 客户端请求NameNode,第一个block快上传到哪几个节点。

4 NameNode返回3个DataNode节点,分别为dn1、dn2、dn3。

5 客户端向dn1请求上传数据,dn1收到请求会继续调用dn2,然后dn2调用dn3,将这个通信管道建立完成。

6 dn1、dn2、dn3逐级应答回复客户端。

7 客户端开始往dn1上传第一个Block(先从磁盘读取数据放到一个本地内存缓存),以Packet为单位,dn1收到一个Packet就会传给dn2,dn2传给dn3;dn1每传一个packet会放入一个应答队列等待应答。

8 当一个Block传输完成之后,客户端再次请求NameNode上传第二个Block的服务器。(重复执行3-7步)

 

HDFS读数据流程:

具体流程:

1 客户端向NameNode发送请求下载文件,NameNode通过查询元数据,找到文件块所在的DataNode地址;

2 挑选一台DataNode(就近原则,然后随机)服务器,请求读取数据;

3 DataNode开始传输数据给客户端(从磁盘里面读取数据输入流,以Packet为单位来做校验);

4 客户端以Packet为单位接收,先在本地缓存,然后写入目标文件;

 

③ NameNode和SecondaryNameNode工作机制(面试开发重点

3.1 知识背景:

首先分析一下问题的产生背景:

  1. 如果数据都保存在磁盘中,当NN需要频繁的响应客户端请求进行读写时,效率会比较低;
  2. 如果将数据存储在内存中,读写速度很快,但是一旦断电,数据就会全部丢失;

基于上述问题,我们引出了编辑日志(Edits)镜像文件(FsImage)的概念。

镜像文件:用于备份内存中的文件,防止断电导致数据丢失;(备份文件,保证准确性

编辑日志:当元数据有更新或者添加元数据时,修改内存中的元数据并追加到Edits中。(更新数据块,保证了高效性

Ps:当NN断电导致元数据丢失时,可以通过Edits和FsImage的合并,合成元数据。

 

3.2 NN和2NN工作机制

第一阶段:NN启动

  1. 第一次启动NameNode格式化后,创建Fsimage和Edits文件。如果不是第一次启动,直接加载编辑日志和镜像文件到内存
  2. 客户端对元数据进行增删改的请求
  3. NN记录操作日志,更新滚动日志;(先写编辑日志,再更新内存,防止断电数据丢失
  4. NN在内存中对数据进行增删改;

第二阶段:2NN工作(合并编辑日志和镜像文件)

  1. 2NN询问NN是否需要执行CheckPoint(检查点)。并带回NN是否检查的结果;
  2. 当满足CheckPoint执行条件,2NN请求执行CheckPoint;
  3. 滚动正在写的Edits到edits_001(相当于复制一份,用于合并),同时创建一个新的文件edits_inprogress_002用于更新记录新的元数据
  4. 将滚动前的编辑日志和镜像文件复制到2NN;
  5. 2NN加载编辑日志和镜像文件到内存,并合并;
  6. 合并生成新的镜像文件Fsimage.CheckPoint;
  7. 拷贝Fsimage.CheckPoint到NN,并将其重新命名为Fsimage;

CheckPoint触发的条件:

1 定时时间到;

2 Edits中的数据满了;

 

④  DataNode工作机制

具体流程:

  1. DN启动后向NN注册,注册通过后,DN周期性(1小时)的向NN上报所有的快信息;
  2. DN和NN通过心跳机制进行通讯。心跳是每3秒一次,心跳返回结果带有NameNode给该DataNode的命令如复制块数据到另一台机器,或删除某个数据块。如果超过10分钟没有收到某个DataNode的心跳,则认为该节点不可用。
  3. 集群运行中可以安全加入和退出一些机器。

 

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!