HDFS学习笔记【Datanode/BlockManager】

这篇具有很好参考价值的文章主要介绍了HDFS学习笔记【Datanode/BlockManager】。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

背景说明

Datanode存储多个块池的数据块,BlockPoolManager管理块池。

BlockPoolManager管理多个块池
BlockOfferService对象管理的单个块池
BlockServiceActor封装了对单个Namenode的操作

与Namenode交互

BockServiceActor与Namenode交互

  • 心跳(heartbeat)
  • 增量块(blockReceivedAndDeleted)
  • 全量块(blockReport)
  • 缓存块 (cacheReport)
    HDFS学习笔记【Datanode/BlockManager】

具体的块操作,还是FsDatasetImpl,FsVolumeList,FsVolume,BlockPoolSplic实现

BlockServiceActor

与单个的Namenode通信,独立线程。

  • NN握手,获得NS信息
  • 向NN注册当前的DN
  • 定向发送汇报信息
  • 执行NN的指令

字段

  • nnAddr
  • state
    NN状态
  • bpos
    上一级BPOfferService的引用
  • lastBlockReport
  • bpThread
  • bpNamenode
    NM RPC请求的代理
  • dn,dnConf
    DN对象的引用
  • bpRegistration
  • shouldServiceRun
  • runningState
    BPServiceActor状态,有CONNECTING,INIT_FAILED,RUNNING,EXITED,FAILED状态。
  • pendingIncrementalBRperStorage
    保存汇报之间的DN存储块变化

构造方法

BPServiceActor(InetSocketAddress nnAddr, BPOfferService bpos){
	this.dn = bpos.getDataNode();
	this.dnConf = dn.getDnConf();
}

start,stop,join方法用于启动BPServiceActor的工作线程

  • start
    BPOfferService调用,启动了直接返回,没启动守护线程的方式启动
  • stop
    BlocakPoolManager调用
    shouldServiceRun设置为false,中断bpThread线程
  • join
    调用bpThread的join方法

工作线程的run方法

  • BPServiceActor.connectToNNAndHandshake()
    初始化BockPool存储
    NN上注册当前Datanode
  • BPServiceActor.offerService
    循环调用,一直到shouldRunService字段为false时停止
    定期向NN发送汇报信息
  • BPServiceActor状态机,表示线程的运行状态。

connectToNNAndHandshake

  • 获取NN RPC代理
  • 获取NS信息,确认NS信息
    从NN获取NS信息
    向BPOfferService确认NS信息,需要确认是否和之前NS一致(毕竟HA)
    确认的是blockPoolId,nsId,Cluster是否一致
  • DN初始化块池
    初始化了DataStorage对象
    FsDatasetImpl对象
    BlockScanner对象
    DirectoryScanner对象
  • 注册
    向BPOfferService注册
    向NN注册
    HDFS学习笔记【Datanode/BlockManager】

offerService

BPServiceActor的主方法,在DN关闭/客户端手动修改shouldOfferService参数时,停止。

  • 定期发送心跳
    默认3s
    DN注册信息
    DN存储信息
    DN缓存信息
    DN写文件连接数
    DN读写使用的线程数
public HeartbeatResponse sendHeartbeat(DatanodeRegistration registration,
StorageReport[] reports,
long dnCacheCapacity,
long dnCacheUsed,
int xmitsInProgress,
int xceiverCount,
int failedVolumes) throws IOException;
  • 心跳响应
    包括DatanodeCommand数组
    包括NNHAStatusHeartbeat对象
public class HeartbeatResponse{
	private final DatanodeCommand[] commands;
	private final NNHAStatusHeartbeat haStatus;
	private final RollingUpgradeStatus rollingUpdateStatus;
}
  • 心跳响应步骤
    响应HA信息
    bpos.updateActorStatesFromHeartbeat(),通过txid字段确定。
    处理NN指令
    processCommand(resp.getCommands());
    这一部分是调用BPOfferService.processCommandFromActor()方法处理的。
  • 汇报增加或者删除的block
    300s
    pendingIncrementalBRperStorage存储了DataStorage存储的两次汇报之间的数据块(发布响应模式)。
    BPServiceActor提供了notifyNamenodeBlock方法,增加的话,立刻通知namenode(offerService方法)
notifyNmaenodeBlock(bInfo,storageUuid,now){
	synchronized(pendingIncrementalBRperStorage){
		addPendingReplicationBlockInfo();
		sendImmediateIBR = true;
		if(noew){
		//唤醒offerService方法,汇报给NN
			pendingIncrementalBRperStorage.notifyAll();
		}
	}
}

notifyNamenodeDeletedBlock()方法

  • 数据块汇报
    时间是6个小时,默认
    调用DatanodeProtocol.reportReceivedDeleteBlocks()汇报最近添加删除的
    FSDatasetImpl获取当前块池汇报信息
  • 数据块汇报
    cacheReport(10进行一次)
    执行Namenode的携带指令
  • 执行数据块扫描
  • 线程睡眠等待
    pendingIncrementalBRperStorage对象上等待,直到到期或者被唤醒(添加块)
  • 忽略异常
    除了Datanode注册信息错误,不合法(不在include列表),VERSION信息错误外,忽略。

BPOfferService

BPOfferService管理一个NS在一个Datanode上的块池
BPOfferService管理两个BPServiceActor的引用。(HA)模式。
BPOfferService管理多个Namnode引用哪个是Active的。(bpServiceToActive)

维护一些重要的信息
服务块池NS信息,块池在NS上的注册信息(NS,ClusterID,BPID),Active信息。

字段

  • NamespaceInfo bpNsInfo
    当前BPOfferService服务的NS信息。握手得到
  • DatanodeRegistration bpRegistration
    Namenode上的注册信息,Datanode注册时得到
  • DataNode dn
    当前DataNode对象的引用
  • BPServiceActor
  • bpServices
    当前命名空间中所有Namnode对应的BPServiceActor的列表。
  • lastActiveClaimTxId

方法

  • 触发汇报
    trySendErrorReport
    reportRemoteBadBlock
    reportBadBlocks
    调用BPServiceActor对象对应的方法,reportBadBlocks
    BPServiceActor调用ClientProtocol.reportBadBlocks向NM汇报
  • 添加和删除数据块
    BPOfferService.notifyNamenodeReceivedBlock()
    BPOfferService.notifyNamenodeDeletedBlock()

BlockPoolManager

负责和管理所有的BPOfferService实例,对外提供添加,删除,启动,停止,关闭BPOfferService类的接口。

字段

  • bpByNameserviceId
    id与BPOfferService映射
  • bpByBlockpoolId
    blockId与BPOfferService映射
  • offerServices
    管理的offerServices

方法

1) 构造队列
BlockPoolManager中是目前已经有的NS
命名空间列表中是DN配置的
这两个不匹配,将要变动的NS放入到 toAdd,toRemove,toRefresh队列中
2)处理队列
如果是Add的话

  • 构造对象,构造BPOfferService,构造BPServiceActor
  • startAll启动工作线程
    其他的也类似

总结

BlockPoolManager逻辑上管理块池.
BPOfferService 主要作用就是启动工作线程,确定Active NN,BPServiceActor对外封一下提供块汇报服务,添加删除数据块服务。
BPServiceActor具体起独立线程向NN心跳,汇报,执行命令NN的。文章来源地址https://www.toymoban.com/news/detail-407293.html

到了这里,关于HDFS学习笔记【Datanode/BlockManager】的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • hdfs --daemon start datanode指令介绍

    hdfs --daemon start datanode 是Hadoop分布式文件系统(HDFS)命令之一,用于启动一个数据节点(Datanode)守护进程。 在HDFS中,数据节点是存储HDFS数据块的物理节点。数据节点存储和管理数据块,并向客户端和其他数据节点提供读写操作。通过启动 hdfs --daemon start datanode 命令,可以

    2024年02月16日
    浏览(33)
  • Hadoop理论及实践-HDFS的Namenode及Datanode(参考Hadoop官网)

            Hadoop分布式文件系统(HDFS)被设计成适合运行在通用硬件(commodity hardware)上的分布式文件系统。有一下几个特点:         HDFS是一个高度容错性的系统,具有高容错、高可靠性、高扩展性的特点,适合部署在廉价的机器上。          HDFS能提供对应用程序数据

    2024年02月14日
    浏览(49)
  • 大量删除hdfs历史文件导致全部DataNode心跳汇报超时为死亡状态问题解决

    背景: 由于测试环境的磁盘满了,导致多个NodeManager出现不健康状态,查看了下,基本都是data空间满导致,不是删除日志文件等就能很快解决的,只能删除一些历史没有用的数据。于是从大文件列表中,找出2018年的spark作业的历史中间文件并彻底删除(跳过回收站) 问题产生过

    2024年02月14日
    浏览(44)
  • 【Hadoop】关于Hadoop集群HDFS启动问题:DataNode启动报错ERROR: Cannot set priority of namenode process

    出了问题第一步一定要先看日志!看日志!看日志! DataNode日志文件在Hadoop目录下的logs文件夹 以下列举两种问题的解决方法: 1.最常见的就是对NameNode进行了多次格式化操作,格式化NameNode,会产生新的集群id,导致NameNode和DataNode的集群id不一致,集群找不到已往数据。如果

    2024年02月06日
    浏览(51)
  • HDFS学习笔记

    HDFS的全称是:Hadoop DistributeFiles System,分布式文件系统。 在整个Hadoop技术体系中,HDFS提供了数据分布式存储的底层技术支持。 HDFS 由三个组件构成:NameNode(NN)、DataNode(DN)、SecondaryNameNode(SNN) HDFS 是一个主/从(Master/Slave)体系架构,由于分布式存储的性质,集群拥有两

    2024年02月11日
    浏览(20)
  • Hadoop学习笔记之HDFS

    分布式存储系统 支持海量数据的存储,成百上千的计算机组成存储集群,HDFS可以运行在低成本的硬件之上,具有的高容错、高可靠性、高可扩展性、高吞吐率等特征,非常适合大规模数据集上的应用。 优点 高容错性 适合批处理 适合大数据处理 流式文件访问 可构建在廉价

    2024年02月07日
    浏览(41)
  • 黑马大数据学习笔记2-HDFS环境部署

    https://www.bilibili.com/video/BV1WY4y197g7?p=22 Hadoop HDFS的角色包含: NameNode,主节点管理者 DataNode,从节点工作者 SecondaryNameNode,主节点辅助 节点 CPU 内存 服务 node1 1核心 4GB NameNode、DataNode、SecondaryNameNode node2 1核心 2GB DataNode node3 1核心 2GB DataNode node1节点执行,root身份登录 上传Hadoo

    2024年02月16日
    浏览(31)
  • hadoop生态圈-- 个人笔记学习05 HDFS优化

    DFSClient和DN在一个节点 —— local reads,远程阅读 Remote reads。 处理方式是一样的 DN读数据 通过RPC(TCP协议)把数据给DFSClient。DN在中间会做中转,处理简单但是性能收影响 (Local read的情况下,会希望绕过DN直接读取Data,这就是 短路 DFSClient自行打开文件读取数据,需要配置白名

    2024年02月13日
    浏览(74)
  • Hadoop入门学习笔记——三、使用HDFS文件系统

    视频课程地址:https://www.bilibili.com/video/BV1WY4y197g7 课程资料链接:https://pan.baidu.com/s/15KpnWeKpvExpKmOC8xjmtQ?pwd=5ay8 Hadoop入门学习笔记(汇总) 3.1.1. HDFS文件系统基本信息 HDFS和Linux系统一样,均是以 / 作为根目录的组织形式; 如何区分HDFS和Linux文件系统: Linux文件系统以 file:// 作为

    2024年01月16日
    浏览(37)
  • 黑马大数据学习笔记2-HDFS基本操作

    https://www.bilibili.com/video/BV1WY4y197g7?p=26 切换到hadoop用户 Hadoop HDFS组件内置了HDFS集群的一键启停脚本。 $HADOOP_HOME/sbin/start-dfs.sh,一键启动HDFS集群 执行原理: 在执行此脚本的机器上,启动SecondaryNameNode 读取core-site.xml内容(fs.defaultFS项),确认NameNode所在机器,启动NameNode 读取

    2024年02月16日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包