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

Greenplum6.19集群搭建

一,安装说明

1.1环境说明


1、首先确定部署的环境,确定下服务器的端口,一般默认是22的端口;

2、当前这份文档是服务器处于10022端口下部署的(现场生产环境要求,22端口在生产环境存在安全隐患);

3、操作系统Centos7.9;

4、 数据库greenplum-db-6.19.1。

1.2集群介绍


1、本次采用的是4台机器组成的集群:1台机器是master节点,1台机器是standby节点(这个节点相当于master的备用节点),2台机器是segment节点。

2、集群的ip和hostname如下(都是虚拟机环境):

192.168.0.31   mdw(master节点)

192.168.0.32   smdw (standby节点)

192.168.0.33   sdw1 (segment节点)

192.168.0.34   sdw2 (segment节点)

二,安装环境准备


2.1 关闭防火墙(所有节点)


1、配置的时候,要保证所有的机器的网络都是通的,并且每台机器的防火墙都是关闭的,避免存在网络不通的情况。

具体操作:

systemctl stop firewalld (停止防火墙)

systemctl disable firewalld(关闭防火墙)

systemctl status firewalld(查看防火墙状态)

截图如下:

2.2 关闭SELINUX(所有节点)


1、修改/etc/selinux/config文件(在某些系统中,可能是/etc/sysconfig/selinux文件),将SELINUX=enforcing修改为SELINUX=disabled。更新配置之后要重启服务器生效(这个部分可以在2.7操作完之后执行)或者执行:setenforce 0,使其立即生效。

2、具体操作:(每个节点直接执行如下命令)

sed -i s/SELINUX=enforcing/SELINUX=disabled/g /etc/selinux/config

截图如下:

注:执行完也可以直接进入/etc/selinux/config的文件查看是否修改完全。

2.3 修改内核配置参数 (所有节点)


1、修改/etc/sysctl.conf文件,其中的配置文件是官方配置的。

具体操作:

cat <<EOF > /etc/sysctl.conf

# kernel.shmall = _PHYS_PAGES / 2

kernel.shmall = 742216

# kernel.shmmax = kernel.shmall * PAGE_SIZE

kernel.shmmax = 3040116736

kernel.shmmni = 4096

vm.overcommit_memory = 2

vm.overcommit_ratio = 95

net.ipv4.ip_local_port_range = 10000 65535

kernel.sem = 500 2048000 200 4096

kernel.sysrq = 1

kernel.core_uses_pid = 1

kernel.msgmnb = 65536

kernel.msgmax = 65536

kernel.msgmni = 2048

net.ipv4.tcp_syncookies = 1

net.ipv4.conf.default.accept_source_route = 0

net.ipv4.tcp_max_syn_backlog = 4096

net.ipv4.conf.all.arp_filter = 1

net.core.netdev_max_backlog = 10000

net.core.rmem_max = 2097152

net.core.wmem_max = 2097152

vm.swappiness = 10

vm.zone_reclaim_mode = 0

vm.dirty_expire_centisecs = 500

vm.dirty_writeback_centisecs = 100

vm.dirty_background_ratio = 0 # See System Memory

vm.dirty_ratio = 0

vm.dirty_background_bytes = 1610612736

vm.dirty_bytes = 4294967296

EOF

截图如下:

2、执行完上述操作后,执行sysctl -p 使配置生效。

具体操作:

sysctl -p

截图如下:

2.4 配置/etc/hosts (所有节点)


1、主要是为之后 Greenplum 能够在各个节点之间相互通信做准备。

具体操作:

vi /etc/hosts

截图如下:

2.5 设置etc/sysconfig/network (所有节点)


1、每个节点机器的设置内容不同。
具体操作(在其他服务器上执行的话,修改hostname)

截图如下:

注:其他节点都需要修改。

2.6 配置资源限制参数etc/security/limits.conf(所有节点)


1、具体操作:
cat <<EOF > /etc/security/limits.conf

* soft nofile 524288

* hard nofile 524288

* soft nproc 131072

* hard nproc 131072

EOF

截图如下:

2.7 修改ssh的连接数(所有节点)


1、具体操作:

cat <<EOF >> /etc/ssh/sshd_config

 MaxStartups 200

 MaxSessions 200

 EOF

截图如下:

2.8 将所有服务器重启(所有节点)

reboot

三,GreenPlum的数据库安装


3.1 添加组和用户(所有节点机器 root 用户操作)


1、创建 gpadmin 用户及用户组,将其作为安装 greenplum 的操作系统用户。

2、如果已经存在,先删除,

具体操作:
groupdel gpadmin
userdel gpadmin

3、创建新的用户和用户组
具体操作:

groupadd gpadmin

useradd -r -m -g gpadmin gpadmin

passwd gpadmin (设置密码)

截图如下:

3.2 集群相互之间ssh免密(所有节点机器 gpadmin 用户操作)


1、具体操作:(操作为master节点)

su gpadmin (进入gpadmin用户)

mkdir -p /home/gpadmin/conf(这个部分提前创建,后续会用到)

cd /home/gpadmin/

ssh-keygen -t rsa (生成密钥对)

ssh-copy-id smdw

ssh-copy-id sdw1

ssh-copy-id sdw2

截图如下:

 注:每个节点都需要这样操作。

验证如下:在gpadmin用户下,ssh smdw 输入后,无需密码直接登录到了smdw服务器。

问题整理:(如果是10002端口这个地方一定需要改)

这个地方出现一个问题,还是不能链接,需要ssh -p 10022  localhost4
是可以访问的。

报错截图:

解决办法:
修改/etc/services文件,将ssh 对应的端口改为10022。

再次验证sss localhost4。
 

3.3 ssh权限互通设置(Master节点)


1、在/home/gpadmin/conf的路径下生成 hostlist,seg_hosts文件:

具体操作:

cd  /home/gpadmin/conf

vi hostlist

#文件内容

mdw

smdw

sdw1

sdw2

vi seg_hosts

#文件内容

sdw1

sdw2

截图如下:

3.4 Greenplum集群安装(所有节点)


1、首先是将greenplum的安装包导入到服务器上(可以新建一个文件夹);、

2、具体操作:
su root (进入root用户)

cd /root/gpadmin (这个安装包的所在位置)

ls (查看安装包,确认位置)

sudo yum install ./open-source-greenplum-db-6.19.1-rhel7-x86_64.rpm (这个是官方的安装步骤,是不需要再去下载依赖的)

chown -R gpadmin:gpadmin /usr/local/greenplum* (安装完之后,这个地方是将这个文件在gpadmin用户赋予权限)

截图如下:

后续安装过程会有一次输入:y (确认操作)

注:所有节点都需要安装。

3.5 使用 gpssh-exkeys 打通所有服务器 (Master节点)


1、使用 gpssh-exkeys 将所有机器的通道打开,这样在每台机器之间跳转,就不需要输入密码。

具体操作:

su gpadmin

cd /usr/local/greenplum-db-6.19.1/

source /usr/local/greenplum-db-6.19.1/greenplum_path.sh

cd /home/gpadmin/conf

gpssh-exkeys -f hostlist

截图如下:

3.6 环境变量配置.bashrc和GPHOME(所有节点机器 gpadmin 用户操作)


1、配置环境变量.bashrc

具体操作:

su gpadmin

mkdir -p /home/gpadmin/data/master (这个部分可以提前创建)
cat <<EOF >> /home/gpadmin/.bashrc

source /usr/local/greenplum-db/greenplum_path.sh

export PGPORT=5432

export PGUSER=gpadmin

export MASTER_DATA_DIRECTORY=/app/gpadmin/data/master/gpseg-1(注意:这个路径是我本人放置数据的文件夹;大家可以自行考虑,根据服务器内存调整位置)

export PGDATABASE=gp_sydb

export LD_PRELOAD=/lib64/libz.so.1 ps

EOF

source /home/gpadmin/.bashrc

截图如下:

2、配置环境变量GPHOME,首先进到文件中直接修改

具体操作:

vi /usr/local/greenplum-db/greenplum_path.sh

添加的路径:GPHOME=/usr/local/greenplum-db

截图如下:

3.7 创建数据文件夹(Master节点)


1、创建各个节点的数据文件夹,该步骤之后 hostlist 文件包含机器下都会创建 data目录,data目录下都会创建master、primary、mirror文件夹。

具体操作:

gpssh -f /home/gpadmin/conf/hostlist

mkdir data

cd data

mkdir master

mkdir primary

mkdir mirror

exit

截图如下:

3.8 连通性检查(主节点 gpadmin 用户操作 )


1、检查各个节点的连通性
具体操作:

gpcheckperf -f /home/gpadmin/conf/hostlist -r N -d /tmp

截图如下:

3.9 初始化配置文件编辑修改(主节点 gpadmin 用户操作 )


1、这里修改初始化文件,首先拷贝一个文件gpinitsystem_config,在修改。

具体操作:
mkdir /home/gpadmin/gpconfigs

cp /usr/local/greenplum/greenplum-db/docs/cli_help/gpconfigs/gpinitsystem_config /home/gpadmin/gpconfigs/gpinitsystem_config (这个部分是一个命令,比较长)

vim /home/gpadmin/gpinitsystem_config
这里先搜索在修改:

# ------------------------以下为配置内容------------------------

# 该项配置设置主节点数据存储位置,括号里边有几个代表每台主机创建几个postgresql数据库实例,即segment的实例数,上边示例是2个。

declare -a DATA_DIRECTORY=(/home/gpadmin/data/primary /home/gpadmin/data/primary)

# 该项配置设置主节点机器名字

MASTER_HOSTNAME=mdw

# 该项配置设置主节点数据存储位置

MASTER_DIRECTORY=/home/gpadmin/data/master

# 该项配置设置是备节点数据存储位置,规则同DATA_DIRECTORY,括号里边数量和DATA_DIRECTORY保持一致。

# greenplum数据分主节点和备节点,主节点挂掉时候备节点数据会启用。

declare -a MIRROR_DATA_DIRECTORY=(/home/gpadmin/data/primary /home/gpadmin/data/primary)

# 该项配置设置默认数据库名字,和环境变量数据库名字保持一致,不然会失败。

DATABASE_NAME=gp_sydb

截图如下:

2、在/home/gpadmin/gpconfigs新增一个配置文件hostfile_gpinitsystem

具体操作:

cd /home/gpadmin/gpconfigs

vi hostfile_gpinitsystem

#新增的内容
sdw1

sdw2

截图如下:

3.10 初始化数据库(主节点 gpadmin 用户操作 )


1、初始化数据库

具体操作:

gpinitsystem -c gpconfigs/gpinitsystem_config -h gpconfigs/hostfile_gpinitsystem
备用:gpinitsystem -c /home/gpadmin/gpconfigs/gpinitsystem_config -h /home/gpadmin/gpconfigs/hostfile_gpinitsystem

截图如下:

 上述应该就是安装好了。

3.11设置远程登录(主节点 gpadmin 用户操作 )


1、如需要Navicat能够链接,需要配置如下:

具体操作:

echo "host all gpadmin 0.0.0.0/0 trust" >> /home/gpadmin/data/master/gpseg-1/pg_hba.conf

gpstop -u (重新加载数据库配置)

截图如下:

3.12 设置standby节点(主节点 gpadmin 用户操作 )


1、standby节点根据之前的步骤,就已经完成了配置

具体操作:

gpinitstandby -s smdw

截图如下:

2、验证standby节点是否完成配置

在standby的服务器上,验证相关端口是否运行

具体操作:

ps -ef|grep postgres

截图如下:

至此,GP集群安装完成,并设置好了standby。

四,Greenplum数据库验证


4.1登录验证(主节点 gpadmin 用户操作 )


1、登录验证

具体操作:

psql -d postgres

截图如下:

2、navicat登录验证

截图如下:

3、查看集群状态验证,在主节点上操作命令

具体操作:

Gpstate

截图如下:

4.2其他greenplum命令(主节点 gpadmin 用户操作 )


1、命令如下

• 关闭gpstop

• 启动gpstart

• 状态查看gpstate

• help命令查看所有命令

psql -d postgres 进入psql命令行执行help

\h 查看SQL命令

? 查看psql命令

问题:安装greenplum集群,执行gpssh-exkeys -f 报错
环境:CentOS7.8 端口是10022 
问题分析,主要是gpssh-exkeys默认是22端口,将其中的一些命令改加上端口

问题截图:

处理办法:

打开gpssh-exkeys脚本,

修改一:

errfile = os.path.join(tempDir, 'sshcheck.err')
cmd = 'ssh -p 10022 -o "BatchMode=yes" -o "StrictHostKeyChecking=no" %s true 2>%s' % (hostname, errfile)

修改二:

    for remoteHost in GV.allHosts:
         cmd = ['ssh','-p','10022','[email protected]'+ remoteHost.host(), '-o', 'BatchMode=yes', '-o', 'StrictHostKeyChecking=yes',  'true']

修改三:

cmd = ('scp -P 10022 -q -o "BatchMode yes" -o "NumberOfPasswordPrompts 0" ' + '%s %s %s %s %s:.ssh/ 2>&1' % (remoteAuthKeysFile, remoteKnownHostsFile, remoteIdentity, remoteIdentityPub, canonicalize(h.host()))) h.popen(cmd)
修改四:

for h in GV.newHosts:
            cmd = ('scp -P 10022 -q -o "BatchMode yes" -o "NumberOfPasswordPrompts 0" ' +
                   '%s %s %s %s %s:.ssh/ 2>&1'
                   % (GV.authorized_keys_fname,
                      GV.known_hosts_fname,
                      GV.id_rsa_fname,
                      GV.id_rsa_pub_fname,
                      canonicalize(h.host())))
            h.popen(cmd)

相关文章:

Greenplum6.19集群搭建

一&#xff0c;安装说明 1.1环境说明 1、首先确定部署的环境&#xff0c;确定下服务器的端口&#xff0c;一般默认是22的端口&#xff1b; 2、当前这份文档是服务器处于10022端口下部署的&#xff08;现场生产环境要求&#xff0c;22端口在生产环境存在安全隐患&#xff09;&…...

sqlserver中的锁模式 | SQL SERVER如何开启MVCC(使用row-versioning)【启用行版本控制减少锁争用】

文章目录 引言锁和隔离级别的关系锁模式之间兼容性I 隔离级别SQLServer默认的隔离级别为:“read commited” (已提交读)在SQLServer2005引入了基于行版本控制的隔离级别。SQL SERVER如何开启MVCC(使用row-versioning)sqlserver开启MVCC后的锁II sqlserver中的锁模式**1、共享…...

胜软科技冲刺北交所一年多转港股:由盈转亏,毛利率大幅下滑

《港湾商业观察》施子夫 近期&#xff0c;山东胜软科技股份有限公司&#xff08;以下简称&#xff0c;胜软科技&#xff09;递表港交所获受理&#xff0c;独家保荐机构为广发证券&#xff08;香港&#xff09;。 在赴港上市之前&#xff0c;胜软科技还曾谋求过A股上市&#x…...

Java零基础入门笔记:多线程

前言 本笔记是学习狂神的java教程&#xff0c;建议配合视频&#xff0c;学习体验更佳。 【狂神说Java】Java零基础学习视频通俗易懂_哔哩哔哩_bilibili 第1-2章&#xff1a;Java零基础入门笔记&#xff1a;(1-2)入门&#xff08;简介、基础知识&#xff09;-CSDN博客 第3章…...

Django 中,Form 和 ModelForm的用法和区别

在 Django 中,Form 和 ModelForm 是用于处理表单数据的两种主要方式。它们的主要区别在于是否与模型(Model)直接关联。以下是它们的用法、区别以及高级用法的详细说明: 一、Form 的使用 1. 基本用法 Form 是一个独立的表单类,不与任何模型直接关联。适用于需要手动定义字…...

tcp udp区别

TCP&#xff08;传输控制协议&#xff09; 和 UDP&#xff08;用户数据报协议&#xff09; 是两种常用的传输层协议&#xff0c;它们在数据传输方式、可靠性和应用场景等方面有显著区别。以下是它们的主要区别&#xff1a; 1. 连接方式 TCP&#xff1a;面向连接的协议。通信前需…...

数据类设计_图片类设计之1_矩阵类设计(前端架构基础)

前言 学的东西多了,要想办法用出来.C和C是偏向底层的语言,直接与数据打交道.尝试做一些和数据方面相关的内容 引入 图形在底层是怎么表示的,用C来表示 认识图片 图片是个风景,动物,还是其他内容,人是可以看出来的.那么计算机是怎么看懂的呢?在有自主意识的人工智能被设计出来…...

C++:入门详解(关于C与C++基本差别)

目录 一.C的第一个程序 二.命名空间&#xff08;namespace&#xff09; 1.命名空间的定义与使用&#xff1a; &#xff08;1&#xff09;命名空间里可以定义变量&#xff0c;函数&#xff0c;结构体等多种类型 &#xff08;2&#xff09;命名空间调用&#xff08;&#xf…...

GC安全点导致停顿时间过长的案例

GC安全点导致停顿时间过长的案例 前言安全点的概念案例分析解决方法如有需要收藏的看官&#xff0c;顺便也用发财的小手点点赞哈&#xff0c;如有错漏&#xff0c;也欢迎各位在评论区评论&#xff01; 前言 前段时间在使用G1垃圾收集时&#xff0c;因服务读写压力过大&#xf…...

linux下 jq 截取json文件信息

背景&#xff1a;通过‘登录名‘ 获取该对象的其他个人信息如名字。 环境准备&#xff1a;麒麟操作系统V10 jq安装包 jq安装包获取方式&#xff1a;yum install jq 或 使用附件中的rpm 或 git自行下载 https://github.com/stedolan/jq/releases/download/ 实现过程介绍&am…...

git lfs使用方法指南【在github保存100M以上大文件】

为了在 GitHub 仓库中存储超过 100MB 的大文件并避免推送失败&#xff0c;使用 Git LFS&#xff08;Large File Storage&#xff09; 是最佳解决方案。以下是详细步骤&#xff1a; 一、安装 Git LFS 下载并安装 Git LFS&#xff1a; 访问 Git LFS 官网 下载对应系统的安装包。或…...

躲藏博弈:概率论与博弈论视角下的最优策略选择

躲藏博弈&#xff1a;概率论与博弈论视角下的最优策略选择 1. 问题引入 想象这样一个场景&#xff1a;你在厕所里藏了一部手机&#xff0c;一周过去了&#xff0c;它仍未被发现。现在你面临一个决策&#xff1a; 选项A&#xff1a;继续将手机留在原处选项B&#xff1a;将手机…...

类加载器加载过程

今天我们就来深入了解一下Java中的类加载器以及它的加载过程。 一、什么是类加载器&#xff1f; 在Java中&#xff0c;类加载器&#xff08;Class Loader&#xff09;是一个非常重要的概念。它负责将类的字节码文件&#xff08;.class文件&#xff09;加载到Java虚拟机&#x…...

Python中dump、dumps和load、loads的异同

Python中dump、dumps和load、loads的异同 Python中dump、dumps和load、loads的异同 1. json.dump()和json.dumps() 1.1 json.dump()1.1 json.dumps() 2. json.load()和json.loads() 2.1 json.load()2.2. json.loads() 3. 总结对比4. 区分5. 完整代码 1. json.dump()和json.dum…...

Spring Boot整合ArangoDB教程

精心整理了最新的面试资料和简历模板&#xff0c;有需要的可以自行获取 点击前往百度网盘获取 点击前往夸克网盘获取 一、环境准备 JDK 17Maven 3.8Spring Boot 3.2ArangoDB 3.11&#xff08;本地安装或Docker运行&#xff09; Docker启动ArangoDB docker run -d --name ar…...

vue3框架的响应式依赖追踪机制

当存在一个响应式变量于视图中发生改变时会更新当前组件的所以视图显示&#xff0c;但是没有视图中不写这个响应式变量就就算修改该变量也不会修改视图&#xff0c;这是为什么&#xff1f;我们能否可以理解宽泛的理解为vue组件的更新就是视图的更新&#xff0c;单当视图中不存在…...

软件工程:软件需求之需求分析方法

目录 前言 需求分析方法 工具和方法 具体分析方法 对运行环境的影响 ​编辑 前言 本文重点介绍开展软件需求分析的方法。 需求分析方法 工具和方法 软件需求可以维护在ALM系统中&#xff0c;譬如&#xff1a;doors&#xff0c;codeBeamer等&#xff0c;JIRA适合互联网行…...

【网络编程】WSAAsyncSelect 模型

十、基于I/O模型的网络开发 接着上次的博客继续分享&#xff1a;select模型 10.8 异步选择模型WSAAsyncSelect 10.8.1 基本概念 WSAAsyncSelect模型是Windows socket的一个异步I/O 模型&#xff0c;利用这个模型&#xff0c;应用程序 可在一个套接字上接收以Windows 消息为基…...

视觉-语言模型-出发点CLIP--(精读论文)

阅读建议&#xff1a;配合这个源码分析阅读效果更加 研究背景和目的 介绍当前计算机视觉系统依赖固定类别标签训练的局限性&#xff0c;以及自然语言监督作为一种有潜力替代方式的研究现状。强调论文旨在探索从自然语言监督中学习可迁移视觉模型&#xff0c;实现零样本学习&a…...

docker本地部署RagFlow

1.安装 克隆仓库 git clone https://github.com/infiniflow/ragflow.git构建预建的Docker映像并启动服务器 cd ragflow/docker chmod x ./entrypoint.sh docker compose -f docker-compose.yml -p ragflow up -d修改ragflow/docker/.env文件 #RAGFLOW_IMAGEinfiniflow/ragfl…...

机器学习数学基础:44.多元线性回归

一、文字内容详解 1. 多重共线性的判断——皮尔逊相关系数 皮尔逊相关系数用于衡量自变量间的线性相关程度&#xff0c;取值范围为 ([-1, 1])&#xff1a; 绝对值越接近 (1)&#xff0c;变量间线性相关性越强&#xff1b;越接近 (0)&#xff0c;相关性越弱。在多重共线性判断…...

GetWindowLongPtr函数分析

第一部分&#xff1a; #ifdef UNICODE FUNCLOG2(LOG_GENERAL, LONG_PTR, APIENTRY, GetWindowLongPtrW, HWND, hwnd, int, nIndex) #else FUNCLOG2(LOG_GENERAL, LONG_PTR, APIENTRY, GetWindowLongPtrA, HWND, hwnd, int, nIndex) #endif // UNICODE LONG_PTR APIENTRY GetWin…...

大语言模型(LLM)和嵌入模型的统一调用接口

ChatModelFactory、EmbeddingModelFactory 讲解代码&#xff1a;import os from dotenv import load_dotenv, find_dotenv_ load_dotenv(find_dotenv())from langchain_openai import ChatOpenAI, OpenAIEmbeddings, AzureChatOpenAI, AzureOpenAIEmbeddingsclass ChatModelF…...

大白话html语义化标签优势与应用场景

大白话html语义化标签优势与应用场景 大白话解释 语义化标签就是那些名字能让人一看就大概知道它是用来做什么的标签。以前我们经常用<div>来做各种布局&#xff0c;但是<div>本身没有什么实际的含义&#xff0c;就像一个没有名字的盒子。而语义化标签就像是有名…...

Scala:在哪里写类的属性?类的属性必须私有吗?类的必须初始化吗?

哪里写类的属性 直接在类体中定义属性 class Circle {private var _radius: Double 0.0def radius: Double _radiusdef radius_(newRadius: Double): Unit {_radius newRadius}def area: Double scala.math.Pi * _radius * _radius } 可以在类体内部直接定义属性。例如&am…...

Android源码编译命令详解

一、引言 先看下面几条指令&#xff0c;相信编译过Android源码的人都再熟悉不过的。 source setenv.sh lunch make -j8记得最初刚接触Android时&#xff0c;同事告诉我用上面的指令就可以编译Android源码&#xff0c;指令虽短但过几天就记不全或者忘记顺序&#xff0c;每次编…...

任务11:路由器配置与静态路由配置

目录 一、概念 二、路由器配置 三、配置静态路由CSDN 原创主页&#xff1a;不羁https://blog.csdn.net/2303_76492156?typeblog 一、概念 1、路由器的作用&#xff1a;通过路由表进行数据的转发。 2、交换机的作用&#xff1a;通过学习和识别 MAC 地址&#xff0c;依据 M…...

Unity之如何实现哔哩哔哩直播弹幕游戏

前言 什么是直播间互动? 当我们使用哔哩哔哩进行直播或者观看视频时,我们可以通过接入哔哩哔哩提供的 直播&互动玩法SDK,让直播和视频可以与Unity3D游戏客户端或者游戏服务器进行互动。 环境要求 Unity 2020.x或更高版本 依赖库:Newtonsoft Json Unity Package 在P…...

Python实例:PyMuPDF实现PDF翻译,英文翻译为中文,并按段落创建中文PDF

基于PyMuPDF与百度翻译的PDF翻译处理系统开发:中文乱码解决方案与自动化排版实践 一 、功能预览:将英文翻译为中文后创建的PDF 二、完整代码 from reportlab.lib.pagesizes import letter from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle...

LeeCode题库第四十六题

46.全排列 项目场景&#xff1a; 给定一个不含重复数字的数组 nums &#xff0c;返回其 所有可能的全排列 。你可以 按任意顺序 返回答案。 示例 1&#xff1a; 输入&#xff1a;nums [1,2,3] 输出&#xff1a;[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]示例 2&am…...