hadoop从零开始教程第三篇(HDFS原理)

1、概述

1.HDFS集群分为两大角色:NameNode、DataNode (Secondary Namenode)
2.NameNode负责管理整个文件系统的元数据
3.DataNode 负责管理用户的文件数据块
4.文件会按照固定的大小(blocksize)切成若干块后分布式存储在若干台datanode上
5.每一个文件块可以有多个副本,并存放在不同的datanode上
6.Datanode会定期向Namenode汇报自身所保存的文件block信息,而namenode则会负责保持文件的副本数量
7.HDFS的内部工作机制对客户端保持透明,客户端请求访问HDFS都是通过向namenode申请来进行

2、HDFS写数据流程

在这里插入图片描述

步骤

  1. 客户端向NameNode发起请求,要上传文件。(其实是访问NameNode中的元数据,DataNode信息池记录上传的文件与各个DataNode存储文件块的对应关系)
  2. NameNode返回响应:可以上传
  3. 客户端对文件以128M进行分割后上,对每个block向NameNode发起请求,返回存放的DataNode信息
  4. NameNode将存放的DataNode返回给客户端。
    NameNode选择DataNode的策略如下:(机架感知配置会对DataNoda所在机架进行配置)
    a、第一个副本先考虑与客户端最接近的DataNode(同机架);
    b、第二个副本考虑与客户端最远的DataNode(不同机架);
    c、第三个副本就是与第一个副本同一个机架中随机现在一个DataNode
  5. 客户端与最近一个DataNode建立channel通道(DataNode1)
    5.1DataNode1再去与DataNode3建立channel通道
    5.2DataNode3再去与DataNode4建立channel通道
  6. 应答:通道建立完成
  7. 客户端以64K的packet进行传输,传输到DataNode1中先放到缓冲区, 缓冲区将此文件传输到DataNode3,并同时将文件存储到本地的文件中

其他细节

  • 上传packet文件中的校验,是以chunk进行校验,一个chunk是512byte,当校验完成后表示一个packet文件传输成功
  • 文件成功传输到一个DataNode1,即表示上传成功,因为NameNode会对文件进行备份工作

3、HDFS读数据流程

在这里插入图片描述

  • 客户端向NameNode请求下载文件
  • NameNode将文件对应的block文件与其的DataNode返回给客户端
  • 客户端依次与相应的DataNode建立socket连接下载文件
  • 客户端以packet接收在本地缓存,再将文件拼接成为原文件

4、HDFS的NameNode工作机制

  • NameNode职责
    负责客户端请求的响应
    元数据的管理(查询,修改)

  • 元数据管理
    namenode对数据的管理采用了三种存储形式:
    内存元数据(NameSystem)
    磁盘元数据镜像文件
    数据操作日志文件(可通过日志运算出元数据)

  • 元数据的存储机制
    A、内存中有一份完整的元数据(内存meta data)
    B、磁盘有一个“准完整”的元数据镜像(fsimage)文件(在namenode的工作目录中)
    C、用于衔接内存metadata和持久化元数据镜像fsimage之间的操作日志(edits文件)注:当客户端对hdfs中的文件进行新增或者修改操作,操作记录首先被记入edits日志文件中,当客户端操作成功后,相应的元数据会更新到内存meta.data中

  • 元数据的手动查看
    可以通过hdfs的一个工具来查看edits中的信息
    bin/hdfs oev -i edits -o edits.xml
    bin/hdfs oiv -i fsimage_0000000000000000087 -p XML -o fsimage.xml

  • 元数据的checkpoint
    1、首先文件传输和修改都是记录在NameNode的内存中,并且将操作内容记录到edit的文件中。
    2、所有查询都是通过查询NameNode的内存完成的。
    3、将内存的内容存放到磁盘的文件image中是通过SecondNameNode来实现的。每隔一段时间,会由secondary namenode将namenode上积累的所有edits和一个最新的fsimage下载到本地,并加载到内存进行merge(这个过程称为checkpoint)

在这里插入图片描述
1、SecondeNameNode每个一段时间来请求进行checkpoint操作
2、NameNode将日志文件edit进行切换,即生成一个新的edit,将之后的操作日志记录到新的edit文件中。
3、secondNameNode将image文件和日志文件下载到本地
4、secondNameNode通过image文件和日志文件,在内存中合并生成最新的内容
5、将内存的内容序列化生成image.chkpoint文件
6、secondNameNode将此文件上传,NameNode将上传的文件替换原先的image文件
这样就是实现的数据的写入到磁盘的过程。

  • checkpoint操作的触发条件配置参数
    dfs.namenode.checkpoint.check.period=60 #检查触发条件是否满足的频率,60秒
    dfs.namenode.checkpoint.dir=file://KaTeX parse error: Expected 'EOF', got '#' at position 36: …/namesecondary #̲以上两个参数做checkpoi…{dfs.namenode.checkpoint.dir}
    dfs.namenode.checkpoint.max-retries=3 #最大重试次数
    dfs.namenode.checkpoint.period=3600 #两次checkpoint之间的时间间隔3600秒
    dfs.namenode.checkpoint.txns=1000000 #两次checkpoint之间最大的操作记录
  • checkpoint的附带作用
    namenode和secondary namenode的工作目录存储结构完全相同,所以,当namenode故障退出需要重新恢复时,可以从secondary namenode的工作目录中将fsimage拷贝到namenode的工作目录,以恢复namenode的元数据

DataNode的工作机制

  • Datanode工作职责
    存储管理用户的文件块数据
    定期向namenode汇报自身所持有的block信息(通过心跳信息上报)
    NameNode可以通过上报的信息对集群中丢失的文件进行备份
<property>
	<name>dfs.blockreport.intervalMsec</name>
	<value>3600000</value>
	<description>Determines block reporting interval in milliseconds.</description>
</property>
  • Datanode掉线判断时限参数
    datanode进程死亡或者网络故障造成datanode无法与namenode通信,namenode不会立即把该节点判定为死亡,要经过一段时间,这段时间暂称作超时时长。HDFS默认的超时时长为10分钟+30秒。如果定义超时时间为timeout,则超时时长的计算公式为:
    timeout = 2 * heartbeat.recheck.interval + 10 * dfs.heartbeat.interval
    而默认的heartbeat.recheck.interval 大小为5分钟,dfs.heartbeat.interval默认为3秒。
    需要注意的是hdfs-site.xml 配置文件中的heartbeat.recheck.interval的单位为毫秒,dfs.heartbeat.interval的单位为秒。所以,举个例子,如果heartbeat.recheck.interval设置为5000(毫秒),dfs.heartbeat.interval设置为3(秒,默认),则总的超时时间为40秒。
<property>
        <name>heartbeat.recheck.interval</name>
        <value>2000</value>
</property>
<property>
        <name>dfs.heartbeat.interval</name>
        <value>1</value>
</property>
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值