第四天 hadoop HDFS上传下载原理

一、HDFS数据流向模型(上传和下载)

1>网络拓扑结构和机架感知

1. 网络拓扑
	节点距离:两个节点到达共同父节点的距离和

在这里插入图片描述

2. 机架感知 ( 副本节点的选择 )
	例如:500个节点,上传数据jdk.tar.gz ,设定副本数为3, 
		  根据机架感知,副本数据存储节点的选择。

在这里插入图片描述

<2>上传操作数据流向模型

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

1. client向namenode发送上传请求(将本地e:/myfile.txt上传到HDFS)
2. NameNode返回上传请求结果
3. clinet接受到可以传递的结果,继续请求NameNode具体上传的数据节点信息
4. NameNode返回备份数据的节点信息给client
5. client可所有的数据节点建立连接,并传递数据
6. client返回上传完毕结果给NameNode

<3>下载操作数据流向模型

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

1. client向namenode发送下载请求(下载/home/zhangsan/myfile.txt)
2. namenode将当前数据的元数据返回给client(client需要下载的数据的信息,数据存储在哪个节点)
3. 就近选择一台数据节点
4. client向数据节点发送下载请求
5. 数据节点返回下载许可
6. 以package数据包下载数据,先在client缓冲,然后持久化磁盘

二、NameNode和StandbyNameNode的工作流程(重点)

<1>NameNode的工作流程/StandbyNameNode的工作流程

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

  1. SNN检查是否达到checkpoint条件:离上一次checkpoint操作是否已经有一个小时,或者HDFS已经进行了100万次操作。
  2. SNN检查达到checkpoint条件后,将该namespace以fsimage.ckpt_txid格式保存到SNN的磁盘上,并且随之生成一个MD5文件。然后将该fsimage.ckpt_txid文件重命名为fsimage_txid
  3. 然后SNN通过HTTP联系ANN。
  4. . ANN通过HTTP从SNN获取最新的fsimage_txid文件并保存为fsimage.ckpt_txid,然后也生成一个MD5,将这个MD5与SNN的MD5文件进行比较,确认ANN已经正确获取到了SNN最新的fsimage文件。然后将fsimage.ckpt_txid文件重命名为fsimage_txit。
    通过上面一系列的操作,SNN上最新的FSImage文件就成功同步到了ANN上。

<2>fsimage镜像文件和edits编辑日志

fsimage镜像文件:存储HDFS中最新的文件信息,元数据,所有文件和目录信息
edits编辑日志: 用户的操作
	

查看:fsimage镜像文件和edits编辑日志
	命令1:查看镜像文件
		hdfs oiv -p 文件的类型   -i  镜像文件   -o  转换后文件的路径

		例如:hdfs oiv -p XML   -i  fsimage00024235   -o  /home/zhangsan/fs1.xml

	命令2:查看编辑日志
		hdfs oev -p 文件的类型   -i  镜像文件   -o  转换后文件的路径

		例如:hdfs oiv -p XML   -i  edits00024235   -o  /home/zhangsan/edits1.xml


案例:
	清空数据,格式名称节点

<3>编辑日志的滚动操作

有新的用户操作和数据时编辑日志滚动

实现编辑日志的手动:hdfs   dfsadmin 	-rollEdits

<4>checkpoint

checkpoint 概念

NameNode的metadata信息在启动后会加载到内存,由于加载到内存的数据很不安全,断电后就没有了,因此必须对内存中存放的信息做持久化处理。
Namenode上保存着HDFS的命名空间。对于任何对文件系统元数据产生修改的操作,Namenode都会使用一种称为Edits的事务日志记录下来。例如,在HDFS中创建一个文件,Namenode就会在Edits中插入一条记录来表示;同样地,修改文件的副本系数也将往Edits插入一条记录。Namenode在本地操作系统的文件系统中存储这个Edits。整个文件系统的命名空间,包括数据块到文件的映射、文件的属性等,都存储在一个称为FsImage的文件中,这个文件也是放在Namenode所在的本地文件系统上。
Namenode在内存中保存着整个文件系统的命名空间和文件数据块映射(Blockmap)的映像。当Namenode启动时,它从硬盘中读取Edits和FsImage,将所有Edits中的事务作用在内存中的FsImage上,并将这个新版本的FsImage从内存中保存到本地磁盘上,然后删除旧的Edits,因为这个旧的Edits的事务都已经作用在FsImage上了。这个过程称为一个检查点(checkpoint)。

checkpoint 过程

在HA模式下checkpoint过程由StandBy NameNode来进行,以下简称为SNN,Active NameNode简称为ANN。
  HA模式下的edit.log文件会同时写入多个JournalNodes节点的dfs.journalnode.edits.dir路径下,JournalNodes的个数为大于1的奇数(至少为3),类似于Zookeeper的节点数,当有不超过一半的JournalNodes出现故障时,仍然能保证集群的稳定运行。
  SNN会读取FSImage文件中的内容,并且每隔一段时间就会把ANN写入edit log中的记录读取出来,这样SNN的NameNode进程中一直保持着hdfs文件系统的最新状况namespace。当达到checkpoint条件的某一个时,就会直接将该信息写入一个新的FSImage文件中,然后通过HTTP传输给ANN。

checkpoint 设置
默认情况下,2NN 一小时执行一次		

设置时间点:hdfs-default.xml  查看 ,   hdfs-site.xml中设置
	
	<property>
		<name>dfs.namenode.checkpoint.period</name>
		  <value>3600</value>
	</property>
		
	<property>
		  <name>dfs.namenode.checkpoint.txns</name>
		  <value>1000000</value>
	</property>

辅助名称节点的web UI访问地址:
			ip地址:50090

<5>名称节点故障,数据恢复

5.1 指定多个名称节点存储路径
	1. 停止进程
	2. 配置文件:hdfs-default.xml  查看 ,   hdfs-site.xml中设置
		<property>
		  <name>dfs.namenode.name.dir</name>
		  <value>file://${hadoop.tmp.dir}/dfs/name</value>
		</property>
	3. 删除原数据(${hadoop_dir_name}/*  hadoop/logs/*  )

	4. 格式化文件系统			
	hadoop namenode -format
	5. 查看多个名称节点的存储目录 (实时同步,数据是一致)

5.2 名称节点数据的恢复  (edits_inprogress数据会丢失)
	0. 模拟名称节点异常
		jsp 查询namenode的pid
		kill -9  pid
		rm -rf  /home/zhangsan/hadoop/dfs/current/name/*
	1. 将scondarynamenode中存储的元数据远程拷贝到namenode
		scp -r zhangsan@s201:/home/zhangsan/hadoop/dfs/namesecondary/* ./name/
	2. 启动namenode
	 	hadoop-daemon.sh namenode

三、DataNode的工作流程(重点)

<1>流程图

在这里插入图片描述
在这里插入图片描述

<2>安全模式

在集群启动时,hdfs处于安全模式,不允许写操作(此时nn和dn在交互)

hdfs dfsadmin  -safemode enter/leave/wait/get
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值