文章目录
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