当前位置: 首页 > news >正文

高级运维学习(八)Ceph 概述与部署

ceph概述

  • ceph可以实现的存储方式:

    • 块存储:提供像普通硬盘一样的存储,为使用者提供“硬盘”
    • 文件系统存储:类似于NFS的共享方式,为使用者提供共享文件夹
    • 对象存储:像百度云盘一样,需要使用单独的客户端
  • Ceph存储集群至少需要一个Ceph监视器、Ceph管理器和Ceph OSD(对象存储守护程序)。运行Ceph文件系统客户端时,需要Ceph元数据服务器。

    • 监视器:Ceph Monitor(ceph-mon)维护集群状态图,包括监视器图、管理器图、OSD图、MDS图和CRUSH图。这些映射是Ceph守护进程相互协调所需的关键集群状态。监视器还负责管理守护程序和客户端之间的身份验证。为了冗余和高可用性,通常至少需要三台Monitor。
    • 管理器:Ceph Manager(ceph-mgr)负责跟踪ceph集群的运行时指标和当前状态,包括存储利用率、当前性能指标和系统负载。Ceph Manager守护进程还托管基于python的模块来管理和公开Ceph集群信息,包括基于web的Ceph仪表板和REST API。高可用性通常需要至少两台Manager。
    • Ceph OSD:ceph-osd存储数据,处理数据复制、恢复、重新平衡,并通过检查其他Ceph OSD守护进程的心跳来为Ceph监视器和管理器提供一些监视信息。为了实现冗余和高可用性,通常至少需要三个Ceph OSD。
    • MDS:ceph-mds代表Ceph文件系统存储元数据(即,Ceph块设备和Ceph对象存储不使用MDS)。Ceph元数据服务器允许POSIX文件系统用户执行基本命令(如ls、find等)。)而不会给Ceph存储集群带来巨大的负担。
    • RGW:Rados Gateway,是一个提供对象存储功能的组件,可以通过RESTful接口向外部应用程序提供可扩展和高可用的存储服务。
  • Ceph将数据作为对象存储在逻辑存储池中。使用CRUSH算法,Ceph计算哪个归置组(PG)应该包含该对象,以及哪个OSD应该存储该归置组。CRUSH算法支持Ceph存储集群动态扩展、重新平衡和恢复。

  • 部署ceph集群需要python3、podman或docker、时间服务(如chrony)、lvm2

部署Ceph

节点准备

  • ceph1、ceph2、ceph3内存至少需要2GB
主机名IP地址
ceph1192.168.88.11/24
ceph2192.168.88.12/24
ceph3192.168.88.13/24
client1192.168.88.10/24

  • 关机,为ceph1-ceph3各额外再添加3块20GB的硬盘

cephadm

  • Cephadm使用容器和systemd安装和管理Ceph集群,并与CLI(命令行)和dashboard GUI紧密集成。

  • cephadm与新的编排API完全集成,并完全支持新的CLI和仪表板功能来管理集群部署。

  • cephadm需要容器支持(podman或docker)和Python 3。

  • cephadm是一个用于管理Ceph集群的实用程序。可以使用它:

    • 将Ceph容器添加到集群中
    • 从群集中删除一个Ceph容器
    • 更新Ceph容器

准备基础环境

  • 在pubserver上配置ansible环境
[root@pubserver ~]# mkdir ceph
[root@pubserver ~]# cd ceph
[root@pubserver ceph]# vim ansible.cfg 
[defaults]
inventory = inventory
host_key_checking = false[root@pubserver ceph]# vim inventory 
[ceph]    # 定义ceph组
ceph1 ansible_host=192.168.88.11
ceph2 ansible_host=192.168.88.12
ceph3 ansible_host=192.168.88.13[clients]  # 定义客户端组
client1 ansible_host=192.168.88.10[all:vars]
ansible_ssh_user=root
ansible_ssh_pass=a[root@pubserver ceph]# mkdir files/
[root@pubserver ceph]# vim files/local88.repo 
[BaseOS]
name = BaseOS
baseurl = ftp://192.168.88.240/dvd/BaseOS
enabled = 1
gpgcheck = 0[AppStream]
name = AppStream
baseurl = ftp://192.168.88.240/dvd/AppStream
enabled = 1
gpgcheck = 0[rpms]
name = rpms
baseurl = ftp://192.168.88.240/rpms
enabled = 1
gpgcheck = 0# 配置yum
[root@pubserver ceph]# vim 01-upload-repo.yml 
---
- name: config repos.dhosts: alltasks:- name: delete repos.dfile:path: /etc/yum.repos.dstate: absent- name: create repos.dfile:path: /etc/yum.repos.dstate: directorymode: '0755'- name: upload local88copy:src: files/local88.repodest: /etc/yum.repos.d/
[root@pubserver ceph]# ansible-playbook 01-upload-repo.yml 
  • 配置名称解析
# 配置三台主机实现名称解析,解析的名字务必与主机实际名字一致
[root@pubserver ceph]# vim 02-modify-hosts.yml 
---
- name: add nameshosts: cephtasks:- name: add blockblockinfile:   # 类似于lineinfile模块,可在目标文件中加多行path: /etc/hostsblock: |192.168.88.11 ceph1192.168.88.12 ceph2192.168.88.13 ceph3192.168.88.240 quay.io
[root@pubserver ceph]# ansible-playbook 02-modify-hosts.yml 
# 查看结果,以ceph1为例
[root@ceph1 ~]# tail -6 /etc/hosts
# BEGIN ANSIBLE MANAGED BLOCK
192.168.88.11 ceph1
192.168.88.12 ceph2
192.168.88.13 ceph3
192.168.88.240 quay.io
# END ANSIBLE MANAGED BLOCK
  • 配置pubserver为NTP服务器
# 1. 查看pubserver自己的时区,如果时区不正确需要改正
[root@pubserver ~]# timedatectl 
[root@pubserver ~]# timedatectl set-timezone Asia/Shanghai
# 2. 查看时间,如果时间不正确,需要调整时间
[root@pubserver ~]# date
[root@pubserver ~]# date -s "年-月-日 时:分:秒"
# 3. 配置chronyd服务
[root@pubserver ~]# yum install -y chrony
[root@pubserver ~]# vim /etc/chrony.conf  # 打开23、26行的注释
...略...24 # Allow NTP client access from local network.25 allow 192.168.0.0/16  # 为192.168开头的客户端提供时间服务26 27 # Serve time even if not synchronized to a time source.28 local stratum 10   # 即使自己没有时间源,也为客户端提供时间服务
...略...
[root@pubserver ~]# systemctl enable chronyd --now
[root@pubserver ~]# ss -ulnp | grep :123  # ntp使用udp 123端口
  • 配置ceph1-ceph3使用pubserver提供的时间服务
[root@pubserver ceph]# vim 03-config-ntp.yml
---
- name: config ntphosts: cephtasks:- name: install chrony   # 安装chronyyum:name: chronystate: present- name: modify config    # 替换以pool开头的行lineinfile:path: /etc/chrony.confregexp: '^pool'line: "pool 192.168.88.240 iburst"notify: restart ntp    # 如果该任务的状态是CHANGED,则执行restart ntp任务handlers:- name: restart ntp   # 只有notify通知时,才执行重启任务service:name: chronydstate: restartedenabled: yes
[root@pubserver ceph]# ansible-playbook 03-config-ntp.yml# 以ceph1为例,查看结果
[root@ceph1 ~]# chronyc sources -v.-- Source mode  '^' = server, '=' = peer, '#' = local clock./ .- Source state '*' = current best, '+' = combined, '-' = not combined,
| /             'x' = may be in error, '~' = too variable, '?' = unusable.
||                                                 .- xxxx [ yyyy ] +/- zzzz
||      Reachability register (octal) -.           |  xxxx = adjusted offset,
||      Log2(Polling interval) --.      |          |  yyyy = measured offset,
||                                \     |          |  zzzz = estimated error.
||                                 |    |           \
MS Name/IP address         Stratum Poll Reach LastRx Last sample               
===============================================================================
^* 192.168.88.240               10   6    37     4  -8731ns[-6313us] +/- 7118us
  • 准备容器仓库服务器
# 1. 将真机/linux-soft/s2/zzg/ceph_soft/ceph-server/docker-distribution-2.6.2-2.git48294d9.el7.x86_64.rpm拷贝到pubserver的/root目录并安装
[root@pubserver ~]# yum install -y docker-distribution-2.6.2-2.git48294d9.el7.x86_64.rpm
# 2. 启动服务
[root@pubserver ~]# systemctl enable docker-distribution --now
  • 安装软件包,并导入镜像
# 1. 在ceph集群节点上安装软件包
[root@pubserver ceph]# vim 04-install-ceph.yml
---
- name: install pkghosts: cephtasks:- name: install pkg    # 安装软件包yum:name: python39,podman,lvm2state: present
[root@pubserver ceph]# ansible-playbook 04-install-ceph.yml # 2. 将真机/linux-soft/s2/zzg/ceph_soft/ceph-server目录拷贝到ceph各节点,并导入镜像
[root@ceph1 ~]# cd ceph-server/
[root@ceph1 ceph-server]# for c in *.tar
> do
> podman load -i $c
> done
[root@ceph2 ~]# cd ceph_soft/
[root@ceph2 ceph-server]# for c in *.tar
> do
> podman load -i $c
> done
[root@ceph3 ~]# cd ceph_soft/
[root@ceph3 ceph-server]# for c in *.tar
> do
> podman load -i $c
> done# 3. 查看执行结果
[root@ceph1 ceph-server]# podman images
REPOSITORY                        TAG         IMAGE ID      CREATED        SIZE
quay.io/ceph/ceph                 v17         cc65afd6173a  7 weeks ago    1.4 GB
quay.io/ceph/ceph-grafana         8.3.5       dad864ee21e9  8 months ago   571 MB
quay.io/prometheus/prometheus     v2.33.4     514e6a882f6e  9 months ago   205 MB
quay.io/prometheus/node-exporter  v1.3.1      1dbe0e931976  12 months ago  22.3 MB
quay.io/prometheus/alertmanager   v0.23.0     ba2b418f427c  15 months ago  58.9 MB# 4. 配置ceph1-ceph3使用pubserver作为仓库服务器
[root@pubserver ceph]# vim 05-config-registry.yml
---
- name: config registryhosts: cephtasks:- name: modify configblockinfile:path: /etc/containers/registries.confblock: |[[registry]]location = "quay.io:5000"  # 指定服务器地址insecure = true              # 允许使用http协议
[root@pubserver ceph]# ansible-playbook 05-config-registry.yml # 5. 以ceph1为例,查看执行结果
[root@ceph1 ceph_soft]# tail -5 /etc/containers/registries.conf
# BEGIN ANSIBLE MANAGED BLOCK
[[registry]]
location = "quay.io:5000"
insecure = true
# END ANSIBLE MANAGED BLOCK# 5. 修改镜像名称,以便可以将其推送到自建镜像服务器
[root@ceph1 ceph-server]# podman tag quay.io/ceph/ceph:v17 quay.io:5000/ceph/ceph:v17
[root@ceph1 ceph-server]# podman tag quay.io/ceph/ceph-grafana:8.3.5 quay.io:5000/ceph/ceph-grafana:8.3.5
[root@ceph1 ceph-server]# podman tag quay.io/prometheus/prometheus:v2.33.4 quay.io:5000/prometheus/prometheus:v2.33.4
[root@ceph1 ceph-server]# podman tag quay.io/prometheus/node-exporter:v1.3.1 quay.io:5000/prometheus/node-exporter:v1.3.1
[root@ceph1 ceph-server]# podman tag quay.io/prometheus/alertmanager:v0.23.0 quay.io:5000/prometheus/alertmanager:v0.23.0# 6. 将镜像推送到镜像服务器,以便其他节点可以通过服务器下载镜像
[root@ceph1 ceph-server]# podman push quay.io:5000/ceph/ceph:v17
[root@ceph1 ceph-server]# podman push quay.io:5000/ceph/ceph-grafana:8.3.5 
[root@ceph1 ceph-server]# podman push quay.io:5000/prometheus/prometheus:v2.33.4 
[root@ceph1 ceph-server]# podman push quay.io:5000/prometheus/node-exporter:v1.3.1 
[root@ceph1 ceph-server]# podman push quay.io:5000/prometheus/alertmanager:v0.23.0 
  • 完成此步骤,给ceph1-ceph3打快照

安装ceph

  • 所有Ceph集群都需要至少一个监视器Monitor,以及至少与存储在集群上的对象副本一样多的OSD。引导初始监视器是部署Ceph存储集群的第一步。
  • Monitor部署还为整个集群设置了重要的标准,例如池的副本数量、每个OSD的放置组数量、心跳间隔、是否需要身份验证等。这些值中的大部分是默认设置的。
  • 创建集群
# 1. 在ceph1上初始化集ceph集群。
# 集群初始化完成后,将自动生成ssh免密密钥,存放在/etc/ceph/目录下
[root@ceph1 ceph-server]# ./cephadm bootstrap --mon-ip 192.168.88.11 --initial-dashboard-password=123456 --dashboard-password-noupdate
# 2. ceph将会以容器化的方式部署,查看生成了6个容器。
[root@ceph1 ceph-server]# podman ps# 3. 拷贝密钥文件至其他节点
[root@ceph1 ceph-server]# ssh-copy-id -f -i /etc/ceph/ceph.pub ceph2
[root@ceph1 ceph-server]# ssh-copy-id -f -i /etc/ceph/ceph.pub ceph3# 4. 进入管理容器,查看ceph状态
[root@ceph1 ceph-server]# ./cephadm shell   # 进入管理容器
[ceph: root@ceph1 /]# ceph -s  # 查看ceph状态cluster:id:     1ddfccf2-77b4-11ed-8941-000c2953b002health: HEALTH_WARNOSD count 0 < osd_pool_default_size 3services:mon: 1 daemons, quorum ceph1 (age 11m)mgr: ceph1.vnoivz(active, since 10m)osd: 0 osds: 0 up, 0 indata:pools:   0 pools, 0 pgsobjects: 0 objects, 0 Busage:   0 B used, 0 B / 0 B availpgs: # 5. 查看相关容器状态,显示所有容器均已启动
[ceph: root@ceph1 /]# ceph orch ls
NAME           PORTS        RUNNING  REFRESHED  AGE  PLACEMENT  
alertmanager   ?:9093,9094      1/1  91s ago    3m   count:1    
crash                           1/3  91s ago    4m   *          
grafana        ?:3000           1/1  91s ago    4m   count:1    
mgr                             1/2  91s ago    4m   count:2    
mon                             1/5  91s ago    4m   count:5    
node-exporter  ?:9100           1/3  91s ago    4m   *          
prometheus     ?:9095           1/1  91s ago    4m   count:1 # 6. 查看集群中现有主机
[ceph: root@ceph1 /]# ceph orch host ls
HOST   ADDR           LABELS  STATUS  
ceph1  192.168.88.11  _admin          
1 hosts in cluster# 7. 向集群中添加其他主机
[ceph: root@ceph1 /]# ceph orch host add ceph2 192.168.88.12
[ceph: root@ceph1 /]# ceph orch host add ceph3 192.168.88.13
# 注:删除错误的主机命令为:ceph orch host rm 主机名 --force# 8. 查看集群中主机
[ceph: root@ceph1 /]# ceph orch host ls
HOST   ADDR           LABELS  STATUS  
ceph1  192.168.88.11  _admin          
ceph2  192.168.88.12                  
ceph3  192.168.88.13                  
3 hosts in cluster# 9. 扩容MON节点。一共有3台MON,位于ceph1-ceph3
[ceph: root@ceph1 /]# ceph orch apply mon --placement="3 ceph1 ceph2 ceph3" # 10. 查看mon状态
[ceph: root@ceph1 /]# ceph -scluster:id:     a4b69ab4-79dd-11ed-ae7b-000c2953b002health: HEALTH_WARNOSD count 0 < osd_pool_default_size 3services:mon: 3 daemons, quorum ceph1,ceph3,ceph2 (age 2m)mgr: ceph1.gmqorm(active, since 15m), standbys: ceph3.giqaphosd: 0 osds: 0 up, 0 indata:pools:   0 pools, 0 pgsobjects: 0 objects, 0 Busage:   0 B used, 0 B / 0 B availpgs:     [ceph: root@ceph1 /]# ceph mon stat
e3: 3 mons at {ceph1=[v2:192.168.88.11:3300/0,v1:192.168.88.11:6789/0],ceph2=[v2:192.168.88.12:3300/0,v1:192.168.88.12:6789/0],ceph3=[v2:192.168.88.13:3300/0,v1:192.168.88.13:6789/0]}, election epoch 14, leader 0 ceph1, quorum 0,1,2 ceph1,ceph3,ceph2# 11. ceph2和ceph3上也将会出现相关容器
[root@ceph2 ~]# podman ps
[root@ceph3 ~]# podman ps
  • 添加OSD硬盘
[ceph: root@ceph1 /]# ceph orch daemon add osd ceph1:/dev/vdb
[ceph: root@ceph1 /]# ceph orch daemon add osd ceph1:/dev/vdc
[ceph: root@ceph1 /]# ceph orch daemon add osd ceph1:/dev/vdd
[ceph: root@ceph1 /]# ceph orch daemon add osd ceph2:/dev/vdb
[ceph: root@ceph1 /]# ceph orch daemon add osd ceph2:/dev/vdc
[ceph: root@ceph1 /]# ceph orch daemon add osd ceph2:/dev/vdd
[ceph: root@ceph1 /]# ceph orch daemon add osd ceph3:/dev/vdb
[ceph: root@ceph1 /]# ceph orch daemon add osd ceph3:/dev/vdc
[ceph: root@ceph1 /]# ceph orch daemon add osd ceph3:/dev/vdd# 2. 在节点上查询容器信息,将会发现又有新的osd容器出现
[root@ceph1 ~]# podman ps# 3. 此时ceph的状态将会是HEALTH_OK,ceph集群搭建完成。
[ceph: root@ceph1 /]# ceph -scluster:id:     a4b69ab4-79dd-11ed-ae7b-000c2953b002health: HEALTH_OKservices:mon: 3 daemons, quorum ceph1,ceph3,ceph2 (age 2m)mgr: ceph1.gmqorm(active, since 2h), standbys: ceph3.giqaphosd: 9 osds: 9 up (since 35s), 9 in (since 59s)data:pools:   1 pools, 1 pgsobjects: 2 objects, 449 KiBusage:   186 MiB used, 180 GiB / 180 GiB availpgs:     1 active+clean

故障排除:

查看服务状态:

[ceph: root@ceph1 /]# ceph orch ps

如果有error(比如node-exporter.ceph2),则把相应的服务删除:

[ceph: root@ceph1 /]# ceph orch daemon rm node-expoter.ceph2

然后重新配置:

[ceph: root@ceph1 /]# ceph orch daemon reconfig node-exporter.ceph2
# 或
[ceph: root@ceph1 /]# ceph orch daemon redeploy node-exporter.ceph2

如果是mgr这样的服务出故障,删除后,部署的命令是:

[ceph: root@ceph1 /]# ceph orch daemon reconfig mgr ceph2
# 或
[ceph: root@ceph1 /]# ceph orch daemon redeploy mgr ceph2

相关文章:

高级运维学习(八)Ceph 概述与部署

ceph概述 ceph可以实现的存储方式&#xff1a; 块存储&#xff1a;提供像普通硬盘一样的存储&#xff0c;为使用者提供“硬盘”文件系统存储&#xff1a;类似于NFS的共享方式&#xff0c;为使用者提供共享文件夹对象存储&#xff1a;像百度云盘一样&#xff0c;需要使用单独的客…...

【图像处理】VS编译opencv源码,并调用编译生成的库

背景 有些时候我们需要修改opencv相关源码&#xff0c; 这里介绍怎么编译修改并调用修改后的库文件。 步骤 1、下载相关源码工具&#xff1a; 下载opencv4.8源码并解压 https://down.chinaz.com/soft/40730.htm 下载VS2019&#xff0c;社区版免费 https://visualstudio.micro…...

STM32 EtherCAT 总线型(1 拖 4)步进电机解决方案

第 1 章 概述  技术特点  支持标准 100M/s 带宽全双工 EtherCAT 总线网络接口及 CoE 通信协议一 进一出&#xff08;RJ45 接口&#xff09;&#xff0c;支持多组动态 PDO 分组和对象字典的自动映射&#xff0c;支持站 号 ID 的自动设置与保存&#xff0c;支持 SDO 的…...

Postman应用——测试脚本Test Script

文章目录 Test Script脚本CollectionFolderRequest 解析响应体断言测试 测试脚本可以在Collection、Folder和Request的Pre-request script 和 Test script中编写&#xff0c;测试脚本可以检测请求响应的各个方面&#xff0c;包括正文、状态代码、头、cookie、响应时间等&#x…...

JS的网络状态以及强网弱网详解

文章目录 1. online 和 offline 事件2. navigator.onLine2.1 什么是 navigator.connection&#xff1f;2.2 如何使用 navigator.connection&#xff1f;2.3 总结 1. online 和 offline 事件 online 和 offline 事件是浏览器自带的两个事件&#xff0c;可以通过添加事件监听器来…...

大数据-kafka学习笔记

Kafka Kafka 是一个分布式的基于发布/订阅模式的消息队列&#xff08;Message Queue&#xff09;&#xff0c;主要应用于大数据实时处理领域。 Kafka可以用作Flink应用程序的数据源。Flink可以轻松地从一个或多个Kafka主题中消费数据流。这意味着您可以使用Kafka来捕获和传输…...

详述RPA项目管理流程,RPA项目管理流程是什么?

RPA&#xff08;Robotic Process Automation&#xff0c;机器人流程自动化&#xff09;是一种通过软件机器人模拟人类在计算机上执行重复性任务的技术。RPA可以帮助企业提高工作效率、降低成本、减少错误并提高客户满意度。然而&#xff0c;为了确保RPA项目的成功实施&#xff…...

爬虫 — Js 逆向

目录 一、概念1、爬虫2、反爬虫3、加密解密4、加密5、步骤 二、常用加密方式1、加密方式2、常见加密算法3、JS 中常见的算法4、MD5 算法4.1、MD5 加密网站4.2、特点 5、DES/AES 算法6、RSA 算法7、base64 算法 三、环境配置1、node.js 环境配置2、PyCharm 环境配置 一、概念 1…...

Python 网络爬取的时候使用那种框架

尽管现代的网站多采取前后端分离的方式进行开发了&#xff0c;但是对直接 API 的调用我们通常会有 token 的限制和可以调用频率的限制。 因此&#xff0c;在一些特定的网站上&#xff0c;我们可能还是需要使用网络爬虫的方式获得已经返回的 JSON 数据结构&#xff0c;甚至是处理…...

CentOS7安装源设置

此处的安装源地址需要填写&#xff1a;&#xff08;适用于centos7&#xff09; http://mirrors.aliyun.com/centos/7/os/x86_64/...

pool = multiprocessing.Pool()报错:module object has no attribute Pool

pool multiprocessing.Pool()报错&#xff1a;module object has no attribute Pool&#xff0c;为什么&#xff1f; 我很抱歉&#xff0c;前面提供的回答是错误的。在Python的multiprocessing模块中&#xff0c;确实有一个名为Pool的类。如果你在使用multiprocessing.Pool()…...

Linux Shell 实现一键部署podman

podman 介绍 使用 Podman 管理容器、Pod 和映像。从本地环境中无缝使用容器和 Kubernetes&#xff0c;Podman 提供与 Docker 非常相似的功能&#xff0c;它不需要在你的系统上运行任何守护进程&#xff0c;并且它也可以在没有 root 权限的情况下运行。 Podman 可以管理和运行…...

Biome-BGC生态系统模型与Python融合技术

Biome-BGC是利用站点描述数据、气象数据和植被生理生态参数&#xff0c;模拟日尺度碳、水和氮通量的有效模型&#xff0c;其研究的空间尺度可以从点尺度扩展到陆地生态系统。 在Biome-BGC模型中&#xff0c;对于碳的生物量积累&#xff0c;采用光合酶促反应机理模型计算出每天…...

Matlab图像处理-区域描述

一旦一幅图像的目标区域被确定&#xff0c;我们往往用一套描述子来表示其特性。选择区域描述子的动机不单纯为了减少在区域中原始数据的数量&#xff0c;而且也应有利于区别带有不同特性的区域。因此&#xff0c;当目标区域有大小、旋转、平移等方面的变化时&#xff0c;针对这…...

openGauss学习笔记-69 openGauss 数据库管理-创建和管理普通表-更新表中数据

文章目录 openGauss学习笔记-69 openGauss 数据库管理-创建和管理普通表-更新表中数据 openGauss学习笔记-69 openGauss 数据库管理-创建和管理普通表-更新表中数据 修改已经存储在数据库中数据的行为叫做更新。用户可以更新单独一行、所有行或者指定的部分行。还可以独立更新…...

Flink RowData 与 Row 相互转化工具类

RowData与Row区别 &#xff08;0&#xff09;都代表了一条记录。都可以设置RowKind&#xff0c;和列数量Aritry。 &#xff08;1&#xff09;RowData 属于Table API&#xff0c;而Row属于Stream API &#xff08;2&#xff09;RowData 属于Table内部接口&#xff0c;对用户不友…...

企业架构LNMP学习笔记48

数据结构类型操作&#xff1a; 数据结构&#xff1a;存储数据的方式 数据类型 算法&#xff1a;取数据的方式&#xff0c;代码就把数据进行组合&#xff0c;计算、存储、取出。 排序算法&#xff1a;冒泡排序、堆排序 二分。 key&#xff1a; key的命名规则不同于一般语言…...

docker部署neo4j

拉取镜像 docker pull neo4j:3.5.35-community查看镜像 [rootlocalhost data]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE neo4j 3.5.35-community 3548ff943256 13 months ago 446MB创建容器并运行 docker run -d …...

融云观察:AI Agent 是不是游戏赛道的下一个「赛点」?

本周四 融云直播间&#xff0c;点击报名~ ChatGPT 的出现&#xff0c;不仅让会话成为了未来商业的基本形态&#xff0c;也把大家谈论 AI 的语境从科技产业转向了 AI 与全产业的整合。 关注【融云全球互联网通信云】了解更多 而目前最热衷于拥抱生成式 AI 的行业中&#xff0c…...

运用谷歌浏览器的开发者工具,模拟搜索引擎蜘蛛抓取网页

第一步&#xff1a;按压键盘上的F12键打开开发这工具&#xff0c;并点击右上角三个小黑点 第二步&#xff1a;选择More tools 第三步&#xff1a;选择Network conditions 第四步&#xff1a;找到User agent一列&#xff0c;取消复选框的勾选 第五步&#xff1a;选择谷歌爬虫…...

明日方舟MAA助手:解放双手的终极自动化游戏伴侣

明日方舟MAA助手&#xff1a;解放双手的终极自动化游戏伴侣 【免费下载链接】MaaAssistantArknights 《明日方舟》小助手&#xff0c;全日常一键长草&#xff01;| A one-click tool for the daily tasks of Arknights, supporting all clients. 项目地址: https://gitcode.c…...

从SENet到ECA-CBAM:图解注意力机制的轻量化演进与落地避坑指南

从SENet到ECA-CBAM&#xff1a;图解注意力机制的轻量化演进与落地避坑指南 在计算机视觉领域&#xff0c;注意力机制已经成为提升卷积神经网络性能的关键组件。从早期的SENet到后来的CBAM、ECANet&#xff0c;研究者们不断探索如何在保持模型轻量化的同时&#xff0c;最大化注意…...

TexTeller公式识别技术深度剖析:从8000万数据训练到生产级部署

TexTeller公式识别技术深度剖析&#xff1a;从8000万数据训练到生产级部署 【免费下载链接】TexTeller TexTeller can convert image to latex formulas (image2latex, latex OCR) with higher accuracy and exhibits superior generalization ability, enabling it to cover m…...

【Android 组件】使用 XML 传统方式实现 Navigation 导航功能

一、概述 导航是指允许用户跨越、进入和退出应用中不同内容片段的交互。Android Jetpack 的 Navigation 组件是官方推荐的页面导航和转场解决方案,能帮你轻松处理 Fragment 之间的切换、返回栈管理,支持底部导航栏和动画。 1、主要概念 NavHostFragment(导航宿主):包含当…...

割草机器人行业市场分析报告【5】- 政策、标准与合规环境

第5章:政策、标准与合规环境 5.1 各国环保政策、燃油设备禁令时间表 环保政策与燃油禁令是驱动割草机器人需求的结构性力量,其影响力正在加速显现。...

彻底掌握GBT7714参考文献样式:会议论文格式定制完全指南

彻底掌握GBT7714参考文献样式&#xff1a;会议论文格式定制完全指南 【免费下载链接】gbt7714-bibtex-style BibTeX styles for Chinese National Standard GB/T 7714 项目地址: https://gitcode.com/gh_mirrors/gb/gbt7714-bibtex-style 在学术写作领域&#xff0c;参考…...

别再死记硬背了!用CAPL脚本在CANoe里实现这5个自动化测试场景,效率翻倍

别再死记硬背了&#xff01;用CAPL脚本在CANoe里实现这5个自动化测试场景&#xff0c;效率翻倍 刚接触Vector工具链的工程师常陷入一个误区&#xff1a;把大量时间花在记忆CAPL函数语法上&#xff0c;却不知道如何将这些知识转化为实际测试能力。我曾见过团队成员反复查阅手册却…...

OpenCode Telegram Bot:打造本地化AI编码伴侣,实现远程异步开发

1. 项目概述&#xff1a;一个本地化的AI编码伴侣 如果你和我一样&#xff0c;经常在命令行里用 opencode 这个AI编码工具&#xff0c;那你肯定遇到过这样的场景&#xff1a;正坐在沙发上用手机刷着消息&#xff0c;突然灵光一现&#xff0c;想到一个代码优化点或者一个需要调…...

GoPro视频GPS数据终极提取指南:三分钟搞定轨迹可视化

GoPro视频GPS数据终极提取指南&#xff1a;三分钟搞定轨迹可视化 【免费下载链接】gopro2gpx Parse the gpmd stream for GOPRO moov track (MP4) and extract the GPS info into a GPX (and kml) file. 项目地址: https://gitcode.com/gh_mirrors/go/gopro2gpx 还在为G…...

卫星通信物联网:如何构建全球覆盖的数据传输网络终极指南

卫星通信物联网&#xff1a;如何构建全球覆盖的数据传输网络终极指南 【免费下载链接】InterviewGuide &#x1f525;&#x1f525;「InterviewGuide」是阿秀从校园->职场多年计算机自学过程的记录以及学弟学妹们计算机校招&秋招经验总结文章的汇总&#xff0c;包括但不…...