HDFS知识总结

HDFS概述

HDFS架构图:

 

  HDFS(Hadoop分布式文件存储系统),为了保证数据的可读性以及可靠性,HDFS对数据进行了切块操作并复制后,存放到多个节点下。

  HDFS中存在一个名称节点NameNode和多个数据节点DataNode,NameNode存放集群元数据,负责管理集群。DataNode做数据存储。

NameNode:

  存放元数据信息

  元数据信息保存在磁盘、文件(fsimage)中

  存放block与节点DataNode的映射关系

DataNode:

  存放数据block

  存储在磁盘中

  维护文件与block的映射关系

 

HDFS的优点

1.支持超大文件存储

2.检测和快速应对硬件故障

3.流式数据访问:

  流式数据访问增加了数据的吞吐量,同事也增高了数据访问的延迟性,Hadoop旨在大数据的访问与存储,而不是数据访问的速度

4.一次写入,多次读取

5.高容错性:

数据采取多个副本在多个节点保存,副本丢失后自动恢复

6.DataNode可构建在廉价机器上

HDFS缺点

1.数据访问延迟:

因提升了数据访问的吞吐量,那么延迟也相应的提升

2.大量小文件

在HDFS中数据的元数据信息都是存储在NameNode下,大量的小文件占用NameNode内存,会影响NameNode节点性能

3.多用户写入、修改

Hadoop数据为一次写入,多次读取,存入后不可修改(2.0后支持追加)

 

Block 块概念

Block是HDFS最基本存储单位

  在HDFS中存储的都是超大型数据文件,将这些大型数据文件切分为多个数据块,分别存储到不同的磁盘上,这里的块既Block。在HAdoop1.0中Block默认大小64M,Hadoop2.0more默认大小为124M。

将文件切分为多个块,有以下好处:

A:可靠性保证,每个数据块会被复制备份,存放在多个节点下。

B:有利于数据的复制,在HDFS中,每个Block会被默认复制为3份

C:一个文件如果小于128M,那么Block大小即文件大小

 

NameNode!!!

NameNode为HDFS运行的中心,其内承载着HDFS的元数据信息:

1.文件名称

2.文件与Block关系

3.Block数量

4.Block与DataNode的关系

示例:/test/a.log,3,{b1,b2},[{b1:[h0,h1,h3]},{b2:[h0,h2,h4]}]

  NameNode中的元数据信息存储在内存和文件(fsimage)中,内存中为最新的实时信息,fsimage中为数据镜像做持久化存储。

在NameNode中文件包含:

1.fsimage元数据镜像文件,metadata的载体

2.edits操作日志文件

3.fstime最近依一次checkpoit的时间

  在HDFS中,当客户端请求写入数据时,NameNode会首先在edits文件中写入操作日志,当写入成功后,再修改内存的metadata信息,并向客户端返回请求你结果。故fsimage中存放的不是实时的元数据信息,实时信息存放于内存里。

SecondaryNameNode

SNN不是NN的热备份,其作用是协助NN做metadata信息合并,从另一种角度来说其也是metadat的一个备份,但是非最新metadata信息,迫不得已下可以选择恢复其中metadata信息

metadata数据合并:

在hdfs配置文件中

根据配置文件设置的时间间隔:fs.checkpoint.period 默认3600秒进行一次合并;

根据配置文件设置的edits log大小: fs.checkpoint.size 默认达到64MB大小后进行合并;

合并过程!!:

  当达成合并条件后,SNN会将NN中edits文件和fsimage文件拷贝过去,同时在NN中创建edits.new文件负责记录新的读取和写入请求,在SNN中,将拷贝的edits文件和fsimage文件合并为新的fsimage文件,在将新的fsimage文件拷贝回NN中替换之前的fsimage,NN再将edits.new文件修改为edits。注:在fsimage合并过程,可能产生新的metadata信息

  SNN不是NN热备,但也提供了一部分的数据备份能力(非最新metadata数据),原因在于edits.new文件中的数据丢了就找不回了

  通常SNN与NN配置在不同节点上一提升性能,并提供一定的metadata信息安全性

 

DataNode

  DataNode作用为存储Hadoop数据,其上的数据存储形式为Block

  DataNode与NameNode采取心跳机制保持联系(3秒一次),DataNode会不断向NameNode发送心跳报告

  Hadoop启动初始化时,DataNode会告知NameNode当前节点下存储的Block信息

  在后续HDFS工作中,DataNode会不断的更新NameNode中metadata信息,并接受NameNode节点的指令,创建、移动、和删除对应的Block

  如果NameNode10分钟没有收到DataNode的心跳,则认为其lost,并将其上的Blockcopy到其他DataNode节点下

 Block副本放置策略   

第一个副本:如果上传文件的服务器本身就是DataNode,就放置在上传文件的DN;如果是外部客户端向集群上传,就随机选择一台磁盘不太满,cpu不太忙的节点

       第二个副本:放置在第一个副本不同机架的节点上

       第三个副本:放置在与第一个副本相同机架的节点上(机架内通讯比机架间通讯块)

       如果保存更多副本:随机节点

 

posted @ 2018-11-28 11:47  丶Biu~  阅读(29)  评论(0)    收藏  举报