GreenPlum分布式集群部署实战

news2024/11/21 0:26:38

📢📢📢📣📣📣
哈喽!大家好,我是【IT邦德】,江湖人称jeames007,10余年DBA及大数据工作经验
一位上进心十足的【大数据领域博主】!😜😜😜
中国DBA联盟(ACDU)成员,目前服务于工业互联网
擅长主流Oracle、MySQL、PG、高斯及Greenplum运维开发,备份恢复,安装迁移,性能优化、故障应急处理等。
✨ 如果有对【数据库】感兴趣的【小可爱】,欢迎关注【IT邦德】💞💞💞
❤️❤️❤️感谢各位大可爱小可爱!❤️❤️❤️

文章目录

  • 前言
    • 📣 1.环境准备
      • ✨ 1.1 安装包下载
      • ✨ 1.2 IP及实例规划
      • ✨ 1.3 操作系统
    • 📣 2.安装前准备
      • ✨ 2.1 hostname设置
      • ✨ 2.2./etc/hosts
      • ✨ 2.3 创建用户
      • ✨ 2.4 host文件创建
      • ✨ 2.5 配置互信
      • ✨ 2.6 关闭防火墙
      • ✨ 2.7 禁用selinux
    • 📣 3.安装GP
      • ✨ 3.1 安装依赖
      • ✨ 3.2 安装rpm包
      • ✨ 3.3 目录创建
      • ✨ 3.4 数据库初始化
    • 📣 4.GP集群验证
    • 📣 5.集群管理命令

前言

Greenplum是一个面向数据仓库应用的分布式关系型数据库,本文介绍了整个分布式集群部署的过程。

📣 1.环境准备

✨ 1.1 安装包下载

1.Greenplum 的 GitHub
https://github.com/greenplum-db/gpdb/releases
2.Pivotal公司官网
https://network.pivotal.io/products/vmware-greenplum

✨ 1.2 IP及实例规划

IP主机名端口备注
192.168.6.12mdw15432Master host
192.168.6.13mdw25432Standby host
192.168.6.14sdw1主:6000-6001
镜像:7000-7001
segment host1,配置2个主实例+2个镜像实例
192.168.6.15sdw2主:6000-6001
镜像:7000-7001
segment host2,配置2个主实例+2个镜像实例

在这里插入图片描述

✨ 1.3 操作系统

[root@jeames ~]# cat /etc/centos-release
CentOS Linux release 7.6.1810 (Core)
[root@jeames ~]# free -m
total used free shared buff/cache available
Mem: 3771 159 3407 11 204 3365
Swap: 3967 0 3967

📣 2.安装前准备

✨ 2.1 hostname设置

1个master+1个standby master,2个segment的集群示例,OS均为CentOS 7.6.1810
–设置host名,4个节点设置
hostnamectl set-hostname mdw1
hostnamectl set-hostname mdw2
hostnamectl set-hostname sdw1
hostnamectl set-hostname sdw2

✨ 2.2./etc/hosts

在Greenplum中,习惯将Master机器叫做mdw,将Segment机器叫做sdw,dw的含义为Data Warehouse。
注意:4个节点设置一致
cat >> /etc/hosts <<“EOF”
192.168.6.12 mdw1
192.168.6.13 mdw2
192.168.6.14 sdw1
192.168.6.15 sdw2
EOF

✨ 2.3 创建用户

groupadd -g 1530 gpadmin
useradd -g 1530 -u 1530 -m -d /home/gpadmin -s /bin/bash gpadmin
chown -R gpadmin:gpadmin /home/gpadmin
echo “gpadmin:jeames” | chpasswd

✨ 2.4 host文件创建

1.为所有节点创建一个all_hosts文件,包含所有节点主机名
su - gpadmin
mkdir -p /home/gpadmin/conf/
cat > /home/gpadmin/conf/all_hosts <<“EOF”
mdw1
mdw2
sdw1
sdw2
EOF
2.为所有节点创建一个seg_hosts文件 ,包含所有的Segment Host的主机名
su - gpadmin
cat > /home/gpadmin/conf/seg_hosts <<“EOF”
sdw1
sdw2
EOF

✨ 2.5 配置互信

集群ssh免密,做互信的配置,只在master节点 192.168.6.12 操作
1.生成秘钥对
ssh-keygen -t rsa
2.分发公钥
su - gpadmin
ssh-copy-id gpadmin@mdw1
ssh-copy-id gpadmin@mdw2
ssh-copy-id gpadmin@sdw1
ssh-copy-id gpadmin@sdw2

✨ 2.6 关闭防火墙

每个节点机器 root 用户操作
systemctl status firewalld
systemctl stop firewalld
systemctl disable firewalld

✨ 2.7 禁用selinux

cat /etc/selinux/config

# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
#     enforcing - SELinux security policy is enforced.
#     permissive - SELinux prints warnings instead of enforcing.
#     disabled - No SELinux policy is loaded.
SELINUX=enforcing
# SELINUXTYPE= can take one of three values:
#     targeted - Targeted processes are protected,
#     minimum - Modification of targeted policy. Only selected processes are protected.
#     mls - Multi Level Security protection.
SELINUXTYPE=targeted

sed -i "s#^SELINUX=.*#SELINUX=disabled#g"  /etc/selinux/config
注意:修改后记得重启

📣 3.安装GP

✨ 3.1 安装依赖

##安装依赖包
yum install net-tools -y
yum install libcgroup-tools -y

yum install -y apr apr-util bash bzip2 curl krb5 libcurl libevent libxml2 libyaml \
zlib openldap openssh openssl openssl-libs perl readline rsync R sed tar zip krb5-devel

✨ 3.2 安装rpm包

## 在所有节点操作,root用户操作

1.默认安装到/usr/local下
rpm -ivh open-source-greenplum-db-6.24.3-rhel7-x86_64.rpm

2.赋权,修改该路径gpadmin操作权限
chown -R gpadmin:gpadmin /usr/local/greenplum*

✨ 3.3 目录创建

##创建目录,用作集群数据的存储目录,所有节点操作
mkdir -p /greenplum/data/
chown -R gpadmin:gpadmin /greenplum


-- 所有节点
echo ". /usr/local/greenplum-db/greenplum_path.sh" >> /home/gpadmin/.bashrc

-- master配置
echo "export MASTER_DATA_DIRECTORY=/greenplum/data/master/gpseg-1" >> /home/gpadmin/.bashrc
echo "export PGDATABASE=postgres" >> /home/gpadmin/.bashrc

# 使配置文件生效
source /home/gpadmin/.bashrc

✨ 3.4 数据库初始化

在master节点操作:创建一个初始化副本 initgp_config,修改参数:

-- 在所有节点操作(在master节点创建master目录,在segment节点分布创建primary目录和mirror目录) 或 3个目录创建都可以
su - gpadmin

-- master节点,Standby节点
mkdir -p /greenplum/data/master

-- segment节点
mkdir -p /greenplum/data/primary
mkdir -p /greenplum/data/mirror


-- master节点配置,有几个segment节点就设置几个DATA_DIRECTORY
cat > /home/gpadmin/conf/initgp_config <<"EOF"
#指定primary segment的数据目录,多个目录表示一台机器有多个segment
declare -a DATA_DIRECTORY=(/greenplum/data/primary /greenplum/data/primary)
# mirror的数据目录,和主数据一样,一个对一个,多个对多个
declare -a MIRROR_DATA_DIRECTORY=(/greenplum/data/mirror /greenplum/data/mirror)
#数据库代号
ARRAY_NAME="rptgp"
#segment前缀
SEG_PREFIX=gpseg
#primary segment 起始的端口号
PORT_BASE=6000
MIRROR_PORT_BASE=7000
MASTER_PORT=5432
MASTER_HOSTNAME=mdw1
MASTER_DIRECTORY=/greenplum/data/master
DATABASE_NAME=rptgpdb
MACHINE_LIST_FILE=/home/gpadmin/conf/seg_hosts
EOF


--在master节点操作,执行初始化命令
su - gpadmin
gpinitsystem -c /home/gpadmin/conf/initgp_config -e=jeames -s mdw2 -P 5432 -S /greenplum/data/master/gpseg-1 -m 200 -b 256MB

📣 4.GP集群验证

若初始化成功,则GP自动启动,可以看到master节点上的5432已经在listen了,psql进入数据库,开始greenplum之旅。

[gpadmin@mdw1 ~]$ netstat -tulnp | grep 5432
(Not all processes could be identified, non-owned process info
 will not be shown, you would have to be root to see it all.)
tcp        0      0 0.0.0.0:5432            0.0.0.0:*               LISTEN      58954/postgres
tcp6       0      0 :::5432                 :::*                    LISTEN      58954/postgres


[gpadmin@mdw1 ~]$ psql postgres -c 'SELECT * FROM pg_stat_replication;'
  pid  | usesysid | usename | application_name | client_addr  | client_hostname | client_port |         backend_start         | backend_xmin |   state
 | sent_location | write_location | flush_location | replay_location | sync_priority | sync_state
-------+----------+---------+------------------+--------------+-----------------+-------------+-------------------------------+--------------+----------
-+---------------+----------------+----------------+-----------------+---------------+------------
 60403 |       10 | gpadmin | gp_walreceiver   | 192.168.6.13 |                 |       33428 | 2023-06-11 15:37:38.811796+08 |              | streaming
 | 0/C000000     | 0/C000000      | 0/C000000      | 0/C000000       |             1 | sync
(1 row)


[gpadmin@mdw1 ~]$ psql -d rptgpdb
psql (9.4.26)
Type "help" for help.

rptgpdb=# \l
                               List of databases
   Name    |  Owner  | Encoding |  Collate   |   Ctype    |  Access privileges
-----------+---------+----------+------------+------------+---------------------
 postgres  | gpadmin | UTF8     | en_US.utf8 | en_US.utf8 |
 rptgpdb   | gpadmin | UTF8     | en_US.utf8 | en_US.utf8 |
 template0 | gpadmin | UTF8     | en_US.utf8 | en_US.utf8 | =c/gpadmin         +
           |         |          |            |            | gpadmin=CTc/gpadmin
 template1 | gpadmin | UTF8     | en_US.utf8 | en_US.utf8 | =c/gpadmin         +
           |         |          |            |            | gpadmin=CTc/gpadmin

rptgpdb=# show port;
 port
------
 5432
(1 row)

rptgpdb=# show listen_addresses;
 listen_addresses
------------------
 *
(1 row)

rptgpdb=# select * from gp_segment_configuration order by 1;
 dbid | content | role | preferred_role | mode | status | port | hostname | address |            datadir
------+---------+------+----------------+------+--------+------+----------+---------+--------------------------------
    1 |      -1 | p    | p              | n    | u      | 5432 | mdw1     | mdw1    | /greenplum/data/master/gpseg-1
    2 |       0 | p    | p              | s    | u      | 6000 | sdw1     | sdw1    | /greenplum/data/primary/gpseg0
    3 |       1 | p    | p              | s    | u      | 6001 | sdw1     | sdw1    | /greenplum/data/primary/gpseg1
    4 |       2 | p    | p              | s    | u      | 6000 | sdw2     | sdw2    | /greenplum/data/primary/gpseg2
    5 |       3 | p    | p              | s    | u      | 6001 | sdw2     | sdw2    | /greenplum/data/primary/gpseg3
    6 |       0 | m    | m              | s    | u      | 7000 | sdw2     | sdw2    | /greenplum/data/mirror/gpseg0
    7 |       1 | m    | m              | s    | u      | 7001 | sdw2     | sdw2    | /greenplum/data/mirror/gpseg1
    8 |       2 | m    | m              | s    | u      | 7000 | sdw1     | sdw1    | /greenplum/data/mirror/gpseg2
    9 |       3 | m    | m              | s    | u      | 7001 | sdw1     | sdw1    | /greenplum/data/mirror/gpseg3
   10 |      -1 | m    | m              | s    | u      | 5432 | mdw2     | mdw2    | /greenplum/data/master/gpseg-1
(10 rows)

rptgpdb=# select * from gp_segment_configuration order by hostname,port;
 dbid | content | role | preferred_role | mode | status | port | hostname | address |            datadir
------+---------+------+----------------+------+--------+------+----------+---------+--------------------------------
    1 |      -1 | p    | p              | n    | u      | 5432 | mdw1     | mdw1    | /greenplum/data/master/gpseg-1
   10 |      -1 | m    | m              | s    | u      | 5432 | mdw2     | mdw2    | /greenplum/data/master/gpseg-1
    2 |       0 | p    | p              | s    | u      | 6000 | sdw1     | sdw1    | /greenplum/data/primary/gpseg0
    3 |       1 | p    | p              | s    | u      | 6001 | sdw1     | sdw1    | /greenplum/data/primary/gpseg1
    8 |       2 | m    | m              | s    | u      | 7000 | sdw1     | sdw1    | /greenplum/data/mirror/gpseg2
    9 |       3 | m    | m              | s    | u      | 7001 | sdw1     | sdw1    | /greenplum/data/mirror/gpseg3
    4 |       2 | p    | p              | s    | u      | 6000 | sdw2     | sdw2    | /greenplum/data/primary/gpseg2
    5 |       3 | p    | p              | s    | u      | 6001 | sdw2     | sdw2    | /greenplum/data/primary/gpseg3
    6 |       0 | m    | m              | s    | u      | 7000 | sdw2     | sdw2    | /greenplum/data/mirror/gpseg0
    7 |       1 | m    | m              | s    | u      | 7001 | sdw2     | sdw2    | /greenplum/data/mirror/gpseg1
(10 rows)

📣 5.集群管理命令

1.集群状态
[gpadmin@mdw1 ~]$ gpstate

20230611:15:46:55:063875 gpstate:mdw1:gpadmin-[INFO]:-Starting gpstate with args:
20230611:15:46:55:063875 gpstate:mdw1:gpadmin-[INFO]:-local Greenplum Version: 'postgres (Greenplum Database) 6.24.3 build commit:25d3498a400ca5230e81ab                                      b94861f23389315213 Open Source'
20230611:15:46:55:063875 gpstate:mdw1:gpadmin-[INFO]:-master Greenplum Version: 'PostgreSQL 9.4.26 (Greenplum Database 6.24.3 build commit:25d3498a400ca                                      5230e81abb94861f23389315213 Open Source) on x86_64-unknown-linux-gnu, compiled by gcc (GCC) 6.4.0, 64-bit compiled on May  3 2023 21:05:45'
20230611:15:46:55:063875 gpstate:mdw1:gpadmin-[INFO]:-Obtaining Segment details from master...
20230611:15:46:55:063875 gpstate:mdw1:gpadmin-[INFO]:-Gathering data from segments...
..
20230611:15:46:57:063875 gpstate:mdw1:gpadmin-[INFO]:-Greenplum instance status summary
20230611:15:46:57:063875 gpstate:mdw1:gpadmin-[INFO]:-----------------------------------------------------
20230611:15:46:57:063875 gpstate:mdw1:gpadmin-[INFO]:-   Master instance                                           = Active
20230611:15:46:57:063875 gpstate:mdw1:gpadmin-[INFO]:-   Master standby                                            = mdw2
20230611:15:46:57:063875 gpstate:mdw1:gpadmin-[INFO]:-   Standby master state                                      = Standby host passive
20230611:15:46:57:063875 gpstate:mdw1:gpadmin-[INFO]:-   Total segment instance count from metadata                = 8
20230611:15:46:57:063875 gpstate:mdw1:gpadmin-[INFO]:-----------------------------------------------------
20230611:15:46:57:063875 gpstate:mdw1:gpadmin-[INFO]:-   Primary Segment Status
20230611:15:46:57:063875 gpstate:mdw1:gpadmin-[INFO]:-----------------------------------------------------
20230611:15:46:57:063875 gpstate:mdw1:gpadmin-[INFO]:-   Total primary segments                                    = 4
20230611:15:46:57:063875 gpstate:mdw1:gpadmin-[INFO]:-   Total primary segment valid (at master)                   = 4
20230611:15:46:57:063875 gpstate:mdw1:gpadmin-[INFO]:-   Total primary segment failures (at master)                = 0
20230611:15:46:57:063875 gpstate:mdw1:gpadmin-[INFO]:-   Total number of postmaster.pid files missing              = 0
20230611:15:46:57:063875 gpstate:mdw1:gpadmin-[INFO]:-   Total number of postmaster.pid files found                = 4
20230611:15:46:57:063875 gpstate:mdw1:gpadmin-[INFO]:-   Total number of postmaster.pid PIDs missing               = 0
20230611:15:46:57:063875 gpstate:mdw1:gpadmin-[INFO]:-   Total number of postmaster.pid PIDs found                 = 4
20230611:15:46:57:063875 gpstate:mdw1:gpadmin-[INFO]:-   Total number of /tmp lock files missing                   = 0
20230611:15:46:57:063875 gpstate:mdw1:gpadmin-[INFO]:-   Total number of /tmp lock files found                     = 4
20230611:15:46:57:063875 gpstate:mdw1:gpadmin-[INFO]:-   Total number postmaster processes missing                 = 0
20230611:15:46:57:063875 gpstate:mdw1:gpadmin-[INFO]:-   Total number postmaster processes found                   = 4
20230611:15:46:57:063875 gpstate:mdw1:gpadmin-[INFO]:-----------------------------------------------------
20230611:15:46:57:063875 gpstate:mdw1:gpadmin-[INFO]:-   Mirror Segment Status
20230611:15:46:57:063875 gpstate:mdw1:gpadmin-[INFO]:-----------------------------------------------------
20230611:15:46:57:063875 gpstate:mdw1:gpadmin-[INFO]:-   Total mirror segments                                     = 4
20230611:15:46:57:063875 gpstate:mdw1:gpadmin-[INFO]:-   Total mirror segment valid (at master)                    = 4
20230611:15:46:57:063875 gpstate:mdw1:gpadmin-[INFO]:-   Total mirror segment failures (at master)                 = 0
20230611:15:46:57:063875 gpstate:mdw1:gpadmin-[INFO]:-   Total number of postmaster.pid files missing              = 0
20230611:15:46:57:063875 gpstate:mdw1:gpadmin-[INFO]:-   Total number of postmaster.pid files found                = 4
20230611:15:46:57:063875 gpstate:mdw1:gpadmin-[INFO]:-   Total number of postmaster.pid PIDs missing               = 0
20230611:15:46:57:063875 gpstate:mdw1:gpadmin-[INFO]:-   Total number of postmaster.pid PIDs found                 = 4
20230611:15:46:57:063875 gpstate:mdw1:gpadmin-[INFO]:-   Total number of /tmp lock files missing                   = 0
20230611:15:46:57:063875 gpstate:mdw1:gpadmin-[INFO]:-   Total number of /tmp lock files found                     = 4
20230611:15:46:57:063875 gpstate:mdw1:gpadmin-[INFO]:-   Total number postmaster processes missing                 = 0
20230611:15:46:57:063875 gpstate:mdw1:gpadmin-[INFO]:-   Total number postmaster processes found                   = 4
20230611:15:46:57:063875 gpstate:mdw1:gpadmin-[INFO]:-   Total number mirror segments acting as primary segments   = 0
20230611:15:46:57:063875 gpstate:mdw1:gpadmin-[INFO]:-   Total number mirror segments acting as mirror segments    = 4
20230611:15:46:57:063875 gpstate:mdw1:gpadmin-[INFO]:-----------------------------------------------------

gpstate -s 可以查看详细信息
命令gpstate -f可以查看standby master库的详情



2.开关闭集群
[gpadmin@mdw1 ~]$ gpstop -a
[gpadmin@mdw1 ~]$ gpstart -a

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

GC演变过程、三色标记法、大白话讲解G1

文章目录 GC演变过程并发垃圾回收需要解决的问题怎么确定一个垃圾?并发收集存在的问题 三色标记法CMS垃圾收集器G1垃圾收集器介绍,主要特点优点使用注意点 GC演变过程 在Java中,垃圾收集一直是一个非常重要的组成部分, 到目前为止,垃圾收集器已经有十种了, 在不停的优化. 那为…

GoogleTest之Actions的用法

目录 返回值Actions的组合验证复杂参数mock副作用改变mock对象的行为设置返回类型的默认值使用自定义函数作为Actions 通用示例 namespace mock_action { class Foo { public:virtual ~Foo() {}virtual int& GetBar() 0; // 1virtual int GetPointerValue() 0; //…

Linux CentOS7虚拟机配置静态IP并允许上网的配置方法

文章目录 前言一、开启本地电脑VMnet8二、Linux配置静态IP1. NAT模式设置2. 开启虚拟机登录root用户3. 执行命令设置静态IP4. 重启网卡① 重启网卡 (正常)② 重启网卡 (异常)③ 解决方式&#xff1a;禁用NetworkManager 5. 查看ip6. 本地电脑cmd窗口ping虚拟机7. 虚拟机ping本地…

Golang每日一练(leetDay0095) 第一个错误的版本、完全平方数

目录 278. 第一个错误的版本 First Bad Version &#x1f31f; 279. 完全平方数 Perfect Squares &#x1f31f;&#x1f31f; &#x1f31f; 每日一练刷题专栏 &#x1f31f; Rust每日一练 专栏 Golang每日一练 专栏 Python每日一练 专栏 C/C每日一练 专栏 Java每日…

springboot的数据访问和数据视图

当使用 Spring Boot 进行数据访问时&#xff0c;我们可以选择使用 MyBatis 或 JPA&#xff08;Java Persistence API&#xff09;来实现增删改查操作。下面我将分别给出使用这两种方式整合数据访问的详细步骤和示例&#xff0c;同时结合 Thymeleaf 实现数据展现。 方式一: 使用…

AI实战营:语义分割与MMSegmentation

目录 OpenMMLab图像分割算法库MMSegmentation 深度学习下的语义分割模型 全卷积网络Fully Convolutional Network 201 ​编辑 上下文信息与PSPNet模型 空洞卷积与DeepLab模型 语义分割算法总结 语义分割 前沿算法 SegFormer K-Net MaskFormer Mask2Former Seg…

PySide2 or PyQt5???该如何抉择???

1. 区别 Qt库里面有非常强大的图形界面开发库&#xff0c;但是Qt库是C语言开发的&#xff0c;PySide2、PyQt5可以让我们通过Python语言使用Qt。 但是 PySide2、PyQt5 这两者有什么区别呢&#xff1f; 可以形象地这样说&#xff1a; PySide2 是Qt的 亲儿子 &#xff0c; PyQt5 …

面向对象程序设计|静态友元

题目一&#xff1a;复数运算 题目描述&#xff1a; 复数类的声明如下 要求如下&#xff1a; 1. 实现复数类和友元函数addCom和outCom&#xff1b; 2. 参考addCom函数为复数类增加一个友元函数minusCom&#xff0c;用于实现两个复数的减法&#xff1b; 3. 在main函数中&…

待办事项JS:DHTMLX To Do List 1.2 cRACK

DHTMLX To Do List用于有效任务管理的DHTMLX JavaScript 待办事项列表 使用 JavaScript/HTML 5 中的待办事项列表来管理您的任务并确定其优先级。将组件连接到 DHTMLX 甘特图&#xff0c;并允许用户以简单直观的方式快速组织他们的业务流程。 DHTMLX JavaScript 待办事项列表的…

chatgpt赋能python:Python建模块最佳实践

Python建模块最佳实践 Python是一种灵活、易于使用的编程语言&#xff0c;因其强大的模块化支持和丰富的第三方模块而备受推崇。本文将介绍Python建模块的最佳实践&#xff0c;以便帮助开发人员创建可重用、可维护和易于测试的Python模块。 基本概念 在Python中&#xff0c;…

创业很长时间以后…

创业过很长时间以后…综合能力是有滴 创业和打工后的思维习惯 为了效率&#xff0c;一般情况是这样滴 趣讲大白话&#xff1a;区别还是有滴 【趣讲信息科技195期】 **************************** 创业还是很难滴 每年成立很多新公司 有很多公司关门 公司平均生存时间&#xff1…

右值引用以及move移动语义和forward 完美转发

右值引用 右值引用最简单的作用&#xff1a;可以避免无谓的复制&#xff0c;提高了程序性能&#xff08;在移动构造函数中有体现&#xff09;。 什么是右值 最基本的解释&#xff1a; 左值可以取地址、位于等号左边&#xff1b; 右值没法取地址&#xff0c;位于等号右边。&…

UnityVR--组件9--VideoPlayerAudioSource

目录 前言 视频组件VideoPlayer参数解释 RenderMode渲染方式 VideoPlayer类中的API 音频组件AudioSource参数解释 AudioSource类中的常见API&简单应用 前言 在之前的VR场景中已经使用过VideoPlayer播放视频&#xff08;Unity.UI的交互&#xff08;6&#xff09;-播放…

chatgpt赋能python:Python怎么快速读取一组图片的RGB值?

Python怎么快速读取一组图片的RGB值&#xff1f; 简介 Python是一种非常流行的程序设计语言&#xff0c;它具有易于学习、简洁明了的语法和强大的功能。Python被广泛应用于数据分析、人工智能、科学计算、Web开发、游戏开发等领域。在这篇文章中&#xff0c;我们将介绍如何使…

chatgpt赋能python:Python快速缩进技巧与优化提升

Python快速缩进技巧与优化提升 介绍 在Python中&#xff0c;缩进是代码块的唯一标识符。这种缩进机制使得Python代码看起来更加清晰和易于阅读。同时&#xff0c;正确的缩进也是Python程序能否正常运行的重要因素。然而&#xff0c;大量的缩进可能会导致程序员的效率降低&…

Android系统Handler详解

目录 一&#xff0c;背景介绍 1.1 简介 1.2 核心概念 1.3 Handler 背后的生产者-消费者模型 二&#xff0c;Handler机制原理 2.1 消息模型 2.2 Handler原理概述 2.3 Handler与管道通信 三&#xff0c;实战 3.1 创建 Handler 3.2 子线程向主线程 3.3 主线程向子线程…

C/C++爱心代码“你把握不住的,让哥来~”祝你找到另一半

目录 第一种心形 加点好玩的 最后一忠心形&#xff08;会变色的爱心&#xff09; 618多得图书活动来啦 第一种心形 这次需要用到头文件#include<windows.h> #include<stdio.h> #include<windows.h> 以下是完整代码 #include<stdio.h> #include<…

chatgpt赋能python:Python中如何使用Math库进行数学计算

Python中如何使用Math库进行数学计算 Python是一种功能强大的编程语言&#xff0c;但对于许多数字计算、三角函数和其他复杂的数学问题&#xff0c;Python本身并不提供内置支持。为了解决这些问题&#xff0c;Python提供了一个名为Math的库。本文将介绍如何引入Math库&#xf…

【王道·操作系统】第三章 内存管理【未完】

一、内存管理 1.1 内存的基础知识 内存可存放数据&#xff0c;程序执行前需要先放到内存中才能被CPU处理——缓和CPU与硬盘之间的速度矛盾内存地址从0开始&#xff0c;每个地址对应一个存储单元 按字节编址&#xff1a;每个存储单元大小为1字节(B)&#xff0c;即8个二进制位按…

OJ Prime Gap

目录 1.题目 2.中文翻译 3.题意 4.代码 5.知识点 range的倒序处理&#xff1a; 1.题目 Prime Gap Description The sequence of n − 1 consecutive composite numbers (positive integers that are not prime and not equal to 1) lying between two successive prime…