Hadoop之HDFS基础概念(二)

6 篇文章 0 订阅
5 篇文章 0 订阅

HDFS架构

HDFS架构图
大多数分布式框架都是主从架构
HDFS也是主从架构
1、namenode:主节点,也称管理节点、名称节点
2、datanode:从节点,也称工作节点、数据节点
3、secondarynamenode:主节点辅助节点

NameNode

元数据

元数据概念:用来描述文件或者目录信息,如文件大小,路径,类型等等。

命名空间

命名空间概念:文件系统中,为了方便管理和存储,给每个目录,子目录,目录中的文件都起了名字,这样的层级结构,形成了命名空间
注意:同一个目录中不能有同名文化或者子目录
作用:可以通过所在目录+文件名快速精确定位一个文件位置

NameNode

作用:
1、HDFS中的主节点
2、用来存储元数据信息,存储在NameNode内存当中
3、负责响应客户端读写请求

HDFS-metadata

HDFS元数据描述信息
文件目录树、所在文件/目录名称、文件属性(生成时间、副本、权限)、每个文件的快列表、每个block快所在的datanode列表。
HDFS元数据占用内存大小
每个文件、目录等都占用大概150byte字节的元数据信息,这也就是为什么HDFS合适存储大文件,不适合存储小文件的原因。

HDFS元数据信息存储两种方式
1、编辑日志edits.log:客户端对HDFS文件进行增、删、改等事务操作,会被记录到edits.log中。在hdfs-site.xml中属性dfs.namenode.edits.log来配置该文件
2、HDFS元数据镜像文件fsimage:namenode内存中的元数据会另外被保存到该文件。在hdfs-site.xml中属性dfs.namenode.name.dir来配置该文件

DataNode

作用:
存储block以及block元数据到本地磁盘。这里的block块的元数据:block块的长度、block的校验和、时间戳

SecondaryNameNode

作用:
secondaryNameNode辅助NameNode来何必fsimage及edit.log。
问题1:为什么元数据存储在NameNode在内存中
由于NameNode在读写的时候,需要和大量的客户端进行通信,获取元数据信息。为了提交程序效率,所以元数据存储在NameNode中。
问题2:这样做有什么问题?如何解决?
由于元数据信息在NameNode内存当中,那么当NameNode重启时,内存中的数据会丢失,即元数据丢失,所以需要引入edits.log和fsimage本地存储文件。
恢复元数据信息机制:
1、当NameNode重启时,会根据edits.log记录的事务信息恢复元数据信息。(与mySql中恢复数据机制类似)。如果单单这样的机制,会使得edits.log文件越来越大,会导致重启速度变慢,此时就是引入了fsimage用来记录NameNode元数据信息。
2、SecondaryNameNode中会定时检查是否需要合并edits.log和fsimage文件。由此引入检查点机制checkpoint。SecondaryNameNode会每分钟向NameNode检查一次,是否需要合并edits.log和fsimage文件。关于checkpoint相关属性在hdfs-site.xml中配置。

<property>
	<name>dfs.namenode.checkpoint.period</name>
	<value>3600</value>
	<description>1小时合并一次edits.log和fsimage</description>
</property>
<property>
	<name>dfs.namenode.checkpoint.txns</name>
	<value>1000000</value>
	<description>100W个事务记录合并一次edits.log和fsimage</description>
</property>
<property>
	<name>dfs.namenode.checkpoint.check.period</name>
	<value>60</value>
	<description>1分钟检查是否需要合并edits.log和fsimage文件</description>
</property>

合并文件流程
1、SecondaryNameNode向NameNode进行edits.log的滚动,创建一个新的edits.log
2、SecondaryNameNode通过HTTP GET读取NameNode的fsimage和edits.log文件
3、SecondaryNameNode读取fsimage文件内容到内存,并从头到尾执行edits.log文件进行合并fsimage和edits.log,并创建fsimage.ckpt文件,将数据存入该文件
4、SecondaryNameNode通过HTTP PUT将合并的文件发送到NameNode,替换旧的fsimage并重命名去掉ckpt后缀,同时更新记录检查点的时间
合并文件流程
注意:
在合并文件的过程中,会消耗大量cpu,所以SecondaryNameNode和NameNode一般部署在不同的服务器上

心跳机制

工作原理
1、NameNode在启动的时候会太一个ipc server服务
2、DataNode在启动的时候,会向NameNode注册,每隔3s向NameNode发送一个心跳数据包
3、NameNode会返回DataNode数据包,并包含了NameNode让DataNode执行的一些命令
4、如果超过10分钟,NamdNode则默认为该DataNode不可用
5、DataNode会每隔一个周期(6小时),想NameNode上报该DataNode全部的快状态信息
心跳作用
1、NameNode向DataNode返回操作指令
2、检查DataNode是否可用
3、NameNode可以知道每个DataNode存储情况
4、集群刚启动的时候,DataNode都会上报当前存储block块信息,99.9%的block没有达到最小副本数(dfs.namenode.replication.min默认值为1)(可以理解为,每个block快,不包括副本,必须有一个上报给NameNode),则集群处于安全模式,无法操作。

<property>
	<name>dfs.heartbeat.interval</name>
	<value>3</value>
	<description>3s发送一次心跳</description>
</property>
<property>
	<name>dfs.blockreport.intervalMsec</name>
	<value>21600000</value>
	<description>6小时上报block信息</description>
</property>

负载均衡

开启负载均衡

start-balance.sh -t 5%   # 磁盘利用率最高的节点比最少的节点

关闭负载均衡

stop-balancer.sh
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值