Ceph 原理与集群配置
一、Ceph 工作原理
1.1.为什么学习 Ceph?
在学习了 NFS 存储之后,我们仍然需要学习 Ceph 存储。这主要是因为不同的存储系统适用于不同的场景,NFS 虽然有其适用之处,但也存在一定的局限性。而 Ceph 能够满足现代分布式、大规模、高可靠存储架构的要求。
NFS 主要适用于简单文件共享的轻量场景,它就像是一个小型的共享仓库,适合几个人或者小团队之间简单地共享一些文件。但当我们面临大规模的数据存储、需要高度可靠的数据保护以及分布式的存储架构时,NFS 就显得力不从心了。
Ceph 则解决了大规模、高可靠、分布式存储的复杂需求。在现代数据密集型业务中,如云计算、大数据、AI 等领域,数据量巨大且对存储的可靠性和扩展性要求极高。学习 Ceph 可以让我们掌握应对这些复杂场景的核心技术,弥补 NFS 在扩展性、功能丰富度、可靠性上的不足,使我们能够适应技术发展的趋势。
1.2.什么是 Ceph⭐
Ceph 是实现优性能、可靠性、可扩展性的存储系统,具有 “统一的” 和 “分布式” 两大特性:
-
“统一的”:Ceph 一套存储系统可同时提供对象存储、块存储、文件系统存储三种功能。
-
“分布式”:Ceph 是无中心结构,无中心结构就是 Ceph 集群,无论访问集群中的哪一个节点,都能访问整个 Ceph 结构,理论上具备无限可扩展性。
1.3.Ceph 系统层次⭐
自下而上,四个层次
-
RADOS:基础存储系统(可靠的、自动化的、分布式的对象存储)
-
Cluster map:它是记录全局系统状态的数据结构,由以下两个部分组成:
-
OSD:数量众多,是数据存储和维护的核心。本质上,它是安装了操作系统和文件系统的计算机,每个 OSD 拥有自己的 OSD deamon,用于完成 OSD 的逻辑功能。同时,它还会与 Monitor 以及其他 OSD 进行通信,以完成数据的存储和维护。可以把 OSD 想象成一个个具体的小仓库,负责实际存放货物(数据)。
-
Monitor:主要负责状态检测和维护。它就像仓库的管理员,时刻关注着各个小仓库(OSD)的状态,确保整个仓库网络的正常运行。
-
-
-
LIBRADOS:基础库,为上层应用提供了访问 RADOS 的接口。可以把它看作是连接上层应用和底层存储系统的桥梁。
-
RADOS GW、RBD、Ceph FS:高层应用接口,分别对应对象存储、块存储和文件系统存储的接口。不同的应用可以通过这些接口来使用 Ceph 提供的不同存储功能。
-
应用层:使用 Ceph 存储服务的各种应用程序。
1.4.寻址流程⭐
Ceph 通过三次映射实现了从文件到底层存储设备的高效、可靠寻址,具体如下:
-
File(文件)→ Object(对象)映射:将用户操作的文件切分成固定大小(由 RADOS 限定,如 2MB 或 4MB)的对象。这样做有两个好处:一是让大小不限的文件变为易于 RADOS 管理的统一尺寸对象,就像把不同大小的货物打包成统一规格的箱子;二是将对单一文件的串行处理转换为对多个对象的并行处理,提升了效率。
-
Object(对象)→ PG(归置组)映射:通过哈希算法将对象映射到 PG。一个对象只能映射到一个 PG,而一个 PG 可管理多个对象(如数千个甚至更多),实现对对象存储的逻辑组织。可以把 PG 看作是一个个货架,对象就像放在货架上的商品。
-
PG(归置组)→ OSD(对象存储设备)映射:利用 CRUSH 算法,将 PG 以多副本(通常为 3 副本)形式映射到不同的 OSD 上。这样每个 PG 的数据会分布到多个 OSD 存储,实现数据冗余备份、高可用及负载均衡,确保系统的可靠性和稳定性。就像把货架上的商品复制多份,分别存放在不同的小仓库中,即使某个小仓库出现问题,也不会影响商品的正常使用。
1.5.数据写入流程
Ceph 数据写入流程基于三次映射(File → Object → PG → OSD),具体如下:
-
File 切片为 Object:用户写入的文件先被切分为固定大小的 Object(如 4MB),这是 Ceph 存储的最小单元,便于管理和并行操作。
-
确定存储位置:通过哈希 HASH 算法将 Object 映射到 PG(归置组),再利用 CRUSH 算法根据集群拓扑(如机架、机房等)将 PG 映射到多个 OSD(通常为 3 个,形成三副本)。这样可以确保数据的安全性和可靠性。
-
客户端与 OSD 通信
-
客户端通过 CRUSH 算法知道目标 OSD(包含主 OSD 和从 OSD),将数据发送给主 OSD。
-
主 OSD 接收数据后,会将数据同步到从 OSD。
-
当所有从 OSD 成功接收数据并向主 OSD 确认后,主 OSD 才将数据持久化写入本地,并向客户端返回写入成功的确认。
-
1.6.集群维护
-
在 Ceph 集群维护中,Monitor 负责汇总集群状态并形成 cluster map,随后将其扩散至所有 OSD 和 Client。OSD 利用 cluster map 进行数据维护,Client 借助 cluster map 实现数据寻址。
-
需注意的是,Monitor 不会主动轮询 OSD 状态,而是由 OSD 主动向 Monitor 上报自身状态(如新增 OSD 加入集群,或检测到自身 / 其他 OSD 异常时)。
-
Monitor 收到上报信息后更新 cluster map 并再次扩散,确保集群内各组件掌握最新的集群状态,保障 Ceph 集群的正常运行与数据处理。
-
简言之,通过 “OSD 主动上报状态 → Monitor 汇总更新 cluster map → 扩散至全体 OSD 和 Client” 的流程,实现集群状态的同步与维护,支撑 OSD 和 Client 的数据操作。
1.7.新增 OSD
新增 OSD:
-
首先与 monitor 通信,monitor 将其加入 cluster map,设置状态 up 或者 out,将最终版的 cluster map 发给 OSD。
-
(新增 OSD 就像是在仓库网络中添加一个新的小仓库,需要先告知管理员(Monitor),管理员将其信息记录到仓库地图(cluster map)中,并设置其状态,然后将更新后的地图发给其他小仓库(OSD))
恢复 OSD:
-
Ceph 的自动化故障恢复指当 OSD 故障时,系统自动检测并通过 CRUSH 算法将故障节点上的数据副本重新分布到其他正常 OSD 上以维持副本数,故障节点修复后自动纳入集群并重新平衡数据,全程无需人工干预。
-
(这就像当某个小仓库出现问题时,系统会自动将里面的货物转移到其他小仓库,等这个小仓库修好后,再将货物重新分配回来)
负载均衡 OSD:
-
新 OSD 替换旧 OSD,复制换数据后,新 OSD 被置为 up 且 in 状态,旧 OSD 退出该 PG,cluster map 数据更新。
-
(这就像用一个新的小仓库替换旧的小仓库,将旧仓库里的货物复制到新仓库,然后让旧仓库退出相应的货架管理,同时更新仓库地图)
自动化故障探测:
-
OSD 走动监测状态,包括自身问题和其他 OSD 问题,自动上报 monitor,monitor 把有问题 OSD 状态设置为 down 且 in,如果不能自动恢复则设置为 down 且 out,如果能自动恢复则设置为 up 且 in。
-
(这就像每个小仓库都有一个自我检测装置,发现问题后会及时告知管理员,管理员根据情况对小仓库的状态进行调整)
二、配置 Ceph 集群
-
配置要求
-
硬件要求:RHEL 9 三台主机,每台主机需要 4G 内存,并添加两块 50G 硬盘。
-
系统设置:关闭防火墙、SELinux,以避免对 Ceph 集群的通信和运行造成干扰。
-
2.1.准备工作
配置 hosts 解析。
目的:是为了让各个主机能够通过主机名相互识别和通信,就像给每个小仓库都取了一个容易记住的名字,方便大家交流。
cat >> /etc/hosts << EOF
192.168.67.121 ceph-master
192.168.67.122 ceph-node1
192.168.67.123 ceph-node2
EOF
时间同步,因为 Ceph 时间要求同步到 0.05s 之内,所以对时间要求很严格。
时间同步对于 Ceph 集群非常重要,因为各个组件之间的通信和数据处理需要基于统一的时间标准。如果时间不同步,可能会导致数据不一致、状态判断错误等问题。
yum install bash-completion vim tree psmisc wget tar net-tools lrzsz -y
yum install chrony -y
sed -i 's/^pool.*/pool ntp1.aliyun.com iburst/g' /etc/chrony.confsystemctl enable --now chronyd
systemctl restart chronyd
chronyc sources
MS Name/IP address Stratum Poll Reach LastRx Last sample
===============================================================================
^* 120.25.115.20 2 6 33 5 -1993ns[ -126us] +/- 17ms
2.2.cephadm 配置 Ceph
2.2.1.安装 docker-ce
安装 Docker-ce 是为了构建 Docker 软件仓库,用于下载 Docker。Docker 可以为 Ceph 组件提供一个隔离的运行环境,避免本地环境依赖问题。
cat >> /etc/yum.repos.d/docker.repo << EOF
[docker]
name=docker
baseurl=https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/rhel/9.3/x86_64/stable/
gpgcheck=0
EOF
安装 Docker-ce。
yum install docker-ce -y
配置 Docker 加速器。
cat >> /etc/docker/daemon.json << EOF
{"registry-mirrors": ["https://docker.m.daocloud.io","https://hub-mirror.c.163.com","https://mirror.baidubce.com","https://docker.nju.edu.cn","https://register.liberx.info","https://mirror.ccs.tencentyun.com","https://2i1r7dqv.mirror.aliyuncs.com"]
}
EOF
2.2.2.安装 cephadm
准备 ceph 的 yum 源,以便后续安装 cephadm。
cat >> /etc/yum.repos.d/ceph.repo << EOF
[ceph]
name=ceph x86_64
baseurl=https://mirrors.aliyun.com/ceph/rpm-squid/el9/x86_64
enabled=1
gpgcheck=0
[ceph-noarch]
name=ceph noarch
baseurl=https://mirrors.aliyun.com/ceph/rpm-squid/el9/noarch
enabled=1
gpgcheck=0
[ceph-source]
name=ceph SRPMS
baseurl=https://mirrors.aliyun.com/ceph/rpm-squid/el9/SRPMS
enabled=1
gpgcheck=0
EOF
安装 Python3,因为 cephadm 依赖 Python3。
yum install python3 -y
在 ceph-master 主机上安装 cephadm(其他两台主机不需要安装)。
cephadm 是 Ceph 官方提供的集群管理工具,支持自动化部署、扩容、监控,仅需在管理节点(如 ceph-master)安装。
yum install cephadm -y
2.2.3.初始化 ceph 集群
在 ceph-master 主机上初始化 ceph 集群。
cephadm --docker bootstrap \
--mon-ip 192.168.67.121 \
--initial-dashboard-user admin \
--initial-dashboard-password redhat \
--dashboard-password-noupdate \
--allow-fqdn-hostname
-
--docker:使用 Docker 运行 Ceph 组件(mon、mgr 等),避免本地环境依赖问题。
-
--mon-ip:指定第一个 Monitor 节点的 IP(集群核心组件,负责维护集群状态)。Monitor 就像仓库的管理员,需要有一个固定的地址来进行管理和通信。
-
--initial-dashboard-user/password:设置 Web 管理界面(Ceph Dashboard)的初始登录凭证,方便我们通过 Web 界面来管理和监控 Ceph 集群。
-
--dashboard-password-noupdate:禁止 Dashboard 自动更新密码(生产环境可选)。
-
--allow-fqdn-hostname:允许使用主机名(非 IP)进行节点识别,兼容后续可能的 DNS 配置。
2.2.4.扩展 ceph 集群
集群扩容,拷贝公钥到 node 节点。
将 ceph-master 的 SSH 公钥(ceph.pub 由 cephadm 自动生成)添加到 node 节点,实现无密码登录,便于后续远程管理和部署 OSD 等组件。这就像给管理员一把万能钥匙,可以直接打开各个小仓库的门。
ssh-copy-id -f -i /etc/ceph/ceph.pub ceph-node1
ssh-copy-id -f -i /etc/ceph/ceph.pub ceph-node2
添加节点集群。
cephadm shell ceph orch host add ceph-node1
cephadm shell ceph orch host add ceph-node2
-
cephadm shell:进入 cephadm 命令行环境,获取集群管理权限。
-
ceph orch host add:将节点(ceph-node1/2)加入集群,以便后续分配 OSD、mon 等组件。这就像把新的小仓库加入到仓库网络中。
2.2.5.配置 ceph 集群
安装 ceph-common 的核心价值在于:
-
提供访问 Ceph 集群的必要工具(如 ceph、rbd 等命令)。
-
支持应用程序与 Ceph 集成(通过客户端库)。让其他应用程序能够方便地使用 Ceph 提供的存储服务。
-
简化集群配置与管理(自动加载配置文件、认证信息)。减少我们手动配置的工作量。
如果仅作为存储客户端(如挂载 CephFS 或使用 RBD 卷),ceph-common 是必需的;若作为集群管理员,则更依赖此包提供的完整工具链。
# 配置 epel 源
yum install -y https://mirrors.aliyun.com/epel/epel-release-latest-9.noarch.rpm
# 安装 ceph-common
yum install ceph-common -y
添加 osd 磁盘设备。
为每个节点的两块硬盘(/dev/sdb、/dev/sdc)创建 OSD 服务,OSD 是 Ceph 的核心存储单元,负责实际数据的存储和管理。添加 OSD 就像在各个小仓库中增加更多的存储空间,以满足不断增长的数据存储需求。
ceph orch daemon add osd ceph-master:/dev/sdb
ceph orch daemon add osd ceph-master:/dev/sdc
ceph orch daemon add osd ceph-node1:/dev/sdb
ceph orch daemon add osd ceph-node1:/dev/sdc
ceph orch daemon add osd ceph-node2:/dev/sdb
ceph orch daemon add osd ceph-node2:/dev/sdc
设置管理节点。
标记 ceph-master 为管理节点(_admin
是 cephadm 的特殊标签),允许该节点执行集群管理操作(如修改配置、添加组件)。这就像指定一个仓库管理员,负责整个仓库网络的管理和协调工作。
ceph orch host label add ceph-master _admin
将 mon 和 mgr 组件部署到所有节点中(高可用性)。
ceph orch apply mon "ceph-master ceph-node1 ceph-node2"
ceph orch apply mgr --placement "ceph-master ceph-node1 ceph-node2"
-
部署 Monitor 组件:在三个节点上部署 Monitor 组件,通过 Paxos 算法实现选举和状态同步(奇数个节点避免脑裂,确保高可用性)。Monitor 负责维护集群的状态信息,多个 Monitor 节点可以保证在某个节点出现故障时,集群仍然能够正常运行。
-
部署 Manager 组件:在三个节点上部署 Manager 组件(Active-Standby 模式),负责集群监控、仪表盘管理、自动化策略执行,提升运维效率。Manager 就像一个智能的监控系统,实时监控集群的运行状态,并根据预设的策略进行自动化管理。
2.3.验证 ceph 集群状态
查看 ceph 健康状态。
[root@ceph-master ~]# ceph -scluster:id: 8bb910d6-2b1b-11f0-8725-000c292a6edehealth: HEALTH_OK # 健康状态 OKservices:mon: 3 daemons, quorum ceph-master,ceph-node2,ceph-node1 (age 3m) # 三个 monmgr: ceph-master.nobasm(active, since 7m), standbys: ceph-node2.femkkp, ceph-node1.rvdoat # 三个 mgrosd: 6 osds: 6 up (since 93s), 6 in (since 112s) # 六个 osddata:pools: 1 pools, 1 pgsobjects: 2 objects, 577 KiBusage: 161 MiB used, 300 GiB / 300 GiB avail # osd 一共 300 GiBpgs: 1 active+clean
验证 ceph Web 页面(https://ip:8443)。
输入用户名和密码登录,显示如下界面即可。这可以让我们通过 Web 界面直观地管理和监控 Ceph 集群。
集成了 prometheus 并对接 grafna,(https://ip:3000)。
通过集成 prometheus 和 grafna,我们可以对 Ceph 集群进行更详细的监控和数据分析,及时发现和解决潜在的问题。
集群配置完毕。
相关文章:
Ceph 原理与集群配置
一、Ceph 工作原理 1.1.为什么学习 Ceph? 在学习了 NFS 存储之后,我们仍然需要学习 Ceph 存储。这主要是因为不同的存储系统适用于不同的场景,NFS 虽然有其适用之处,但也存在一定的局限性。而 Ceph 能够满足现代分布式、大规模、…...
【C++】类和对象
文章目录 1. 为什么引入类?1.1 C类的设计目标1.2 类的核心特性1.3 类与结构体的区别 2. 类的定义2.1 类定义格式2.2 访问限定符2.3 类域 3. 实例化3.1 实例化概念3.2 对象大小 4. this指针5. 类的默认成员函数6. 构造函数7. 析构函数8. 拷贝构造函数9. 赋值运算符重…...
【计算机视觉】OpenCV项目实战:OpenCV_Position 项目深度解析:基于 OpenCV 的相机定位技术
OpenCV_Position 项目深度解析:基于 OpenCV 的相机定位技术 一、项目概述二、技术原理(一)单应性矩阵(Homography)(二)算法步骤(三)相机内参矩阵 三、项目实战运行&#…...
【Linux系列】如何区分 SSD 和机械硬盘
💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…...
【AI提示词】双系统理论专家
提示说明 专注于认知心理学领域的专家,研究快思考(直觉)与慢思考(理性)的切换机制及其在认知科学中的应用。 提示词 # Role: 双系统理论专家## Profile - language: 中文 - description: 专注于认知心理学领域的专家…...
CI/CD与DevOps流程流程简述(给小白运维提供思路)
一 CI/CD流程详解:代码集成、测试与发布部署 引言 在软件开发的世界里,CI/CD(持续集成/持续交付)就像是一套精密的流水线,确保代码从开发到上线的整个过程高效、稳定。我作为一名资深的软件工程师,接下来…...
python调用国税乐企直连接口开数电票之查询税收分类编码信息
背景 通过国税官方开放乐企平台接口, 实现了在EPR系统内直接开票. 无需通过任何第三方系统.逐步更新到CSDN专栏分享大家参考. 接口说明 定时获取可用税收分类编码,绑定ERP内部的编码, 使开票时能根据商品匹配到对应的税收分类编码…针对不同编码维护了 18 类增值…...
国标GB28181视频平台EasyGBS打造电力行业变电站高效智能视频监控解决方案
一、方案背景 在数字化浪潮席卷电力行业的当下,变电站作为电力输送与分配的核心枢纽,其运行的安全性与稳定性直接关乎社会生产生活的正常运转。然而,传统变电站监控模式设备存在兼容性差、数据处理滞后、管理效率低下等问题,无…...
快速上手 Docker:从入门到安装的简易指南(Mac、Windows、Ubuntu)
PS:笔者在五一刚回来一直搞Docker部署AI项目,发现从开发环境迁移到生成环境时,Docker非常好用。但真的有一定上手难度,推荐读者多自己尝试踩踩坑。 本篇幅有限,使用与修改另起篇幅。 一、Docker是什么 #1. Docker是什…...
Kubernetes(k8s)学习笔记(九)--搭建多租户系统
K8s 多租户管理 多租户是指在同一集群中隔离多个用户或团队,以避免他们之间的资源冲突和误操作。在K8s中,多租户管理的核心目标是在保证安全性的同时,提高资源利用率和运营效率。 在K8s中,该操作可以通过命名空间(Nam…...
后端项目进度汇报
项目概述 本项目致力于构建一个先进的智能任务自动化平台。其核心技术是一套由大型语言模型(LLM)驱动的后端系统。该系统能够模拟一个多角色协作的团队,通过一系列精心设计或动态生成的处理阶段,来高效完成各种复杂任务ÿ…...
掌握 Kubernetes 和 AKS:热门面试问题和专家解答
1. 在 AKS(Azure Kubernetes 服务)中,集群、节点、Pod 和容器之间的关系和顺序是什么? 在 AKS(Azure Kubernetes 服务)中,集群、节点、Pod 和容器之间的关系和顺序如下: 集群&#…...
C++面向对象设计类的核心知识详解总述(1)
C 中的类是面向对象编程(OOP)的核心,用于封装数据和操作这些数据的函数。 下面将系统讲解 C 中类的核心知识点(包含语法 概念 示例): 一、类的基本结构 class MyClass { public:// 构造函数MyClass();//…...
【大模型系列篇】Qwen3思考预算及思考模式切换实现原理探索
我们之前一期有介绍过阿里发布并开源的Qwen3大语言模型,无缝集成思考模式、多语言和MCP智能体:《Qwen3开源全新一代大语言模型来了,深入思考,更快行动》,感兴趣的小伙伴可以跳转阅读。 而在本次开源的 Qwen3 的更新中…...
PPT 制作难题迎刃而解,影刀 RPA 开启自动化创作时代
前言 影刀cto说过这么一句话:不迷信AI,也不忽视AI,我们要打造以AI驱动的RPA,AI对当前社会的影响真的不亚于一场战争的爆发 RPA(机器人流程自动化)作为一种已被广泛应用的技术,能基于预设规则自…...
Node.js面试题
一、什么是Node.js? Node.js 是一个开源的跨平台 JavaScript 运行时环境,允许开发者在服务器端运行 JavaScript 代码。它基于 Chrome 的 V8 JavaScript 引擎构建,能够高效地处理 I/O 操作,适合构建高性能的网络应用。 异步非阻塞&…...
C# NX二次开发:投影曲线和偏置曲线UFUN函数详解
大家好,今天要讲的是关于投影曲线和偏置曲线相关的函数。 (1)UF_CURVE_create_proj_curves1:这个函数的定义为创建投影曲线。 Defined in: uf_curve.h Overview Creates projection curves. Objects to project may be poi…...
从明文裸奔到密钥长城:HTTPS加密全链路攻防与CA信任锚点构建
前言:本文将从HTTP的隐患出发,深入剖析HTTPS如何通过加密算法、数字证书与信任链机制重塑网络通信的安全边界。我们将探讨协议的证书颁发机构(CA)的信任逻辑,以及HTTPS在性能与安全之间的平衡艺术。将帮助您更从容地应…...
C# WPF 颜色拾取器
x:Name=Color Picker 语言:C# WPF 下载:https://download.csdn.net/download/polloo2012/90780640 主界面 颜色库 关于我们 颜色拾取器是一种能够帮助用户获取颜色信息,并进行颜色选择、识别和调整的工具,以下将从其常见类型、使用场景及部分软件工具这几个维度展开介绍…...
MySQL关于锁的面试题
目录 1.了解过 MySQL 死锁问题吗? 2.什么是线程死锁?死锁相关面试题 2.1 什么是死锁: 2.2 形成死锁的四个必要条件是什么? 2.3 如何避免线程死锁? 3. MySQL 怎么排查死锁问题? 4.Java线上死锁问题如…...
亚远景-ASPICE vs ISO 21434:汽车软件开发标准的深度对比
ASPICE(Automotive SPICE)和ISO 21434是汽车软件开发领域的两大核心标准,分别聚焦于过程质量与网络安全。以下从核心目标、覆盖范围、实施重点、协同关系及行业价值五个维度进行深度对比分析: 一、核心目标对比 ASPICE࿱…...
第5讲、Transformer 编码器(Encoder)处理过程详解
🔍 Transformer 编码器(Encoder)处理过程详解 Transformer Encoder 是一个由 N 层(一般为 6 层)堆叠而成的模块结构。每一层的本质是两个核心子模块: 多头自注意力(Multi-Head Self-Attention…...
Flutter Drawer 详解
目录 一、引言 二、Drawer 的基本用法 三、主要属性 四、常见问题与解决方案 4.1 手势冲突处理 4.2 多级导航管理 4.3 响应式布局适配 五、最佳实践建议 5.1 性能优化 5.2 无障碍支持 5.3 跨平台适配 六、结论 相关推荐 一、引言 在移动应用开发中,侧边…...
游戏引擎学习第263天:添加调试帧滑块
运行游戏,开始今天的开发工作。 我们继续游戏代码基础上进行重构,目标是实现更多的性能分析界面功能,尤其是调试用的用户界面。 目前运行游戏并打开性能分析窗口后,发现界面功能上还有不少缺陷。现在的界面可以向下钻取查看具体…...
Hadoop客户端环境准备
hadoop集群我们配置好了,要与它进行交互,我们还需要准备hadoop的客户端。要分成两步:下载hadoop包、配置环境变量。 1. 找到资料包路径下的Windows依赖文件夹,拷贝hadoop-3.1.0到非中文路径(比如d:\hadoop-3.1.0&#…...
当“信任”遇上“安全”:如何用Curtain Logtrace记录文件操作活动 守护团队与数据的双重底线?
你是否也有过这样的担忧? 团队成员在处理敏感数据时是否遵守了公司规范? 某份被篡改或外泄的文档,到底发生了什么? 为了数据安全而频繁加密、限制下载,却反过来打击了员工的工作积极性…… 如何在不伤害团队信任的…...
如何进行室内VR全景拍摄?
如何进行室内VR全景拍摄? 室内VR全景拍摄作为先进的视觉技术,能够为用户提供沉浸式的空间体验。本文介绍如何进行室内VR全景拍摄,并阐述众趣科技在这一领域的技术支持和服务优势。 室内VR全景拍摄基础 1. 室内VR全景拍摄概述 室内VR全景拍…...
一文走进GpuGeek | conda常用命令
conda 常用命令 查看conda版本 conda --version 查看conda信息 conda info 更新conda自身到最新版本,同时也会更新其它包 conda update conda conda更新指定包,这里更新通过conda安装的zlib包 conda update zlib 列出所有虚拟环境 conda env li…...
Consumer Group的作用是什么?Rebalance的触发条件有哪些? (实现消费者负载均衡;消费者加入/离开、订阅Topic变化等)
好的,我现在需要回答用户关于Kafka Consumer Group和Rebalance的问题。首先,用户问的是Consumer Group的作用以及Rebalance的触发条件。根据之前的对话历史,用户已经了解了Kafka的基本组件、消息保留策略、顺序性保证等,现在的问题…...
【计算机视觉】OpenCV实战项目:Long-Exposure:基于深度学习的长时间曝光合成技术
Long-Exposure:基于深度学习的长时间曝光合成技术 项目概述与技术背景项目核心功能技术原理 环境配置与安装硬件要求建议详细安装步骤可选组件安装 实战应用指南1. 基础使用:视频转长曝光2. 高级模式:自定义光轨合成3. 批量处理模式 技术实现…...
CentOS 7 安装OpenJDK 17 JRE
CentOS 7 自带的java 版本为:java version "1.8.0_311", 有些软件的运行需要更高的java版本。CentOS 7 自带的默认仓库里 没有 OpenJDK 17,但是 Adoptium 项目(前身 AdoptOpenJDK)提供了稳定的 OpenJDK 17 版…...
C++从入门到实战(十三)C++函数模板与类模板初阶讲解
C从入门到实战(十三)C函数模板与类模板初阶讲解 前言一、为什么需要模板1. 函数重载的问题2. 泛型编程和模板的作用 二、函数模板2.1 函数模板格式2.2 函数模板的原理2.3 函数模板的实例化(1)隐式实例化:(2…...
CentOS服务器中如何解决内存泄漏问题?
内存泄漏并不是“爆炸性内存飙升”,而是程序申请了内存但没有释放,造成系统可用内存逐渐减少,直到用光。 表现形式: 系统空闲内存越来越少;swap频繁被占用;某些服务响应变慢甚至挂掉;重启服务后内存才释放。 内存泄漏的根源在哪…...
【Java项目脚手架系列】第三篇:Spring MVC基础项目脚手架
【Java项目脚手架系列】第三篇:Spring MVC基础项目脚手架 前言 在前面的文章中,我们介绍了Maven基础项目脚手架和JavaWeb基础项目脚手架。今天,我们将介绍Spring MVC项目脚手架,这是一个用于快速搭建Web应用的框架。 什么是Spr…...
chili3d调试笔记12 deepwiki viewport svg雪碧图 camera three.ts
xiangechen/chili3d | DeepWiki viewport阅读 🧠deep 我要把模型投影成dxf导出有什么办法 引用lookat 截图是如何实现的 明天接着搞 ---------------------------------------------------------------- 截图没什么用 搞个工程图模块可能才行 一个文件一行 忘…...
tinyrenderer笔记(Shader)
tinyrenderer个人代码仓库:tinyrenderer个人练习代码 前言 现在我们将所有的渲染代码都放在了 main.cpp 中,然而在 OpenGL 渲染管线中,渲染的核心逻辑是位于 shader 中的,下面是 OpenGL 的渲染管线: 蓝色是我们可以自…...
【奔跑吧!Linux 内核(第二版)】第1章:Linux 系统基础知识
笨叔 陈悦. 奔跑吧 Linux 内核(第2版) [M]. 北京: 人民邮电出版社, 2020. 文章目录 Linux 系统的发展历史Linux 发行版Red Hat LinuxDebian LinuxSuSE Linux优麒麟 Linux Linux 内核介绍宏内核和微内核Linux 内核概貌 Linux 系统的发展历史 Linux 系统诞…...
Spring + Shiro 整合的核心要点及详细实现说明
在 Spring 项目中集成 Apache Shiro 可以实现轻量级的安全控制(认证、授权、会话管理等)。以下是 Spring Shiro 整合的核心要点及详细实现说明: 一、Spring 与 Shiro 整合的核心组件 组件作用ShiroFilterFactoryBean创建 Shiro 过…...
已经写好论文的AI率降低
视频演示 https://www.bilibili.com/video/BV1v4VpzgEdc 提示词 你是我专门请来的“降维写作助手”,专门干一件事:把 AI 写得太“像 AI”的文字改得更像人写的。我们主要是处理论文、创作类内容,目标就是:不让检测工具一眼识破…...
AI教你学VUE——Deepseek版
一、基础阶段:打好Web开发基础 HTML/CSS基础 学习HTML标签语义化、CSS布局(Flex/Grid)、响应式设计(媒体查询、REM/VW单位)。资源推荐: MDN Web文档(免费):HTML | CSS实战…...
卷积神经网络基础(五)
6.3 Softmax-with-Loss 层 我们最后介绍输出层的softmax函数,之前我们知道softmax函数会将输入值正规化之后再输出。在手写数字识别的例子中,softmax层的输出如下: 输入图像通过Affi ne层和ReLU层进行转换,10个输入通过Softmax层…...
Go语言——string、数组、切片以及map
一、string、数组、切片代码 package mainimport "fmt"// 定义结构体 type student struct {id intname stringage intscore float32 }func main() {// 使用var声明切片var slice1 []intslice1 append(slice1, 1)slice1 append(slice1, 2)slice1 append(sl…...
线性回归有截距
In [ ]: ∑ i 1 m ( y i − x i T w ) 2 \sum _{i1}^{m}(y_{i}-x_{i}^{T}w)^{2} i1∑m(yi−xiTw)2 w ^ ( X T X ) − 1 X T y \hat {w}(X^{T}X)^{-1}X^{T}y w^(XTX)−1XTy In [ ]: 1 #如果有截距,求解时,需要梯度下降法求解w 和b …...
【基础】Python包管理工具uv使用全教程
一、uv简介 uv 是由 Astral(前身为 Basis)团队开发的 Python 包安装器和解析器,完全使用 Rust 语言编写。与传统 Python 工具不同,uv 将多个工具的功能整合到一个高性能的解决方案中,旨在提供更现代、更高效的 Python…...
事务(transaction)-上
事务概述 食物是一个最小的工作单元。在数据库当中,事务表示一件完整的事儿。一个业务的完成可能需要多条DML语句共同配合才能完成,例如转账业务,需要执行两条DML语句,先更新张三账户的余额,再更新李四账户的余额&…...
Python训练打卡Day17
无监督算法中的聚类 知识点 聚类的指标聚类常见算法:kmeans聚类、dbscan聚类、层次聚类三种算法对应的流程 实际在论文中聚类的策略不一定是针对所有特征,可以针对其中几个可以解释的特征进行聚类,得到聚类后的类别,这样后续进行解…...
【爬虫】码上爬第6题-倚天剑
堆栈入手: 全部复制的话,注意修改一些必要在地方: 通过s函数来获取请求头的加密参数 通过xxxxoooo来获取解密后的数据 js代码关键点: python代码我推荐使用这个网站: Convert curl commands to code 根据生成的代码…...
自定义SpringBoot Starter-笔记
SpringBoot Starter的介绍参考: Spring Boot Starter简介-笔记-CSDN博客。这里介绍如何自定义一个springBoot Starter。 1. 项目结构 创建一个 Maven 项目,结构如下: custom-spring-boot-starter-demo/ ├── custom-hello-jdk/ # jdk模…...
一周学会Pandas2 Python数据处理与分析-Pandas2数据类型转换操作
锋哥原创的Pandas2 Python数据处理与分析 视频教程: 2025版 Pandas2 Python数据处理与分析 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili Pandas 提供了灵活的方法来处理数据类型转换,以下是常见操作及代码示例: 1. 查看数据类型 …...
Java中常见的问题
1. SSO中的Cookie/Token生成与安全传递 生成Cookie/Token: Cookie:服务器通过Set-Cookie响应头生成,包含用户ID、过期时间等,需设置HttpOnly和Secure属性防止XSS和中间人攻击。Token(如JWT):使…...