Hadoop3教程(六):HDFS中的DataNode

文章目录

  • (63)DataNode工作机制
  • (64)数据完整性
  • (65)掉线时限参数设置
  • 参考文献

(63)DataNode工作机制

DataNode内部存储了一个又一个Block,每个block由数据和数据元数据组成。数据元数据包括数据长度、校验和、时间戳等。

在物理的目录里,每个block的数据和数据源数据是分两个文件保存的。

DataNode的工作机制如图:

在这里插入图片描述

  1. DataNode启动后,会向NameNode注册,表示自己活着,可以接受任务;
  2. NameNode接收到请求后,注册相应信息,并向DataNode返回注册成功的信号;
  3. 之后,DataNode会按周期(默认是6小时)向NameNode上报自己所保存的所有block信息,此举的目的是定时让NameNode知道,自己旗下的blocks是否都还可用;
  4. NameNode和DataNode每隔3s会来一轮心跳,目的是检查DataNode是否还活着,以及返回NameNode要带给DataNode的指令。
  5. 如果超过3s没联系上,NameNode也不会直接抛弃DataNode。一般是10min + 30s机制,即超过10分钟之后,再来30s,即10次心跳,如果还是没有联系上,NameNode才会认为这个DataNode挂了,之后NameNode将不会再对这个DataNode安排读写任务;

DN向NN汇报自身保存的blocks的时间间隔,默认是6h

<property><name>dfs.blockreport.intervalMsec</name><value>21600000</value><description>Determines block reporting interval in milliseconds.</description>
</property>

DN 扫描自身节点块信息列表的时间,默认也是6h:

<property><name>dfs.datanode.directoryscan.interval</name><value>21600s</value><description>Interval in seconds for Datanode to scan data directories and reconcile the difference between blocks in memory and on the disk.Support multiple time unit suffix(case insensitive), as describedin dfs.heartbeat.interval.</description>
</property>

DN的正常流程是先自查(扫描自身块信息),后汇报。

(64)数据完整性

Hadoop在底层是如何知道数据是准确的还是不准确的,即DataNode如何验证数据完整性呢,它是如何发现自己保存的数据有问题呢?主要有这么三步:

(1) 将客户端上的原始数据封装,封装方式是在待传输数据后面,加上一位 奇偶校验位

如果待传输数据是01000001,有两个1,是偶数,则奇偶校验位设置为0;

如果待传输数据是01001001,有三个1,是奇数,则奇偶校验位设置为1;

(2) 封装后的原始数据,通过网络传输,上传到HDFS上;

(3) HDFS接收到数据之后,会对数据进行再次的奇偶性校验,以避免网络传输过程中出现异常(DataNode也会在文件创建后周期性的验证校验位),比如说有的0被传成了1;

但这也是奇偶校验位的缺点,就是他只能检查一个0变成1的异常,如果是两个0同时变成了1,那么奇偶校验就校验不出来了。

不过,一般认为,同时坏两个数据位的概率是比较小的,所以奇偶校验位在常规情况下也足够应付。

但是这样做毕竟还是不保险,所以现在Hadoop里在封装时采用的,不是奇偶校验位,而是 crc校验位

crc校验位,又被称为循环冗余校验码,在通信领域应用的比较广泛。简单看了一下基本原理,比较复杂,简单来讲就是指定选定一个除数,使用原始数据与选定的除数进行二进制除法运算,计算出俩的余数就是crc校验位,一般为4位。

其中这个除数是发送端和接收端通用的。接收端收到原始数据后也会进行相同的运算,得到的结果跟校验位一样的话说明数据没问题,或者说直接拿封装后的原始数据去除,没有余数的话,说明没问题。

在这里插入图片描述

(65)掉线时限参数设置

就是之前说的那个DataNode的10min + 30s的超时机制。如果NameNode超过3s没有接收到DataNode的信息,NN不会立即判定该DataNode不可用,而是要经过一段时间,这段时间内仍然没有接收到心跳的话,才会认为该DataNode已经下线,而这段时间就被称为是超时时长。

在这里插入图片描述

作用可见63小节内容,我记在那里面了。

关于心跳时间和心跳超时时长(timeout,即10min + 30s机制)的设置,是在hdfs-site.xml里。

超时时长的计算公式:

timeout = 2 * dfs.namenode.heartbeat.recheck-interval + 10 * dfs.heartbeat.interval

默认的heartbeat.recheck.interval是5min;默认的dfs.heartbeat.interval是3s。

<property><name>dfs.namenode.heartbeat.recheck-interval</name><value>300000</value>
</property><property><name>dfs.heartbeat.interval</name><value>3</value>
</property>

需要注意的是hdfs-site.xml 配置文件中的heartbeat.recheck.interval的单位为毫秒,dfs.heartbeat.interval的单位为秒。

参考文献

  1. 【尚硅谷大数据Hadoop教程,hadoop3.x搭建到集群调优,百万播放】

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/162227.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

1-k8s1.24-底座搭建-基于containerd

文章目录 一、服务器准备二、安装Containerd三、安装k8s四、安装部署dashboard ps&#xff1a;第一遍搭建ks8的时候&#xff0c;由于k8s在1.24版本之后就放弃了对docker的支持&#xff0c;如果要继续使用docker需要自己加载插件。所以一开始就是直接使用 k8s1.24containerd进行…

基于下垂控制的孤岛双机并联逆变器环流抑制MATLAB仿真模型

微❤关注“电气仔推送”获得资料&#xff08;专享优惠&#xff09; 在实际应用中逆变器都是并联运行的,但是逆变器的并联运行也存在不少问题,由于线路阻抗差异、各个逆变器输出端瞬时电压幅值不同等,都容易导致环流的出现。环流会导致逆变器损耗增加,从而影响微电网的输出效率…

Megatron-LM GPT 源码分析(二) Sequence Parallel分析

引用 本文基于开源代码 https://github.com/NVIDIA/Megatron-LM &#xff0c;延续上一篇Megatron-LM GPT 源码分析&#xff08;一&#xff09; Tensor Parallel分析 通过对GPT的模型运行示例&#xff0c;从三个维度 - 模型结构、代码运行、代码逻辑说明 对其源码做深入的分析。…

Spring Boot中的常用注解

Spring Boot中的常用注解 深入探讨Spring Boot中的常用注解摘要引言一、认识Spring BootSpring Boot简介和核心概念核心概念详解1. 自动配置2. 起步依赖3. 嵌入式Web服务器 二、Spring中常用注解Spring框架中的关键注解概览Spring框架中的关键注解概览1. Autowired2. Component…

GaussDB for openGauss部署形态

前言 华为云数据库GaussDB是华为自主创新研发的分布式关系型数据库&#xff0c;具有高性能、高可用、高安全、低成本的特点&#xff0c;本文带你详细了解GaussDB数据库的部署形态。 1、GaussDB部署形态三种类型 GaussDB部署形态&#xff1a;单机 独立部署是将数据库组件部署…

prometheus获取kubelet接口监控数据

一、前言 k8s集群的kubelet服务内部有自带的cadvisor服务用于收集k8s集群的监控数据&#xff0c;所以可以通过调用kubelet的接口就能获取pod的资源监控数据&#xff0c;在新版本的k8s中&#xff0c;kubelet的监控数据获取端口为10250端口&#xff0c;老版本的是10255端口 二、…

基于Scrapyd与Gerapy部署scrapy爬虫方案【可用于分布式爬虫部署】

scrapyd部署爬虫 Scrapyd 是一个基于 Scrapy 的开源项目&#xff0c;它提供了一个简单的方式来部署、运行和监控 Scrapy 爬虫。它是一个用于集成 Scrapy 爬虫到分布式架构中的工具&#xff0c;允许您在分布式环境中运行爬虫&#xff0c;并提供了一组 Web API&#xff0c;用于管…

docker入门加实战—部署Java和前端项目

docker入门加实战—部署Java和前端项目 部署之前&#xff0c;先删除nginx&#xff0c;和自己创建的dd两个容器&#xff1a; docker rm -f nginx dd部署Java项目 作为演示&#xff0c;我们的Java项目比较简单&#xff0c;提供了一个接口&#xff1a; 配置文件连接docker里的m…

ios safari 浏览器跳转页面没有自适应

今天开发遇到了一个问题&#xff0c;当用户点击浏览器中的表单进行注册时&#xff0c;表单元素会放大&#xff0c;随后跳转页面无法还原到初始状态。 这是因为如果 的 font-size 被设定为 16px 或更大&#xff0c;那么 iOS 上的 Safari 将正常聚焦到输入表单中。但是&#xff…

MultiPlayerShoot----C++学习记录02人物

获取人物和动画 可以再Mixamo下载你想要的人物&#xff0c;将文件全部导入&#xff08;不做更改&#xff09; 再在网站里选到动画&#xff0c;下载一些动画左转&#xff0c;右转&#xff0c;起跳&#xff0c;跳中&#xff0c;落下 导入动画&#xff0c;此时不用选择导入骨骼&a…

智能化安全巡更巡查系统—提升安全管理效率

传统的巡检都是手工完成&#xff0c;记录、拍照&#xff0c;回到办公室打印表单再交给作业队伍整改&#xff0c;再去现场核实复查&#xff0c;流程繁琐&#xff0c;效率低。而且大部分工地为了减少麻烦&#xff0c;人员往往都是口头沟通&#xff0c;存在很大质量风险&#xff0…

【QT】常用控件——按钮组

继承Widget PushButton 设置图片&#xff0c;先导入图片资源&#xff0c;见&#xff1a;【QT】资源文件导入_复制其他项目中的文件到qt项目中_StudyWinter的博客-CSDN博客 在布局中添加图片 调整尺寸 toolButton 显示图片、文本 显示图片&#xff08;图片和文字都有时&#…

web漏洞挖掘指南-前端跨域漏洞

web漏洞挖掘指南 前端跨域漏洞 如果你对网络安全入门感兴趣&#xff0c;那么你需要的话可以点击这里&#x1f449;【入门&进阶全套282G学习资源包免费分享&#xff01;】 一、何为跨域 1.设想一种场景&#xff0c;一个恶意网站上嵌入了一个iframe标签去加载银行的登陆页…

优化大型机床装配调度:项目管理软件的应用方法

最近&#xff0c;Zoho Projects项目管理软件的一位资深客户&#xff0c;跟我们分享了他是如何把Projects应用于大型机床装配的复杂调度。小Z觉得特别有必要&#xff0c;把各行各业的成功应用和实践经验发布出来。在取得这位资深用户同意后&#xff0c;我们推出了本篇文章&#…

vcruntime140.dll如何修复,五种修复vcruntime140.dll方法分享

当我们在运行某些程序时&#xff0c;可能会遇到“找不到VCRuntime140.dll”的错误。这个错误通常表示我们的系统中缺少某个重要的动态链接库文件&#xff0c;而VCRuntime140.dll正是其中之一。本文将详细介绍如何修复这个问题。 一、问题出现的原因 首先&#xff0c;我们需要了…

2.3 如何使用FlinkSQL读取写入到JDBC(MySQL)

1、JDBC SQL 连接器 FlinkSQL允许使用 JDBC连接器&#xff0c;向任意类型的关系型数据库读取或者写入数据 添加Maven依赖 <dependency><groupId>org.apache.flink</groupId><artifactId>flink-connector-jdbc</artifactId><version>3.1…

MySQL双主一从高可用

MySQL双主一从高可用 文章目录 MySQL双主一从高可用环境说明1.配置前的准备工作2.配置yum源 1.在部署NFS服务2.安装主数据库的数据库服务&#xff0c;并挂载nfs3.初始化数据库4.配置两台master主机数据库5.配置m1和m2成为主数据库6.安装、配置keepalived7.安装部署从数据库8.测…

用 JHipster Azure Spring Apps 构建和部署 Spring 应用

作者&#xff1a;Hang Wang 排版&#xff1a;Alan Wang 此教程将向您展示如何使用 React、Spring Boot 和 PostgreSQL 在 Azure 上构建和部署全栈 Web 应用程序&#xff0c;由 JHipster Azure Spring Apps 提供支持。 JHipster Azure Spring Apps 为全栈 Web 开发提供了全面的…

虚拟现实VR技术在医疗行业的应用介绍

虚拟现实 (VR) 虽然经常与游戏联系在一起&#xff0c;但不可否认&#xff0c;未来科技少不了虚拟现实&#xff0c;其应用可以彻底改变许多行业。在医疗领域&#xff0c;无数人正在探索 VR 可以帮助患者和医疗从业者实现更好的治疗结果治疗方式&#xff0c;比如在手术、疼痛管理…

下拉选择器的树状结构图

类似&#xff1a;【Vue-Treeselect 和 vue3-treeselect】树形下拉框 一&#xff1a;图 二&#xff1a;如果有多层级的数据结构&#xff0c;可以用treeselect插件实现 1、安装&#xff1a; npm install --save riophae/vue-treeselect 2、实现&#xff1a; <el-form ref&qu…