HDFS的Federation机制的实现原理和Erasure Coding节省存储空间的原理
目录
- Federation机制的实现原理
- 1.HDFS的分层图解
- (1)NameSpace
- (2)Block Storage
- 1)Block Management
- 2)Storage
- 2.Federation机制的优点
- 3.Federation机制的缺点
- 4.Federation机制的实现
- (1)前提准备
- (2)修改hdfs-site.xml配置文件
- (3)分发hdfs-site.xml配置文件
- (4)格式化HDFS文件系统
- (5)启动Hadoop集群
- (6)使用不同的NameNode
- Erasure Coding
- 1.Erasure Coding存储文件的示意图
- 2.-enablePolicy
- 3.-setPolicy
- 4.-getPolicy
- 5.-unsetPolicy
- 6.-disablePolicy
Federation机制的实现原理
1.HDFS的分层图解
在单个NameNode节点的HDFS中,HDFS一共分为两层。NameSpace层和Block Storage层。
(1)NameSpace
NameSpace是HDFS文件系统的命名空间,它主要由目录、文件和Block组成,支持所有与命名空间相关的文件系统操作,如创建、删除、修改和列出文件和目录。NameSpace由NameNode负责管理维护,任何对NameSpace的操作都将被NameNode记录下来。
(2)Block Storage
Block Storage(数据块存储)主要用于管理和存储HDFS的Block,由Block Management和Storage两部分组成,有关这两部分的介绍如下。
1)Block Management
Block Management由NameNode负责管理,它主要包含以下几点功能:
- 通过控制注册和定期的心跳来保证DataNode正常运行。
- 处理Block的报告并维护Block的位置。
- 支持与Block相关的操作。
- 管理Block的副本,针对未完成复制的Block进行复制,并删除过度复制的Block。
2)Storage
Storage由DataNode负责管理,它可以在本地文件系统上存储Block,并且提供对Block进行读写的操作。
Federation功能图解
- HDFS包含多个NameNode。
- Block Pool主要负责管理对应NameSpace的Block。
- 一个NameSpace和对应的Block Pool被称为命名空间卷,它是一个独立的管理单元。
2.Federation机制的优点
1.NameSpace的可扩展性
NameSpace通过水平扩展,在集群中增加更多的NameNode,提供读写和内存存储。
2.高性能
文件系统吞吐量不受单个NameNode的限制,在集群中添加更多的NameNode可以扩展文件系统读写的吞吐量。
3.隔离机制
单个NameNode对多用户环境不提供隔离,使用多个NameNode,可以将不同类别的应用和用户隔离到不同的命名空间。
3.Federation机制的缺点
1.交叉访问
如果某个应用要交叉访问存储在HDFS的多个文件,而这些文件存在于不同的NameSpace中,那么将不可避免的产生交叉访问不同NameSpace的情况。
2.数据移动效率低
不同NameSpace之间移动文件非常繁琐,无法简单地通过HDFS Shell子命令dfs的子命令选项-cp或-mv实现。
Federation机制的实现,主要是通过修改Hadoop的自定义配置文件hdfs-site.xml实现,该配置文件存在参数dfs.nameservices用于指定多个NameNode中不同NameSpace的唯一标识符,通过NameSpace的唯一标识符可以指定不同NameNode的配置信息,例如NameNode的RPC通信地址、Http通信地址等。
接下来,演示基于完全分布式模式部署的Hadoop为基础实现Federation机制,这里分别指定虚拟机Hadoop1和Hadoop2运行NameNode。
4.Federation机制的实现
(1)前提准备
1)关闭Hadoop的HDFS和YARN
在虚拟机Hadoop1依次执行stop-yarn.sh
和stop-dfs.sh
命令关闭Hadoop的YARN和HDFS。
2)删除HDFS的数据和元数据
在虚拟机Hadoop1、Hadoop2和Hadoop3删除目录/export/data/hadoop-3.3.0/下的内容。
rm -fr /export/data/hadoop-3.3.0/*
(2)修改hdfs-site.xml配置文件
进入虚拟机Hadoop1的/export/servers/hadoop-3.3.0/etc/hadoop/目录,在该目录下执行vi hdfs-site.xml
命令编辑hdfs-site.xml配置文件,修改为如下内容。
<property><name>dfs.replication</name><value>2</value>
</property>
<property><name>dfs.nameservices</name><value>ns1,ns2</value>
</property>
<property><name>dfs.namenode.rpc-address.ns1</name><value>hadoop1:9000</value>
</property>
<property><name>dfs.namenode.http-address.ns1</name><value>hadoop1:9870</value>
</property>
<property><name>dfs.namenode.secondary.http-address.ns1</name><value>hadoop1:9880</value>
</property>
<property><name>dfs.namenode.rpc-address.ns2</name><value>hadoop2:9000</value>
</property>
<property><name>dfs.namenode.http-address.ns2</name><value>hadoop2:9870</value>
</property>
<property><name>dfs.namenode.secondary.http-address.ns2</name><value>hadoop2:9880</value>
</property>
(3)分发hdfs-site.xml配置文件
通过scp命令将虚拟机Hadoop1的hdfs-site.xml配置文件分发至虚拟机Hadoop2和Hadoop3的/export/servers/hadoop-3.3.0/etc/hadoop/目录。
将配置文件分发至虚拟机hadoop2
scp /export/servers/hadoop-3.3.0/etc/hadoop/hdfs-site.xml hadoop2:/export/servers/hadoop-3.3.0/etc/hadoop/
将配置文件分发至虚拟机hadoop3
scp /export/servers/hadoop-3.3.0/etc/hadoop/hdfs-site.xml hadoop3:/export/servers/hadoop-3.3.0/etc/hadoop/
(4)格式化HDFS文件系统
在HDFS中实现Federation机制,需要分别指定虚拟机Hadoop1和Hadoop2运行NameNode,分别在这两台虚拟机进行格式化HDFS文件系统的操作。在执行格式化HDFS文件系统的命令时,需要在虚拟机Hadoop1和Hadoop2执行使用子命令的选项-clusterId指定相同的clusterId。
hdfs namenode -format -clusterId CHQ
(5)启动Hadoop集群
- 在虚拟机Hadoop1分别执行
start-dfs.sh
和start-yarn.sh
命令启动Hadoop的HDFS和YARN; - Hadoop启动完成后,分别在虚拟机Hadoop1、Hadoop2和Hadoop3执行
jps
命令查看每台虚拟机运行的进程。
(6)使用不同的NameNode
通过子命令dfs的子命令选项-fs,指定虚拟机Hadoop2运行NameNode的RPC通信地址,对其NameSpace进行操作,创建目录/ns2data。
hdfs dfs -fs hdfs://hadoop2:9000 -mkdir /ns2data
Erasure Coding
Erasure Coding节省存储空间的原理
在Hadoop 3.x版本中,HDFS新增了Erasure Coding(纠删码),简称EC。Erasure Coding是一种编码技术,它在廉价磁盘冗余阵列(Redundant Arrays of Inexpensive Disks,缩写RAID)中广泛应用,RAID通过条带化技术实现Erasure Coding。条带化技术是一种自动将I/O的负载均衡到多个物理磁盘上的技术,原理就是将逻辑上连续的数据(如文件)划分为较小的单位,并将连续的单位存储到不同的磁盘上。
HDFS同样通过条带化技术实现Erasure Coding,将逻辑上连续的数据(如文件)划分为较小的条带化单元(默认大小为1024K),并将连续的条带化单元存储到不同的Block上,对于条带化单元形成的每个条带,都会计算并存储一定数量的奇偶校验单元,奇偶校验单元会写入到Block,从而确保数据的容错性。与HDFS的副本机制相比Erasure Coding可以节省占用的存储空间。
接下来,展示应用Erasure Coding的HDFS如何存储文件,以存储大小为300MB的文件为例。
1.Erasure Coding存储文件的示意图
- 通过Erasure Coding存储的文件由数据和奇偶校验码两部分组成,这两部分存储在不同的Block中。
- HDFS为了便于查找数据对应的奇偶校验码,会根据Erasure Coding策略将相关联的Block放入到同一数据块组。
常用的Erasure Coding策略有RS-10-4-1024k、RS-6-3-1024k 和 RS-3-2-1024k,这3种策略都是通过Reed-Solomon(里德-所罗门)编码实现,又称RS编码,关于这3种策略的介绍如下。
- RS-10-4-1024k策略中的10表示10个存储条带化单元的Block;4表示4个存储奇偶校验单元的Block;1024K表示条带化单元的大小。整体含义是每生成10个存储条带化单元的Block,便生成4个存储对应奇偶校验单元的Block,并把这14个Block放入到一个数据块组。
- RS-6-3-1024k策略中的6表示6个存储条带化单元的Block;3表示3个存储奇偶校验单元的Block;1024K表示条带化单元的大小。整体含义是每生成6个存储条带化单元的Block,便生成3个存储对应奇偶校验单元的Block,并把这9个Block放入到一个数据块组,该策略是Erasure Coding默认的策略。
- RS-3-2-1024k策略中的3表示3个存储条带化单元的Block;2表示2个存储奇偶校验单元的Block;1024K表示条带化单元的大小。整体含义是每生成3个存储条带化单元的Block,便生成2个存储对应奇偶校验单元的Block,并把这5个Block放入到一个数据块组。
在HDFS中,可以通过Admin Commands类型的HDFS Shell子命令ec应用Erasure Coding来存储文件,接下来,介绍子命令ec常用的一些子命令选项。
2.-enablePolicy
子命令选项-enablePolicy用于开启Erasure Coding并指定Erasure Coding策略,语法格式如下。
hdfs ec -enablePolicy -policy <policyName>
- 参数-policy:用于指定Erasure Coding策略;
- 参数policyName:用于指定Erasure Coding策略的名称。
开启Erasure Coding并指定Erasure Coding策略为RS-3-2-1024k。
hdfs ec -enablePolicy -policy RS-3-2-1024k
3.-setPolicy
子命令选项-setPolicy用于在指定目录上设置Erasure Coding策略,语法格式如下。
hdfs ec -setPolicy -path <path> -policy <policyName>
- 参数-path:用于指定目录。
- 参数path:用于指定目录名称。
为HDFS的目录/EC指定Erasure Coding策略为RS-3-2-1024k。
hdfs ec -setPolicy -path /EC -policy RS-3-2-1024k
4.-getPolicy
子命令选项-getPolicy用于查看指定目录上的Erasure Coding策略,语法格式如下。
hdfs ec -getPolicy -path <path>
查看HDFS中目录/EC的Erasure Coding策略
hdfs ec -getPolicy –path /EC
5.-unsetPolicy
子命令选项-unsetPolicy用于在指定目录上取消Erasure Coding策略,语法格式如下。
hdfs ec -unsetPolicy -path <path>
取消目录/EC的Erasure Coding策略。
hdfs ec -unsetPolicy -path /EC
6.-disablePolicy
子命令选项-disablePolicy用于关闭Erasure Coding及指定的Erasure Coding策略,语法格式如下。
hdfs ec -disablePolicy -policy <policyName>
关闭Erasure Coding及指定的Erasure Coding策略RS-3-2-1024k。
hdfs ec -disablePolicy -policy RS-3-2-1024k
相关文章:
HDFS的Federation机制的实现原理和Erasure Coding节省存储空间的原理
目录 Federation机制的实现原理1.HDFS的分层图解(1)NameSpace(2)Block Storage1)Block Management2)Storage 2.Federation机制的优点3.Federation机制的缺点4.Federation机制的实现(1࿰…...
经验笔记:使用 PyTorch 计算多分类问题中Dice Loss 的正确方法
经验笔记:使用 PyTorch 计算多分类问题中Dice Loss 的正确方法 概述 Dice Loss 是一种广泛应用于图像分割任务中的损失函数,它基于 Dice 系数(也称为 F1-score),用于衡量预测结果与真实标签之间的相似度。在 PyTorch…...
如何在 Ubuntu 22.04 上安装 PostgreSQL
简介 PostgreSQL(或简称Postgres)是一个关系型数据库管理系统,它提供了SQL查询语言的实现。它符合标准,并且拥有许多高级特性,比如可靠的事务处理和无需读锁的并发控制。 本指南将展示如何在Ubuntu 22.04服务器上快速…...
正则表达式的高级方法
正则表达式的高级方法 正则表达式(regex)不仅仅是简单的模式匹配工具,它还提供了一系列高级功能,使得处理复杂文本任务变得更加灵活和强大。以下是一些Python中正则表达式的高级用法: 1. 命名捕获组 命名捕获组允许…...
axios的get和post请求,关于携带参数相关的讲解一下
在使用 Axios 发送 HTTP 请求时,GET 和 POST 请求携带参数的方式有所不同。以下是关于这两种请求方法携带参数的详细讲解: GET 请求携带参数 对于 GET 请求,参数通常附加在 URL 之后,以查询字符串的形式传递。 直接在 URL 中拼接…...
中间件--MongoDB部署及初始化js脚本(docker部署,docker-entrypoint-initdb.d,数据迁移,自动化部署)
一、概述 MongoDB是一种常见的Nosql数据库(非关系型数据库),以文档(Document)的形式存储数据。是非关系型数据库中最像关系型数据库的一种。本篇主要介绍下部署和数据迁移。 在 MongoDB 官方镜像部署介绍中ÿ…...
基于SpringBoot框架的民宿连锁店业务系统(计算机毕业设计)+万字说明文档
系统合集跳转 源码获取链接 一、系统环境 运行环境: 最好是java jdk 1.8,我们在这个平台上运行的。其他版本理论上也可以。 IDE环境: Eclipse,Myeclipse,IDEA或者Spring Tool Suite都可以 tomcat环境: Tomcat 7.x,8.x,9.x版本均可 操作系统…...
PHP8 动态属性被弃用兼容方案
PHP 类中可以动态设置和获取没有声明过的类属性。这些属性不遵循具体的规则,并且需要使用 __get() 和 __set() 魔术方法对动态属性如何读写进行有效控制。 class User {private int $uid; }$user new User(); $user->name Foo; 上述代码中,User 类…...
Spring Boot 3.0 + MySQL 8.0 + kkFileView 实现完整文件服务
Spring Boot 3.0 MySQL 8.0 kkFileView 实现完整文件服务 背景:比较常见的需求,做成公共的服务,后期维护比较简单,可扩展多个存储介质,上传逻辑简单,上传后提供一个文件id,后期可直接通过此i…...
【YashanDB知识库】php查询超过256长度字符串,数据被截断的问题
本文内容来自YashanDB官网,原文内容请见:https://www.yashandb.com/newsinfo/7488290.html?templateId1718516 问题现象 如下图,php使用odbc数据源,查询表数据,mysql可以显示出来,yashan显示数据被截断。…...
为什么ETH 3.0需要Lumoz的ZK算力网络?
1.Lumoz 模块化计算层 Lumoz 协议是一个全球分布式模块化计算协议,致力于提供先进的零知识证明(ZKP)服务,支持ZK技术的发展,为ZK、AI等前沿技术提供强大的算力支撑。面对当前零知识计算领域计算成本的挑战,…...
反向代理-缓存篇
文章目录 强缓存一、Expires(http1.0 规范)二、cache-control(http1.1 出现的 header 信息)Cache-Control 的常用选项Cache-Control 常用选项的选择三、弊端协商缓存一、ETag二、If-None-Match三、Last-modified四、If-Modified-Since浏览器的三种刷新方式静态资源部署策略…...
(重点来啦!)MySql基础增删查改操作(详细)
目录 一、客户端和数据库操作: 二、表操作 1.查看当前数据库中有哪些表 2.创建一张新表 3.查看表结构: 4.删除表 三、CRUD增删查改 1.新增——插入 2.查询操作 a.全列查询: b.指定列查询: c.列名为表达式的查询&#…...
WPF编写工业相机镜头选型程序
该程序满足面阵和线阵的要求。 前端代码 <Window x:Class"相机镜头选型.MainWindow" Loaded"Window_Loaded"xmlns"http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x"http://schemas.microsoft.com/winfx/2006/xaml…...
阿里云轻量应用服务器开放端口,图文教程分享
阿里云轻量应用服务器如何开放端口?在轻量服务器管理控制台的防火墙中添加规则即可开通端口,开通80端口就填80,开通443就填443端口,开通3306端口就填3306。阿里云百科网aliyunbaike.com整理阿里云轻量应用服务器端口号开通图文教程…...
分布式 CAP理论 总结
前言 相关系列 《分布式 & 目录》《分布式 & CAP理论 & 总结》《分布式 & CAP理论 & 问题》 分布式 分布式的核心是将大型业务拆解成多个子业务以使之在不同的机器上执行。分布式是用于解决单个物理机容量&性能瓶颈问题而采用的优化手段…...
【UNION 和 UNION ALL 】关键字在MySql中的用法,以及注意事项
在 MySQL 中,UNION 和 UNION ALL 都用于将多个 SELECT 语句的结果合并到一个结果集中。它们的主要区别在于 UNION 去除重复 的行UNION ALL 保留所有 的行 示例 …...
GauHuman阅读笔记【3D Human Modelling】
笔记目录 1. 基本信息2. 理解(个人初步理解,随时更改)3. 精读SummaryResearch Objective(s)Background / Problem StatementMethod(s)EvaluationConclusionReferences1. 基本信息 题目:GauHuman: Articulated Gaussian Splatting from Monocular Human Videos时间:2023.12…...
SkyWalking 和 ELK 链路追踪实战
一、背景 最近在给项目搭建日志平台的时候,采用的方案是 SkyWalking ELK 日志平台,但发现 ELK 日志平台中的日志没有 Trace ID,导致无法追踪代码报错的整体链路。 空哥提示:Trace ID 是分布式追踪中用来唯一标识一个服务请求或事…...
深度学习中的损失函数
损失函数是深度学习模型训练过程中不可或缺的一部分,是模型预测值与真实值之间差异的客观衡量标准。它们是模型训练的基础,指导算法调整模型参数,以最小化损失并提高预测准确性。它们衡量了模型预测值与真实值的吻合程度。通过最小化这种损失…...
android编译assets集成某文件太大更新导致git仓库变大
不知道大家有没有类似的困扰,你的工程assets文件过大,我曾经在某度车机地图团队工作过一段时间时候,每次发包会集成一个上百MB的文件。工作一段时间你的git仓库将会增加特别多。最后,你会发现你如果重新git clone这个仓库会非常大…...
技术支持人员发现跨域问题,该如何处理
跨域问题通常是由于浏览器的同源策略(Same-Origin Policy)引起的。简而言之,浏览器阻止了一个域上的网页访问另一个域的资源,目的是为了安全性。跨域问题通常发生在以下场景: 在一个网站的前端应用程序(如…...
有 SpringBoot 助力,广场舞团解锁花式舞步密码
3 系统分析 3.1 系统可行性分析 3.1.1 经济可行性 由于本系统是作为毕业设计系统,且系统本身存在一些技术层面的缺陷,并不能直接用于商业用途,只想要通过该系统的开发提高自身学术水平,不需要特定服务器等额外花费。所有创造及工作…...
【推荐算法】单目标精排模型——FiBiNET
key word: 学术论文 Motivation: 传统的Embedding&MLP算法是通过内积和Hadamard product实现特征交互的,这篇文章的作者提出了采用SENET实现动态学习特征的重要性;作者认为简单的内积和Hadamard product无法有效对稀疏特征进行特征交互&a…...
从零开始学TiDB(3)TiKV 持久化机制
如图,每个TiKV有两个rocksdb实例,rocksdbKV复制存储键值对,rocksdb raft负责存储复制的日志 。 每个region及其副本构成了raft group。这个OB的Zone其实有点类似,在OB中每个Unit及其副本构成了paxos组,在TiDB中叫raft…...
集合ArrayList
黑马程序员Java的个人笔记 BV17F411T7Ao p111~p115 目录 集合存储数据类型的特点 创建对象 ArrayList 成员方法 .add 增加元素 .remove 删除元素 .set 修改元素 .get 查询元素 .size 获取长度 基本数据类型对应的包装类 Character 练习 返回多个数据 集合存储…...
后端API接口设计标准(Java)
Controller 层(API接口) 无论是传统的三层架构还是现在的COLA架构,Controller 层依旧有一席之地,说明他的必要性;说它是配角是因为 Controller 层的代码一般是不负责具体的逻辑业务逻辑实现,但是它负责接收…...
Oracle Recovery Tools工具一键解决ORA-00376 ORA-01110故障(文件offline)---惜分飞
客户在win上面迁移数据文件,由于原库非归档,结果导致有两个文件scn不一致,无法打开库,结果他们选择offline文件,然后打开数据库 Wed Dec 04 14:06:04 2024 alter database open Errors in file d:\app\administrator\diag\rdbms\orcl\orcl\trace\orcl_ora_6056.trc: ORA-01113:…...
Python制做一个简易PDF编辑器——关于PDF文字编辑实现的思路
在Python零基础快速入门最后一篇,我们一起做了一个PDF编辑小工具,里面只实现的PDF翻页浏览等,并没有实现PDF的文字在线编辑,是因为在PDF编辑器中实现文字编辑功能是一个相对复杂的过程,因为PDF格式本质上是一个用于呈现…...
RabbitMQ如何保证消息不被重复消费
前言: 正常情况下,消费者在消费消息后,会给消息队列发送一个确认,消息队列接收后就知道消息已经被成功消费了,然后就从队列中删除该消息,也就不会将该消息再发送给其他消费者了。不同消息队列发出的确认消…...
Windows Terminal ssh到linux
1. windows store安装 Windows Terminal 2. 打开json文件配置 {"$help": "https://aka.ms/terminal-documentation","$schema": "https://aka.ms/terminal-profiles-schema","actions": [{"command": {"ac…...
vue实现页面自动滚动,鼠标悬浮暂停,移开继续
1、给div一个id <div class"kb_nei_new_left" id"chartsContainer">2、定义一个自动滚动的方法 autoSroll(Id) {// flag 为true时停止滚动var flag false;// 定时器var timer;function roll() {var h -1;timer setInterval(function () {flag …...
第3章:文本样式 --[CSS零基础入门]
CSS(层叠样式表)允许你以多种方式定制文本的外观。以下是一些常用的文本和字体相关的CSS属性: 1.字体 字体系列 当然,下面是两个使用不同字体系列的CSS示例。每个示例都展示了如何指定一个字体系列,并提供备用字体以确保在用户的系统中找不到首选字体时仍有合适的字体可…...
从视觉到雷达:多模态感知如何引领自动驾驶安全革命
文章目录 摘要引言多模态感知融合的原理与架构感知技术的特点多模态感知融合的目标 数据融合实现示例代码结构与主要组件模型定义 MultimodalFusionModel前向传播(forward 方法)模型细节剖析实践应用 QA环节总结参考资料 摘要 本文探讨了多模态感知技术…...
若依集成更好用的easyexcel
背景 若依使用的是apach poi并在此基础上进行封装apach poi的原生的api是很复杂的,若依简化了了此操作apach poi的上传速率和下载速率都是没有优化的,依赖于文件大小的限制在此前提下,如果没法满足客户的需求(超大型文件的上传&am…...
大数据新视界 -- 大数据大厂之 Hive 数据导入:多源数据集成的策略与实战(上)(3/ 30)
💖💖💖亲爱的朋友们,热烈欢迎你们来到 青云交的博客!能与你们在此邂逅,我满心欢喜,深感无比荣幸。在这个瞬息万变的时代,我们每个人都在苦苦追寻一处能让心灵安然栖息的港湾。而 我的…...
线段树模板
单点修改 #include <bits/stdc.h> using namespace std; #define IOS ios::sync_with_stdio(false),cin.tie(nullptr); #define rep(i, x, y) for(int i(x), _(y);i<_;i) #define rrep(i, x, y) for(int i(x), _(y);i>_;i--) #define all(x) x.begin(),x.end() #d…...
算法刷题Day15: BM37 二叉搜索树的最近公共祖先
题目链接 描述 给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。 1.对于该题的最近的公共祖先定义:对于有根树T的两个节点p、q,最近公共祖先LCA(T,p,q)表示一个节点x,满足x是p和q的祖先且x的深度尽可能大。在这里,一个节点也可以…...
正则表达式去除文本中括号()<>[]里的内容
一行文本中包含有各种括号,如()、<>、[],我们希望把括号及括号内的内容0去除,可以通过正则表达式来实现。 匹配() pattern r\([^)]*\) # 匹配()匹配一个左括号(,然后匹配0个或多个不是右括号的任意字符[^)]*,…...
Environment Modules安装配置
Environment Modules安装配置 Environment Modules是一款用来管理计算机软件环境的软件,通过简单的命令来控制计算机环境变量。本文接受该软件的安装和配置方法 系统: Linux OpenSUSE 15.6 软件版本: modules 5.5 依赖: gcc 7.5…...
constexpr、const和 #define 的比较
constexpr、const 和 #define 的比较 一、定义常量 constexpr 定义:constexpr用于定义在编译期可求值的常量表达式。示例:constexpr int x 5;这里,x的值在编译期就确定为5。 const 定义:const表示变量在运行期间不能被修改&…...
STM32串口接收与发送(关于为什么接收不需要中断而发生需要以及HAL_UART_Transmit和HAL_UART_Transmit_IT的区别)
一、HAL_UART_Transmit和HAL_UART_Transmit_IT的区别 1. HAL_UART_Transmit_IT(非阻塞模式): HAL_UART_Transmit_IT 是非阻塞的传输函数,也就是说,当你调用 HAL_UART_Transmit_IT 时,它不会等到数据完全发…...
如何制作“优美”PPT
目录 1.免费PPT模板网站: 2.免费有较好质量的图片网站: 免费图片资源 免费透明PNG图片资源: 免费icon图片资源: 3.选择好的图片: 图片底色 4.要与不要 千万不要: 一定要: 6.一些建议…...
5G模组AT命令脚本-控制模组进入飞行模式
控制模组进入飞行模式 控制模组进入飞行模式 控制模组进入飞行模式 控制模组进入飞行模式 #!/bin/bash ## 5G模组采用USB3.0与上位机连接,usb接口在上位机上虚拟出多个port,其中一个可用于发送AT命令,控制模组 ## 本脚本控制模组进入飞行模式## flyin …...
计算机网络-Wireshark探索ARP
使用工具 Wiresharkarp: To inspect and clear the cache used by the ARP protocol on your computer.curl(MacOS)ifconfig(MacOS or Linux): to inspect the state of your computer’s network interface.route/netstat: To inspect the routes used by your computer.Brows…...
Vue 2 生命周期函数详解
Vue 2 生命周期函数详解 引言 Vue.js 是一个渐进式的 JavaScript 框架,用于构建用户界面。理解 Vue 的生命周期函数(Lifecycle Hooks)对于开发高效的 Vue 应用至关重要。本文将详细介绍 Vue 2 的生命周期钩子、每个阶段的作用及其代码示例&…...
Vue的路由实现模式:hash模式和history模式
Vue 路由的两种模式: hash 模式: 类似于住在一个大房子里,你的地址很长,但用一个 “门牌号”(# 后面的部分)来标识你住哪间房间。 例如: bash http://example.com/#/home 这就好比 “example.…...
R语言 | 峰峦图 / 山脊图
目的:为展示不同数据分布的差异。 1. ggplot2 实现 # 准备数据 datmtcars[, c("mpg", "cyl")] colnames(dat)c("value", "type") head(dat) # value type #Mazda RX4 21.0 6 #Mazda RX4 Wag …...
Kubernetes(K8s)
头条:参考资料 Kubernetes 入门指南:从基础到实践_kubernetes 从入门到实践-CSDN博客 Kubernetes(k8s)与docker的区别 Docker、Kubernetes之间的区别_docker和kubernetes区别-CSDN博客 Docker部署SpringBoot项目(镜…...
【代码随想录|贪心算法05】
56.合并区间 题目链接56. 合并区间 - 力扣(LeetCode) 这道题思路跟前两道也很像,就是更新把相同的区间合并而已。 class Solution { public: static bool cmp(const vector<int>& a,const vector<int>& b){return a[0…...