HDFS 学习

HDFS 简介

1 简介

HDFS(Hadoop Distributed File System) ,Hadoop分布式文件系统,用来解决海量数据的存储问题。
核心组件:
HDFS(分布式文件系统)
YARN(运算资源调度系统)
MAPREDUCE(分布式运算编程框架)

2 特点

1)优势
高容错性:HDFS多副本分布式存储,当一个副本丢失了,能够自动恢复,所以HDFS具有高容错性,默认是3副本。
大数据处理:HDFS处理数据的规模甚至可以达到PB级别,文件数量甚至百万之上
HDFS是设计成适应一次写入,多次读出的场景,且不支持文件的修改。
2)劣势
HDFS不擅长大量小文件的存储,因为NameNode的内存是有限的,但大量小文件存储,会耗用大量NameNode的内存,来存储文件的目录、块信息等。
HDFS高延时,不适合低延时的访问。
HDFS不支持并发写和文件的修改

3 HDFS架构图解

1.HADOOP 生态系统主要组成架构

在这里插入图片描述

2. HDFS架构示意图

在这里插入图片描述

1)NameNode(nn)
它是一个主管、管理者,Master节点,负责维护整个hdfs文件系统的目录树,以及每一个路径(文件)所对应的block块信息。
(1)管理HDFS的名称空间;
(2)配置副本策略;
(3)管理数据块(Block)映射信息;
(4)处理客户端读写请求。

2)DataNode
就是Slave。NameNode下达命令,DataNode执行实际的操作,负责存储client发来的数据块block;执行数据块的读写操作。Datanode是HDFS集群从节点,每一个block都可以在多个datanode上存储多个副本,副本数量也可以通过参数dfs.replication设置。
HDFS存储文件是分块存储(block),默认大小在hadoop2.x版本中是128M,老版本中是64M。这个可以通过配置参数dfs.blocksize来进行调整。HDFS块的大小设置主要取决于磁盘传输速率

3)Secondary NameNode
充当小弟的角色。
(1)辅助NameNode,分担其工作量,比如定期合并Fsimage和Edits,并推送给NameNode ;
(2)在NameNode挂掉时,可辅助恢复NameNode,不过现在有HA,所以很少使用Secondary NameNode。

4)Client
顾名思义,就是客户端。
(1)文件切分。Client将文件切分成一个一个的Block,然后进行上传到HDFS上。
(2)与NameNode交互,获得读取或写入文件的位置信息;
(3)与DataNode交互,读写数据;
(4)Client提供一些命令管理HDFS,比如NameNode格式化操作;
(5)Client提供一些命令访问HDFS,比如对HDFS增删查改操作;

5)Rack
每个DataNode是一部服务器,这些服务器放在一个机架里,构成一个Rack。一个Rack里的所有DataNode共享电源、网线和交换机,因此每次出故障时容易导致一整个Rack的DataNode都丢失数据,因此不能把一个block的所有备份都放在同一个Rack中,需要分散到不同的Rack上存储。
6)Block 数据块
HDFS中的文件是以数据块(Block)的形式存储的,默认最基本的存储单位是128MB(hadoop1.x是以64MB)的数据块,也就是说,存储在HDFS中的文件都会被切分成128MB的一块数据块进行存储,如果文件小于一个数据块的大小,那么按实际大小存储,并不占用整个数据块的空间,数据块之所以设置这么大,其目的是减少寻址的开销,数据块数量越多,寻址数据块所消耗的时间就越大,当然也不会设置过大,

原文链接详情: https://blog.csdn.net/weixin_41519463/article/details/108043646

Secondary NameNoed工作原理

SecondaryNameNode有两个作用,一是镜像备份,二是日志与镜像的定期合并。两个过程同时进行,称为checkpoint(检查点)。 从它的名字上看,它给人的感觉就像是NameNode的备份,但它实际上却不是。很多Hadoop的初学者都很疑惑,Secondary NameNode究竟是做什么的,以及它为什么会出现在HDFS中。
NameNode
NameNode主要是用来保存HDFS的元数据信息,比如命名空间信息,块信息等。当它运行的时候,这些信息是存在内存中的。但是这些信息也可以持久化到磁盘上。

在这里插入图片描述
上面的这张图片展示了NameNode怎么把元数据保存到磁盘上的。这里有两个不同的文件:

fsimage - 它是在NameNode启动时对整个文件系统的快照
edit logs - 它是在NameNode启动后,对文件系统的改动序列
只有在NameNode重启时,edit logs才会合并到fsimage文件中,从而得到一个文件系统的最新快照。但是在产品集群中NameNode是很少重启的,这也意味着当NameNode运行了很长时间后,edit logs文件会变得很大。

在这种情况下就会出现下面一些问题:

**edit logs文件会变的很大,怎么去管理这个文件是一个挑战。**
**NameNode的重启会花费很长时间,因为有很多改动要合并到fsimage文件上。**
如果NameNode挂掉了,那我们就丢失了很多改动因为此时的fsimage文件非常旧。因此为了克服这个问题,我们需要一个易于管理的机制来帮助我们减小edit logs文件的大小和得到一个最新的fsimage文件,这样也会减小在NameNode上的压力。这跟Windows的恢复点是非常像的,Windows的恢复点机制允许我们对OS进行快照,这样当系统发生问题时,我们能够回滚到最新的一次恢复点上。

现在我们明白了NameNode的功能和所面临的挑战 - 保持文件系统最新的元数据。那么,这些跟Secondary NameNode又有什么关系呢?

在这里插入图片描述

Secondary NameNode所做的不过是在文件系统中设置一个检查点来帮助NameNode更好的工作。它不是要取代掉NameNode也不是NameNode的备份, SecondaryNameNode有两个作用,一是镜像备份,二是日志与镜像的定期合并。两个过程同时进行,称为checkpoint(检查点)。 
镜像备份的作用:备份fsimage(fsimage是元数据发送检查点时写入文件); 日志与镜像的定期合并的作用:将Namenode中edits日志和fsimage合并,防止如果Namenode节点故障,namenode下次启动的时候,会把fsimage加载到内存中,应用edits log,edits log往往很大,导致操作往往很耗时。(这也是namenode容错的一套机制)

Secondarynamenode工作过程

SecondaryNameNode备份由三个参数控制fs.checkpoint.period控制周期(以秒为单位,默认3600秒),fs.checkpoint.size控制日志文件超过多少大小时合并(以字节为单位,默认64M), dfs.http.address表示http地址,这个参数在SecondaryNameNode为单独节点时需要设置。

SecondaryNameNode通知NameNode准备提交edits文件,此时主节点将新的写操作数据记录到一个新的文件edits.new中。 
SecondaryNameNode通过HTTP GET方式获取NameNode的fsimage与edits文件(在SecondaryNameNode的current同级目录下可见到 temp.check-point或者previous-checkpoint目录,这些目录中存储着从namenode拷贝来的镜像文件)。 
SecondaryNameNode开始合并获取的上述两个文件,产生一个新的fsimage文件fsimage.ckpt。 
SecondaryNameNode用HTTP POST方式发送fsimage.ckpt至NameNode。 
NameNode将fsimage.ckpt与edits.new文件分别重命名为fsimage与edits,然后更新fstime,整个checkpoint过程到此结束。 

在这里插入图片描述

从工作过程可以看出,SecondaryNameNode的重要作用是定期通过编辑日志文件合并命名空间镜像,以防止编辑日志文件过大。SecondaryNameNode一般要在另一台机器上运行,因为它需要占用大量的CPU时间与namenode相同容量的内存才可以进行合并操作。它会保存合并后的命名空间镜像的副本,并在namenode发生故障时启用。

4.hdfs 的读、写

1、读过程

在这里插入图片描述

当客户端读取文件时,首先向Name Node发起读请求,Name Node收到请求后,会将请求的数据块在Data Node中的具体位置(元数据信息)返回给客户端,客户端根据文件的数据块位置。直接找到相应的Data Node发起读请求

注意

1.遵循就近原则,因为网络延迟最小
2、写操作

在这里插入图片描述
当客户端需要写文件时,首先向Name Node发起写请求,将需要写入的文件名、文件大小等信息告诉Name Node,Name Node会将文件信息记录到本地,同时会验证客户端写入权限,若验证通过,会向客户端返回文件数据块能够存放在Data Node上的存储位置信息,然后客户端直接向Data Node的相应位置写入数据块,被写入数据块的Data Node也会将数据块备份到其他Data Node上

1.这里是根据网络拓扑计算节点的距离,按照最近距离进行分配。一般而言,再本机机架节点负载允许的范围内,会优先选择本机机架节点当作dn1,然后选择最近的机架。用改机架的两个服务端当作其余两个节点dn1,dn2
3、 Hdfs Shell命令
3.1 语法操作

1)hadoop fs 命令
2)hdfs dfs 命令

3.2 常用命令

hadoop的shell命令使用起来非常简单,和linux Shell命令十分相似。
1.启动集群

sbin/start-dfs.sh
sbin/start-yarn
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值