HADOOP的概述

HADOOP的概述

Hadoop:HDFS和mr

HDFS的概述

HDFS是Hadoop分布式文件系统,用来分布式存储海量数据,并具有高可靠 高性能 可伸缩的能力。

hdfs屏蔽了分布式存储的细节,提供了标准的访问方式,能够以类似访问本地文件系统的方式访问hdfs中的文件。

可以通过shell 或 javaapi方式操作hdfs中的数据。

HDFS技术细节

分布式存储系统

HDFS的主要原理,是将数据进行切块后进行复制并分布式存储在集群的多个节点中,从而实现了海量数据分布式存储,并通过副本实现了可靠性保证。

其中切出的块称为Block。

负责存放Block的节点称之为DataNode节点。

负责存放元数据的节点称之为NameNode节点。

另外还有一个独立进程称作SecondaryNameNode负责帮助NameNode进行元数据的合并操作

Block 块—文件切块

知识点:

1.文件块的切分规则
2.存储规则(往datanode存储)
3.128M不是文件块的固定大小,只是最大值

HDFS中存储的基本单位。

当文件被存储到hdfs的过程中,会先将文件按照指定大小来切块即block,复制出指定数量的副本(默认是3个),分布式存储在集群中(存储在不同的datanode里)

Hadoop 1.0的时候默认大小Block是64MB

Block 默认的大小为128MB

如果切分过后,剩余数据不够128MB,则会将剩余数据单独作为一个Block存储(剩多少块的大小就是到少),数据多大,Block就多大,Block块的数量就越多,

注意:128MB只是最大大小,不是固定大小

例如,一个256MB文件,共有256/128=2个Block.

一个258MB文件,共有258/128 = 2 余下2MB,则余下的2MB会独占一个Block大小为2MB,则且分出 两个128MB的Block和一个2MB的Block

一个1MB文件,则单独占用一个Block,这个Block为1MB大小。

将文件切块有如下几个目的

1.一个大文件切分为小的若干个Block方便分布式的存储在不同磁盘中

2.屏蔽了数据的区别,只需要面向Block操作,从而简化存储系统。

3.有利于数据的复制。每次复制的是一个体积较小的Block,而不是一个大型文件,效率更高。

NameNode

存储元数据信息(不是文件数据)

客户获取文件块信息首先通过nn去找对应的dn

NameNode维护着HDFS中的元数据信息(不是文件数据),包括文件信息 目录结构信息 副本数量信息 文件和Block之间关系的信息、Block和DataNode之间的关系信息,数据格式参照如下:

FileName replicas block-Ids id2host

存储规则:例如: /test/a.log,3,{b1,b2},[{b1:[h0,h1,h3]},{b2:[h0,h2,h4]}]

NameNode中的元数据信息存储在内存/文件中,内存中为实时信息,文件中为数据镜像作为持久化存储使用。

其中内存中的信息包括 文件信息 目录结构信息 副本数量信息 文件和Block之间关系的信息、Block和DataNode之间的关系信息

而文件中的信息包括文件信息 目录结构信息 副本数量信息 文件和Block之间关系的信息

可以发现文件中的元数据比起内存中缺失了 blockid和datanode之间的对应关系,这是因为,hdfs集群经常发生变动,datanode变多或变少都是很正常的,因此这些信息都是临时在内存中组织的,而不会存储在磁盘镜像文件中

文件包括:(磁盘文件信息)

fsimage 元数据镜像文件(磁盘文件)。存储某NameNode元数据信息,并不是实时同步内存中的数据。

edits 操作日志文件

fstime 保存最近一次checkpoit的时间

触发文件文件合并的前提条件:

1.当fstime时间达到3600s触发问价合并

2.当日志文件(edits)达到64MB时触发文件合并

热备份:snn不是nn的热备(实时备份)

在这里插入图片描述

snn具备一定的数据的备份能力----但是数据的完整性不能保证

能不能将snn和nn放到一台机器上(是可以的)但是工作环境不建议,为了性能的提升

当有写请求时,NameNode会首先写editlog到磁盘edits文件中,成功后才会修改内存,并向客户端返回

所以,fsimage中的数据并不是实时的数据,而是在达到条件时要和edits文件合并,合并过程需要SNN参与

之所以不直接改fsimage而是要在edits中记录日志,是因为记录日志是一种连续读写操作,比直接改fsimage的随机读写操作效率要高的多。

DataNode

数据以Block的形式存放在DataNode中

DataNode节点会不断向NameNode节点发送心跳报告保持与其联系

在心跳报告中,向NameNode报告信息,从心跳响应中接受NameNode的指令,执行对块的复制 移动 删除等操作。

NameNode如果10分钟都没收到dn的心跳,则认为该DataNode已经lost,并copy其上的block到其他dn

SecondaryNameNode

SecondaryNameNode并不是NameNode的热备份,而是协助者帮助NameNode进行元数据的合并,

从另外的角度来看可以提供一定的备份功能,但并不是热备,只在极端情况下可能用来恢复元数据,但是可能丢失数据。

何时出发数据合并?:

  1. 当fstime的时间达到3600秒时触发这个操作

  2. 当edits日志文件大小达到64M时触发这个操作

合并过程(参看文档图):

在这里插入图片描述

Block副本放置策略:(面试题)

第一个副本:放置在上传文件的DN,如果是集群就外提交,就随机选择一台磁盘不太满,cpu不太忙的节点

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

第三个副本:放置在与第二个副本相同机架的节点上

更多副本:随机节点

HDFS的执行路程

block:1.切分规则128
2.最大值,不是固定值
3.存储规则:往datanode存储

NameNode:维护元数据信息

1、fsimage(数据持久化操作)
2.edits(日志文件—修改记录)
3.fstime(文件合并的时间)

文件合并

1.当fstime里的时间达到3600s

2.edits文件数据达到64M

SNN执行过程

1.Nn将日志文件复制一份产生新的日志文件 edits.new

2.snn通过http get获取原始日志文件以及磁盘文件----合并成为新的磁盘文件

3.将新的磁盘文件复制给nn

4.将旧得日志文件删除,将新的日志文件做重命名操作—edits

5.将旧的磁盘文件删除,将新的磁盘文件做重命名操作–fsimage

副本放置策略

1.就近原则

1.考略网络延迟 2.当前dn是否空闲

2.与副本1不同机架

3.副本2相同机架 不同机器

hdfs执行流程

HDFS的读流程

在这里插入图片描述

1.客户端向服务器端发送请求—进行数据的读取

2.nn要做两部操作:验证当前用户是否具有访问权限 校验当前要读取的数据是否存在

3.nn就会将对应的block块的存储的地址信息(对应的dn的地址信息)返回给客户端

4.客户端就会接收到nn发送来的地址信息,去找对应的dn,进行数据的读取

5.数据表读取完毕之后,释放资源(关闭客户端与服务器端的连接)

HDFS的写流程

在这里插入图片描述

1.客户端向服务器端发起连接请求—数据写入的请求

2.服务器接收这个请求:验证当前用户是否具有数据写入的权限 校验当前要写入的文件是否真实存在

3.服务器端为客户端返回dn的地址信息

4.接收到dn地址信息,进行文件切块的操作(128M为规则)

5.客户端就会拿着dn地址(第一个副本)信息进行block的存储

6.首先第一个副本找到对应的dn进行存储—默认3副本,dn之间同过管道流的形式进行副本的传输

7.第二、三副本就通过channel进行数据传输操作,第三个副本传输完成之后

8.依次向上一级dn发送ack信息

9.将这个ack信息发送给客户端,客户端接收信息,才会执行第二个block的存储操作

10.block全部存储完成之后,向服务器端发送信息(写入完毕)释放资源,断开连接

注意:

1.数据的传输是以namenode为基础的-----没有参与,只是单纯返回地址信息

2.文件的block块是hdfs来进行切分的----不是,是客户端进行文件的操作

3.就是一个block块是上产3次吗----在dn内部已管道流的形式进行的内部传输

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值