基于ZooKeeper搭建Hadoop高可用集群
ZooKeeper搭建Hadoop高可用集群
在之前安装的Hadoop3.3.6集群中HDFS NameNode 和 YARN ResourceManager 都是单节点,集群不具有高可用性。
HDFS 高可用架构
HDFS 高可用架构主要组件:
Active NameNode 和 Standby NameNode: 两台 NameNode 形成互备,一台处于 Active 状态,为主 NameNode,另外一台处于 Standby 状态,为备 NameNode,只有主 NameNode 才能对外提供读写服务。
主备切换控制器 ZKFailoverController:ZKFailoverController 作为独立的进程运行,对 NameNode 的主备切换进行总体控制。ZKFailoverController 能及时检测到 NameNode 的健康状况,在主 NameNode 故障时借助 Zookeeper 实现自动的主备选举和切换,当然 NameNode 目前也支持不依赖于 Zookeeper 的手动主备切换。
Zookeeper 集群:为主备切换控制器提供主备选举支持。
共享存储系统:共享存储系统是实现 NameNode 的高可用最为关键的部分,共享存储系统保存了 NameNode 在运行过程中所产生的 HDFS 的元数据。主 NameNode 和 NameNode 通过共享存储系统实现元数据同步。在进行主备切换的时候,新的主 NameNode 在确认元数据完全同步之后才能继续对外提供服务。
DataNode 节点:除了通过共享存储系统共享 HDFS 的元数据信息之外,主 NameNode 和备 NameNode 还需要共享 HDFS 的数据块和 DataNode 之间的映射关系。DataNode 会同时向主 NameNode 和备 NameNode 上报数据块的位置信息。
基于 QJM 的共享存储系统的数据同步机制
Active NameNode 首先把 EditLog 提交到 JournalNode 集群,然后 Standby NameNode 再从 JournalNode 集群定时同步 EditLog,当 Active NameNode 宕机后, Standby NameNode 在确认元数据完全同步之后就可以对外提供服务。
需要说明的是向 JournalNode 集群写入 EditLog 是遵循 “过半写入则成功” 的策略,所以你至少要有 3 个 JournalNode 节点,当然你也可以继续增加节点数量,但是应该保证节点总数是奇数。同时如果有 2N+1 台 JournalNode,那么根据过半写的原则,最多可以容忍有 N JournalNode 节点挂掉。
NameNode 主备切换
NameNode 实现主备切换的流程下图所示:
-
HealthMonitor 初始化完成之后会启动内部的线程来定时调用对应 NameNode 的 HAServiceProtocol RPC 接口的方法,对 NameNode 的健康状态进行检测。
-
HealthMonitor 如果检测到 NameNode 的健康状态发生变化,会回调 ZKFailoverController 注册的相应方法进行处理。
-
如果 ZKFailoverController 判断需要进行主备切换,会首先使用 ActiveStandbyElector 来进行自动的主备选举。
-
ActiveStandbyElector 与 Zookeeper 进行交互完成自动的主备选举。
-
ActiveStandbyElector 在主备选举完成后,会回调ZKFailoverController 的相应方法来通知当前的 NameNode 成为主 NameNode 或备 NameNode。
-
ZKFailoverController 调用对应 NameNode 的 HAServiceProtocol RPC 接口的方法将 NameNode 转换为 Active 状态或 Standby 状态。
YARN高可用
YARN ResourceManager 的高可用与 HDFS NameNode 的高可用类似,但是 ResourceManager 不像 NameNode ,没有那么多的元数据信息需要维护,所以它的状态信息可以直接写到 Zookeeper 上,并依赖 Zookeeper 来进行主备选举。
高可用集群搭建
集群准备
按照高可用的设计目标:需要保证至少有两个 NameNode (一主一备) 和 两个 ResourceManager (一主一备) ,同时为满足“过半写入则成功”的原则,需要至少要有 3 个 JournalNode 节点。这里使用三台
主机进行搭建。
所有服务器都安装有 JDK,linux JDK安装
搭建好 ZooKeeper 集群(hadoop版本为3.3.6建议zookeeper版本3.6.3), ZooKeeper3.6.3 集群搭建
1、关闭网络防火墙
# 查看网络防火墙状态
sudo systemctl status firewalld
# 立即停止 firewalld
sudo systemctl stop firewalld
# 防止重启后再次启动,可以禁用防火墙服务
sudo systemctl disable firewalld
2、配置三台机器的节点映射
设置IP映射,在/etc/hosts添加如下内容(每个节点都需修改,)
sudo vi /etc/hosts
192.168.10.100 hadoop100 hadoop100.centos.com
192.168.10.101 hadoop101 hadoop101.centos.com
192.168.10.102 hadoop102 hadoop102.centos.com
编译生效
source /etc/profile
一、安装java 1.8JDK
java 1.8JDK安装
(每个节点都需要安装,安装的版本和目录保持一致)
二、配置节点间免密登录
1 生成密匙
在每台主机上使用 ssh-keygen 命令生成公钥私钥对:
ssh-keygen
连按三次
2 免密登录
将 hadoop001 的公钥写到本机和远程机器的 ~/ .ssh/authorized_key 文件中:
ssh-copy-id -i ~/.ssh/id_rsa.pub hadoop100 依次输入yes,root用户的密码
ssh-copy-id -i ~/.ssh/id_rsa.pub hadoop101
ssh-copy-id -i ~/.ssh/id_rsa.pub hadoop102
3 验证免密登录
依次输入,可成功跳转后exit回到hadoop100
ssh hadoop100
exit;
ssh hadoop101
exit;
ssh hadoop102
exit;
4、报错处理
Permission denied (publickey,gssapi-keyex,gssapi-with-mic).
修改SSH 配置允许公钥认证
vi /etc/ssh/sshd_config
#将PasswordAuthentication设置成为yes(一般在文件的末尾几行):
PermitRootLogin yes
PubkeyAuthentication yes
PasswordAuthentication yes#vi中使用查找功能快速定位
#进入普通模式(如果您已经在插入模式中),按 Esc 键。
#输入 / 后跟您想要搜索的词或短语。
#按 Enter 键进行搜索。
#n 键:移动到下一个匹配项。
#N 键:移动到上一个匹配项。
#例如,要搜索单词 "PermitRootLogin ",您将输入:/PermitRootLogin #修改完成后重启ssh服务
systemctl restart sshd.service
# 查看ssh服务状态
sudo systemctl status sshd
三、 Hadoop安装
1、下载hadoop
hadoop3.3.6官方下载
2、解压缩hadoop-3.3.6.tar.gz 文件
tar -zxvf /opt/soft/hadoop-3.3.6.tar.gz -C /opt/app-z:使用 gzip 解压缩算法。这是用来解压 .gz 结尾的文件的
-x:提取归档文件的内容
-f:指定要处理的归档文件的名称,后面跟着文件名 hadoop-3.3.6.tar.gz
-C:指定解压后的文件应放置在哪个目录下。在这里,目录是 /opt/app
解压后即可,看到/opt/app/hadoop-3.3.6文件夹
3、配置Hadoop环境变量
vim /etc/profile.d/my_env.sh配置JAVA和Hadoop环境变量(每台机器都需要配置)
vim /etc/profile.d/my_env.sh
export JAVA_HOME=/usr/java/jdk1.8.0_281-amd64
export HADOOP_HOME=/opt/app/hadoop-3.3.6
export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
修改后执行【source /etc/profile】命令使其生效
4、配置Hadoop的配置文件
# 进入修改目录
cd /opt/app/hadoop-3.3.6/etc/hadoop/
** (1)、修改 hadoop-env.sh**
export JAVA_HOME=/usr/java/jdk1.8.0_431
** (2)、修改配置文件yarn-env.sh 在文件末尾加上**
export JAVA_HOME=/usr/java/jdk1.8.0_431
(3) 修改配置文件 workers
指定dataNode工作节点。
#删除原有 localhost,添加如下内容
#【不能有空格和空行】
hadoop100
hadoop101
hadoop102
注: 修改下面文件中存在,配置放入其中,且只保留一组的
(4) 修改配置文件core-site.xml
<configuration>
<!-- 设置默认使用的文件系统 Hadoop支持file、HDFS、GFS、ali|Amazon云等文件系统 --><property><name>fs.defaultFS</name> <value>hdfs://hadoop100:8020</value> </property>
<!-- 指定Hadoop的临时文件的本地存放路径 --><property><name>hadoop.tmp.dir</name><value>/var/log/hadoop/tmp</value></property><property><!-- ZooKeeper 集群的地址 --><name>ha.zookeeper.quorum</name><value>hadoop101:2181,hadoop101:2182,hadoop101:2183</value></property><property><!-- ZKFC 连接到 ZooKeeper 超时时长 --><name>ha.zookeeper.session-timeout.ms</name><value>10000</value></property><!-- 设置HDFS web UI用户身份 --><property><name>hadoop.http.staticuser.user</name><value>root</value></property>
<!-- 配置该root(superUser)允许通过代理访问的主机节点 --><property><name>hadoop.proxyuser.root.hosts</name><value>*</value></property>
<!-- 配置该root(superUser)允许通过代理用户所属组 --><property><name>hadoop.proxyuser.root.groups</name><value>*</value></property>
<!-- 配置该root(superUser)允许通过代理的用户--><property><name>hadoop.proxyuser.root.groups</name><value>*</value></property>
</configuration>
(5) 修改配置文件hdfs-site.xml
<configuration>
<!-- 指定HDFS的数据分块的备份数量 --><property><name>dfs.replication</name><value>3</value></property><!-- 指定HDFS的主节点的元数据文件的本地存放路径 --><property><name>dfs.namenode.name.dir</name><value>/opt/app/hadoop-3.3.6/name</value></property>
<!-- 指定HDFS的数据节点的数据文件的本地存放路径 --><property><name>dfs.datanode.data.dir</name><value>/opt/app/hadoop-3.3.6/data</value></property>
<property><!-- 集群服务的逻辑名称 --><name>dfs.nameservices</name><value>mycluster</value></property><property><!-- NameNode ID 列表--><name>dfs.ha.namenodes.mycluster</name><value>nn1,nn2</value></property><property><!-- nn1 的 RPC 通信地址 --><name>dfs.namenode.rpc-address.mycluster.nn1</name><value>hadoop100:8020</value></property><property><!-- nn2 的 RPC 通信地址 --><name>dfs.namenode.rpc-address.mycluster.nn2</name><value>hadoop101:8020</value></property><property><!-- nn1 的 http 通信地址 --><name>dfs.namenode.http-address.mycluster.nn1</name><value>hadoop100:50070</value></property><property><!-- nn2 的 http 通信地址 --><name>dfs.namenode.http-address.mycluster.nn2</name><value>hadoop101:50070</value></property><property><!-- NameNode 元数据在 JournalNode 上的共享存储目录 --><name>dfs.namenode.shared.edits.dir</name><value>qjournal://hadoop100:8485;hadoop101:8485;hadoop102:8485/mycluster</value></property><property><!-- Journal Edit Files 的存储目录 --><name>dfs.journalnode.edits.dir</name><value>/home/hadoop/journalnode/data</value></property><property><!-- 配置隔离机制,确保在任何给定时间只有一个 NameNode 处于活动状态 --><name>dfs.ha.fencing.methods</name><value>sshfence</value></property><property><!-- 使用 sshfence 机制时需要 ssh 免密登录 --><name>dfs.ha.fencing.ssh.private-key-files</name><value>/root/.ssh/id_rsa</value></property><property><!-- SSH 超时时间 --><name>dfs.ha.fencing.ssh.connect-timeout</name><value>30000</value></property><property><!-- 访问代理类,用于确定当前处于 Active 状态的 NameNode --><name>dfs.client.failover.proxy.provider.mycluster</name><value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value></property><property><!-- 开启故障自动转移 --><name>dfs.ha.automatic-failover.enabled</name><value>true</value></property>
</configuration>
(6) 修改配置文件yarn-site.xml
<configuration><property><!--配置 NodeManager 上运行的附属服务。需要配置成 mapreduce_shuffle 后才可以在
Yarn 上运行 MapReduce 程序。--><name>yarn.nodemanager.aux-services</name><value>mapreduce_shuffle</value></property><property><!-- 是否启用日志聚合 (可选) --><name>yarn.log-aggregation-enable</name><value>true</value></property><property><!-- 聚合日志的保存时间 (可选) --><name>yarn.log-aggregation.retain-seconds</name><value>86400</value></property><property><!-- 启用 RM HA --><name>yarn.resourcemanager.ha.enabled</name><value>true</value></property><property><!-- RM 集群标识 --><name>yarn.resourcemanager.cluster-id</name><value>my-yarn-cluster</value></property><property><!-- RM 的逻辑 ID 列表 --><name>yarn.resourcemanager.ha.rm-ids</name><value>rm1,rm2</value></property><property><!-- RM1 的服务地址 --><name>yarn.resourcemanager.hostname.rm1</name><value>hadoop100</value></property><property><!-- RM2 的服务地址 --><name>yarn.resourcemanager.hostname.rm2</name><value>hadoop101</value></property><property><!-- RM1 Web 应用程序的地址 --><name>yarn.resourcemanager.webapp.address.rm1</name><value>hadoop100:8088</value></property><property><!-- RM2 Web 应用程序的地址 --><name>yarn.resourcemanager.webapp.address.rm2</name><value>hadoop101:8088</value></property><property><!-- ZooKeeper 集群的地址 --><name>yarn.resourcemanager.zk-address</name><value>hadoop101:2181,hadoop101:2182,hadoop101:2183</value></property><property><!-- 启用自动恢复 --><name>yarn.resourcemanager.recovery.enabled</name><value>true</value></property><property><!-- 用于进行持久化存储的类 --><name>yarn.resourcemanager.store.class</name> <value>org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore</value></property><property><name>yarn.resourcemanager.zk-state-store.parent-path</name><value>/rmstore</value>
</property>
</configuration>
(7) 修改配置文件mapred-site.xml
<configuration>
<!-- 指定MapReduce所使用的外部管理框架,这里使用Hadoop 3.3.6自带的YARN资源管理器 --><property><name>mapreduce.framework.name</name><value>yarn</value></property></configuration>
5、修改hadoop启动命令
# 进入到启动命令所在位置hadoop安装路径下的sbin目录下
cd /opt/app/hadoop-3.3.6/sbin
修改start-dfs.sh,stop-dfs.sh,在文件顶部添加
HDFS_ZKFC_USER=root
HDFS_JOURNALNODE_USER=root
HDFS_NAMENODE_USER=root
HDFS_SECONDARYNAMENODE_USER=root
HDFS_DATANODE_USER=root
HDFS_DATANODE_SECURE_USER=root
#HADOOP_SECURE_DN_USER=root
修改 start-yarn.sh,stop-yarn.sh,在文件顶部添加
YARN_RESOURCEMANAGER_USER=root
HADOOP_SECURE_DN_USER=yarn
YARN_NODEMANAGER_USER=root
6 、分发程序
拷贝 Hadoop 安装文件到集群节点
scp -qr /opt/app/hadoop-3.3.6 hadoop101:/opt/app
scp -r /opt/app/hadoop-3.3.6 hadoop102:/opt/app
7、 初始化
1 启动ZooKeeper
分别到服务器上启动 ZooKeeper 服务:
zkServer.sh start
2 启动Journalnode
分别到三台服务器的的 ${HADOOP_HOME}/sbin 目录下,启动 journalnode 进程:
hadoop-daemon.sh start journalnode
3 初始化NameNode
在 hadop100 上执行 NameNode 初始化命令:
hdfs namenode -format
执行初始化命令后,需要将 NameNode 元数据目录的内容,复制到其他未格式化的 NameNode 上。
元数据存储目录就是我们在 hdfs-site.xml 中使用 dfs.namenode.name.dir 属性指定的目录。这里我们需要将其复制到 hadoop101 上:
scp -r /opt/app/hadoop-3.3.6/name hadoop101:/opt/app/hadoop-3.3.6/
4 初始化HA状态
在任意一台 NameNode 上使用以下命令来初始化 ZooKeeper 中的 HA 状态:
hdfs zkfc -formatZK
5 启动HDFS
进入到 hadoop100 的 ${HADOOP_HOME}/sbin 目录下,启动 HDFS。此时 hadoop100 和 hadoop101 上的 NameNode 服务,和三台服务器上的 DataNode 服务都会被启动:
start-dfs.sh
6 启动YARN
进入到 hadoop100 的 ${HADOOP_HOME}/sbin 目录下,启动 YARN。此时 hadoop101 上的 ResourceManager 服务,和两台服务器上的 NodeManager 服务都会被启动:
start-yarn.sh
启动报错
查看日志
进入 /opt/app/hadoop-3.3.6/logs 目录,查看对应组件的启动日志
8、查看集群
可以看到每台机器上启动的应用和我们的配置文件地址是对应的
查看Web UI
webui地址 (http://hadoop100:50070/)
yarn地址 http://hadoop101:8088/
集群的二次启动
集群初次启动涉及到一些必要初始化操作,所以过程略显繁琐。但是集群一旦搭建好后,想要再次启用它是比较方便的,步骤如下(首选需要确保 ZooKeeper 集群已经启动):
先停止服务
stop-dfs.sh
stop-yarn.sh
使用jps查看,确保服务全部关闭
在 hadoop100 启动 HDFS,此时会启动所有与 HDFS 高可用相关的服务,包括 NameNode,DataNode 和 JournalNode:
start-dfs.sh
然后再启动 YARN
start-yarn.sh
相关文章:
基于ZooKeeper搭建Hadoop高可用集群
ZooKeeper搭建Hadoop高可用集群 在之前安装的Hadoop3.3.6集群中HDFS NameNode 和 YARN ResourceManager 都是单节点,集群不具有高可用性。 HDFS 高可用架构 HDFS 高可用架构主要组件: Active NameNode 和 Standby NameNode: 两台 NameNode…...
华硕主板不能开启
正常流程: [主機板]BIOS如何設置主機板整合圖形(內顯)和獨立顯示卡同時顯示輸出 | 官方支援 | ASUS 台灣 如果开启了CSR兼容性模式,在BIOS里面,就必须关掉,才能支持多显示器,如下图显示的标识才会出现。...
[C++]构造函数和析构函数
一、构造函数 1.构造函数的基本概念 1.对构造函数的理解: 构造函数是类的一种特殊成员函数,其主要功能是在创建对象时进行初始化操作。它的名字与类名相同,并且没有返回值类型(不能是void)。例如,对于一个…...
查询品牌涉及两张表(brand、brand_admin_mapping)
文章目录 1、BrandController2、AdminCommonService3、BrandApiService3、BrandCommonService4、BrandSqlService涉及的表SQL 查询逻辑参数处理执行查询完整 SQL 逻辑参数映射总结 SELECT * FROM brand_admin_mapping WHERE admin_id 252SELECT * FROM brand WHERE id 44SELE…...
CVPR和其他2024顶会论文阅读(资源整理【1】)
CVPR 2024论文阅读(资源整理【1】) 一、3d 重建与建模论文1-Deformable 3D Gaussians for High-Fidelity Monocular Dynamic Scene Reconstruction论文2- 4D Gaussian Splatting for Real-Time Dynamic Scene Rendering论文3-GaussianDreamer: Fast Generation from Text to …...
数据库表约束完全指南:提升数据完整性和准确性
数据库表约束完全指南:提升数据完整性和准确性 在数据库设计中,表约束是确保数据完整性和准确性的关键工具。本文将详细介绍各种类型的表约束及其使用方法,包括非空约束、唯一约束、主键约束、外键约束、默认值约束、检查约束以及自动递增约…...
保姆级教程用vite创建vue3项目并初始化添加PrimeVue UI踩坑实录
文章目录 一、什么是PrimeVue二、详细教程1.添加PrimeVue2.配置main.js3.添加自动引入4.配置vite.config.js5.创建测试页面 一、什么是PrimeVue PrimeVue 是一个用于 Vue.js 3.x 开发的一款高质量、广受欢迎的 Web UI 组件库。 官网地址:https://primevue.org/ 二、…...
数据库索引
以下是关于数据库索引的详细介绍,包括其概念、优点和缺点,并附带丰富的例子: 一、什么是数据库索引 数据库索引是一种数据结构,类似于书籍的目录,它能够帮助数据库管理系统(DBMS)迅速定位和访问…...
硬件选型规则
光源选型: 先用型号中带H的,没有的选标准的. 光源和光源控制器的搭配需要确保接口一致。 根据型号表中的最佳工作距离和相机的尺寸。 光源控制器选型: 首先选择海康风格系列光源控制器考虑与光源的接口匹配。功率应该满足接近光源功率。检查是否退市…...
linux 架构详解
Linux 是一种开源的操作系统内核,最初由 Linus Torvalds 于 1991 年创建。它是一个基于 Unix 的操作系统内核,用于构建完整的操作系统。Linux 架构是指 Linux 操作系统的内部结构和组成组件的工作方式。 整体架构 Linux系统通常被看作是一个层次化的结…...
Mybatis 学习 之 XML 手册
目录 单次执行单次新增单次更新单次删除 批量执行批量新增批量更新for 循环执行更新for 循环生成多条 sql,一次执行 批量删除 参数传递预处理方式 (OGNL表达式 #{})数据类型转换 直接替换 (EL表达式 ${}) 安全 单次执行 单次新增 <insert id"insert"…...
平面直角坐标系
图1 平面直角坐标系 横轴为x,竖轴为y,x、y的交点为O。 表示一个点经常表示为( x, y ),如图上的红点( 2, 3 )。 图2 点( 2, 3 )...
K8S对接ceph的RBD块存储
1 PG数量限制问题 1.1 原因分析 1.还是老样子,先创建存储池,在初始化为rbd。 [rootceph141~]# ceph osd pool create wenzhiyong-k8s 128 128 Error ERANGE: pg_num 128 size 3 for this pool would result in 295 cumulative PGs per OSD (2067 tot…...
使用 OpenCV 进行 Android 开发
在本节中,我们将创建一个简单的应用程序,它除了加载 OpenCV 之外什么都不做。在下一节中,我们将扩展它以支持相机。 除了这个说明,你还可以使用一些视频指南,例如这个 打开 Android Studio 并选择Empty Views Activi…...
ubuntu下 grep 如何过滤包括G或者T字符串
在 grep 中,你可以通过使用正则表达式来匹配包含 G 或者 T 的字符串。例如: 1. 过滤包括 G 或 T 的字符串: grep -E G|T filename -E 表示启用扩展正则表达式(也可以用 egrep)。G|T 表示匹配 G 或 T。 2. 不区分大…...
【C语言】整数每一位数字出现次数
提相信你是最棒哒!!! 文章目录 题目描述 题目代码 法一解析版C 法二解析版C 总结 题目描述 给出两个整数 M 和 N,求在序列[M, M 1, M 2,…, N - 1, N]中每一个数码出现了多少次。 输入格式 输入两个整数 M 和 N 。 输出格式…...
opencv Mat To Heif
高效率图像文件格式(英语:High Efficiency Image File Format, HEIF;也称高效图像文件格式)是一个用于单张图像或图像序列的文件格式。它由运动图像专家组(MPEG)开发,并在MPEG-H Part 12&#x…...
[GStreamer] gstbasesink 的 chain 函数
chain函数的定位: chain函数是上一个element到当前element的入口,chain函数处理完毕后,上一个函数的push_buffer 就得以返回。因此通常情况下 parent element 的核心逻辑都在 chain 函数里,再通过再 chain 函数里调用虚函数让 ch…...
评估大语言模型(LLM)在分子预测任务能够理解分子几何形状性能
摘要 论文地址:https://arxiv.org/pdf/2403.05075 近年来,机器学习模型在各个领域越来越受欢迎。学术界和工业界都投入了大量精力来提高机器学习的效率,以期实现人工通用智能(AGI)。其中,大规模语言模型&a…...
2024-12-04OpenCV视频处理基础
OpenCV视频处理基础 OpenCV的视频教学:https://www.bilibili.com/video/BV14P411D7MH 1-OpenCV视频捕获 在 OpenCV 中,cv2.VideoCapture() 是一个用于捕获视频流的类。它可以用来从摄像头捕获实时视频,或者从视频文件中读取帧。以下是如何使用…...
Springboot 2.7+解决跨域问题,到底是在SpringBoot中添加拦截器还是修改Nginx配置
文章目录 1摘要2 核心代码2.1 SpringBoot 全局跨域拦截器2.2 Nginx 配置跨域处理2.3 Nginx 和 SpringBoot 同时添加允许跨域处理会怎么样? 3 推荐参考资料 1摘要 跨域问题报错信息: Referrer Policy:strict-origin-when-cross-origin跨域问题是在前后端分离的情况…...
在Mac上安装多个Java版本
1、获取 Homebrew 的历史版本库 执行下面命令来获取 Homebrew 的历史版本库 brew tap homebrew/cask-versions2、安装java //java8 brew install java8 --cask//java11 brew install java11 --cask//java17 brew install --cask homebrew/cask-versions/microsoft-openjdk17…...
[小白系列]Ubuntu安装教程-安装prometheus和Grafana
Docker安装prometheus 拉取镜像 docker pull prom/prometheus 配置文件prometheus.yml 在/data/prometheus/建立prometheus.yml配置文件。(/data/prometheus/可根据自己需要调整) global:scrape_interval: 15s # By default, scrape targets ev…...
HTTP中GET和POST详细理解
HTTP中GET和POST 简单来说 GET 的语义是从服务器获取指定的资源,这个资源可以是静态的文本、页面、图片视频等。GET 请求的参数位置一般是写在 URL 中,URL 规定只能支持 ASCII,所以 GET 请求的参数只允许 ASCII 字符 ,而且浏览器…...
Vant UI Axure移动端元件库:提升移动端原型设计效率
UI框架的选择对于提升开发效率和用户体验至关重要。Vant UI,作为一款基于Vue.js的轻量、可靠的移动端组件库,自2017年开源以来,凭借其丰富的组件库、良好的性能以及广泛的兼容性,在移动端开发领域崭露头角,赢得了众多开…...
y3编辑器文档3:物体编辑器
文章目录 一、物体编辑器简介1.1 界面介绍1.2 复用(导入导出)1.3 收藏夹(项目资源管理)1.4 对象池二、单位2.1 数据设置2.2 表现设置2.3 单位势力和掉率设置2.4 技能添加和技能参数修改2.5 商店2.5.1 商店属性设置2.5.2 商店物品设置三、装饰物3.1 属性编辑3.2 碰撞体积四、…...
【ESP32】ESP-IDF开发 | DAC数模转换器+余弦波输出例程
1. 简介 ESP32上的数字模拟转换器 (DAC) 带有 2 个 8 位通道,因此可输出2路模拟信号。在低功耗模式下也可由 ULP 协处理器通过控制寄存器来实现完全控制。内部自带余弦波形生成器,可用于生成余弦波形/正弦波形,用户可调整频率、振幅、相位和直…...
java中的递归
大家好,今天我们来学习一下java中的递归,相信大家应该也对递归有一点了解吧,如果没有也没有关系,我们现在就来了解一下。 五、递归 自身中包含了自己,遇到的问题直接并不好解决,但是发现将原问题拆分成其子问题之后,子问题与原问…...
残差网络连接,使得输入与输出的尺寸一样
def forward(self, x):out self.layer1(x)out self.layer2(out)# 使用插值将输入x上采样至与layer2输出相同的尺寸x F.interpolate(x, size(out.size(2), out.size(3)), modebilinear, align_cornersFalse)# 确保x的通道数与out匹配x x[:, :out.size(1), :, :] # 选择前ou…...
SAP SD学习笔记18 - 投诉处理4 - 请求书订正依赖,投诉处理流程的总结
上一章讲了 Credit/Debit Memo依赖,Credit/Debit Memo。Credit Memo依赖 本质上是一张受注票;Credit Memo 本质上是一张请求票。 SAP SD学习笔记17 - 投诉处理3 - Credit/Debit Memo依赖,Credit/Debit Memo-CSDN博客 本章继续讲本图中的内容…...
记录下nginx接口代理配置问题
其中api和api1是前面定义的upstream,ip相同只是端口不同。 一开始/api1/直接 像api一样 proxy_pass http://api1这样是不行的,因为会代理到 后端的 /api1/...接口,而后端实际接口地址是 /api/..... 所以必须像上面写法才能将外网的 /api…...
flink-connector-mysql-cdc:01 mysql-cdc础配置代码演示
flink-connector-mysql-cdc: 01 mysql-cdc基础配置代码演示02 mysql-cdc高级扩展03 mysql-cdc常见问题汇总04 mysql-cdc-kafka生产级代码分享05 flink-kafka-doris生产级代码分享06 flink-kafka-hudi生产级代码分享 flink-cdc版本:3.2.0 flink版本&…...
001-Redis介绍
目录 一、Redis 简介 二、Redis 特性 三、Redis 下载安装 四、Redis 可视化管理界面工具 一、Redis 简介 1.Redis 是完全开源免费的,遵守BSD协议,是一个高性能的 key-value 数据库。 2. 它在内存中存储数据,并提供了持久化功能,可以将数据保存到磁盘中,它是一种 NoS…...
数据结构---单链表
目录 一、概念 二、分类 1. 单向或者双向 2. 带头或者不带头 3. 循环或者非循环 三、接口实现 1.定义结构 2、申请节点 3、尾插 4、头插 5、尾删 6、头删 7.查找,也可以充当修改 8、在pos之前插入x 9、在pos之后插入x 编辑 10、删除pos位置 …...
从一个Bug谈前端响应拦截器的应用
一、问题场景 今天在开发商品管理系统时,遇到了一个有趣的问题:当添加重复的商品编号时,页面同时弹出了两条 "商品编号已存在" 错误提示: 这个问题暴露了前端错误处理机制的混乱,让我们从这个问题出发&…...
在做题中学习(78):数组中第K个最大元素
解法:快速选择算法 说明:堆排序也是经典解决topK问题的算法,但时间复杂度为:O(NlogN) 而将要介绍的快速选择算法的时间复杂度为: O(N) 先看我的前两篇文章,分别学习:数组分三块,随机选择基准…...
药剂学试卷
1【单选题】在倍氯米松气雾剂中加入四氟乙烷是用作 C A、 助悬剂 B、 乳化剂 C、 抛射剂 D、 防腐剂 2【单选题】一步制粒机可完成的工序是 B A、 粉碎→混合→制粒→干燥 B、 混合→制粒→干燥 C、 过筛→制粒→混合→干燥 D、 过筛→制粒→混合 3【单选题】小檗碱片包…...
3D 生成重建020-Gaussian Grouping在场景中分割并编辑一切
3D 生成重建020-Gaussian Grouping在场景中分割并编辑一切 文章目录 0 论文工作1 方法2 实验结果 0 论文工作 最近提出的高斯Splatting方法实现了高质量的实时三维场景新视角合成。然而,它仅仅关注外观和几何建模,缺乏细粒度的物体级场景理解。为了解决…...
力扣143.重排链表
题目描述 题目链接143. 重排链表 给定一个单链表 L 的头节点 head ,单链表 L 表示为: L0 → L1 → … → Ln - 1 → Ln请将其重新排列后变为: L0 → Ln → L1 → Ln - 1 → L2 → Ln - 2 → … 不能只是单纯的改变节点内部的值ÿ…...
本文介绍麒麟信安服务器系统(kylinsec)的安装。
本文介绍麒麟信安服务器系统(kylinsec)的安装。 下载 在开源欧拉官方找到商业版本的介绍找到相关产品: https://www.openeuler.org/zh/download/commercial-release/ 麒麟信安kylinsec下载地址: https://mirrors.kylinsec.com…...
单链表---回文结构
判断某一个单链表是否是回文结构,是返回true、不是返回false。 所谓的回文结构,就是类似对称结构: 对于奇数与偶数个结点均是如此。 那么就有思路:①找到链表的中间结点②逆置后半部分或前半部分③比较两者 ①找中间结点&#x…...
Java --- 反射
目录 一.什么是反射? 二.反射的核心方法和功能: 1.获取类的元信息: 2. 动态实例化对象: 3. 访问字段(包括私有字段): 4. 调用方法(包括私有方法): 5.…...
python编程Day12-属性和方法的分类
私有和公有 在python中 定义类的时候,可以给 属性和方法设置 访问权限,即规定在什么地方可以使用。 权限一般分为两种:公有权限、私有权限 公有权限 定义:直接定义的属性和方法就是公有的特点: 可以在任何地方访问和使…...
C#实现TCP客户端和服务器
本文将介绍如何使用C#实现TCP客户端和服务器的基本功能,客户端与服务器可以相互发送消息。 效果展示 服务器端实现 首先,我们实现TCP服务器。以下是服务器端所需的类和代码: using System; using System.Collections.Generic; using Syste…...
数据库编程: JDBC 中数据库驱动包的安装,配置及引用
目录 驱动包的下载安装 1. 去oracle 官方网站下载 2. github 的开源软件 3. 中央仓库(推荐使用这个) 驱动包的配置及引用 1. 第一步: 打开idea, 在 idea 中创建新的项目 2. 然后我们要在 jdbc_1 目录下创建一个新的目录包 3. 最后引入MySQL 的驱动包, 作为项目的依赖 尾…...
mx linux 在konsole终端中无法输入中文的解决方法
在mx linux系统中,浏览器可以正常输入中文,但是终端窗口中无法输入中文的解决方法,可以通过以下步骤安装 fcitx - frontend - qt5 组件: 1. 打开终端。你可以通过系统菜单或者快捷键(如 Ctrl Alt T )来…...
./configure 安装ngnix的命令
./configure 是一个在 Unix 和类 Unix 系统中常用的 shell 脚本命令,主要用于配置软件源代码包,以便进行编译和安装。这个命令通常在从源代码编译软件之前执行,它会自动检测系统的配置并生成适合该系统的 Makefile。 以下是 ./configure 脚本…...
网络安全之接入控制
网络安全之接入控制 身份鉴别 定义:验证主题真实身份与其所声称的身份是否符合的过程,主体可以是用户、进程、主机。同时也可实现防重放,防假冒。 分类:单向鉴别、双向鉴别、三向鉴别。 主题身份标识信息:密钥、用户名和口令、证书和私钥 I…...
2.1 关系模型
关系模型的基本概念 关系:二维表,通常在数据库中表现为一个表; 属性:关系中的一个列即为关系的一个属性; 域: 每个属性的取值范围即为该属性的域; 元组:关系中的一个行是一个元组…...
深入浅出 Go 语言 sync包中的互斥锁、条件变量
深入浅出 Go 语言 sync包中的互斥锁、条件变量 引言 在并发编程中,多个 Goroutine 同时访问共享资源可能会导致数据竞争(Race Condition),进而引发程序的不一致性或崩溃。为了确保并发程序的正确性和稳定性,Go 语言提…...