[2.0快速体验]Apache Doris 2.0 日志分析快速体验

news2024/11/26 11:53:40

1. 概述

应用程序、服务器、云基础设施、IoT 和移动设备、DevOps、微服务架构—最重要的业务和 IT 发展趋势帮助我们以前所未有的方式优化运维和客户体验。但这些趋势也导致由机器生成的数据出现爆炸式成长,其中包括日志和指标等,例如,用户交易、客户行为、传感器活动、机器行为和安全威胁等。这些数据十分复杂,但同时也最为重要,因为它们包含关于 IT、安全和业务的运维情报。

日志分析涉及到对由您的 IT 系统和技术基础设施生成的机器数据进行搜索、分析与可视化,以便获得运维方面的见解。传统的数据分析工具已不能胜任如此多样性而且快速增加的机器数据的处理工作。

日志数据在不断增长。如果没有一个整体的、具有成本意识的解决方案,成本将继续不受控制地增长。人类数据和机器生成的数据正在以惊人的速度增长,其中人类生成的数据的增长率通常是商业数据的 10 倍。机器数据预计将增长更多。

传统的日志分析场景,直接在日志文件中 grep、awk 就可以获得自己想要的信息。但在规模较大的场景中,此方法效率低下,面临如下问题:

  1. 日志量太大如何归档?
  2. 文本搜索太慢怎么办?
  3. 如何多维度查询及关联查询分析等等

解决上面的问题,需要集中化的日志管理,所有服务器上的日志收集汇总。常见解决思路是建立集中式日志收集系统,将所有节点上的日志统一收集,管理,访问。ELK就是解决这些问题的一种解决方案。

我们知道 Apache Doris 是一个基于 MPP 架构的高性能、实时的分析型数据库,以极速易用的特点被人们所熟知,仅需亚秒级响应时间即可返回海量数据下的查询结果,不仅可以支持高并发的点查询场景,也能支持高吞吐的复杂分析场景。基于此,Apache Doris 能够较好的满足报表分析、即席查询、统一数仓构建、数据湖联邦查询加速等使用场景,用户可以在此之上构建用户行为分析、AB 实验平台、日志检索分析、用户画像分析、订单分析等应用。

如果我们希望使用 Apache Doris 来更好解决日志存储与分析场景的痛点,其实现路径也非常清晰——在数据库内部增加倒排索引、以满足字符串类型的全文检索和普通数值/日期等类型的等值、范围检索,同时进一步优化倒排索引的查询性能、使其更加契合日志数据分析的场景需求

在Apache Doris 2.0 给大家带来了全新的倒排索引,利用Doris的MPP执行框架、向量化计算引擎、列式存储、标准SQL、CBO的查询优化器等特性为用户提供高性能,低成本的日志分析服务。

通过在 Apache Doris 2.0.0 最新版本的探索与持续优化,在相同硬件配置和数据集的测试表现上,Apache Doris 在数据库内核实现高性能倒排索引后,相对于 ES 实现了日志数据写入速度提升 4 倍、存储空间降低 80%、查询性能提升 2 倍,再结合 Apache Doris 2.0.0 版本引入的冷热数据分离特性,整体性价比提升 10 倍以上!

关于Doris 倒排索引的更多介绍可以参考:https://mp.weixin.qq.com/s/WJXKyudW8CJPqlUiAro_KQ

下面我们将以Apache Doris 2.0 为例给大家演示怎么使用Doris来进行日志分析。我将使用下列组件来完成这个工作。演示环境是在Macos(M1芯片) 下,如果你在Linux 系统下,操作也是一样的。

  1. Apache Doris 2.0
  2. Logstash-7.17.4
  3. Filebeats-8.7.1
  4. Grafana

2. 系统安装

2.1 安装 Doris

如果你是其他Linux 系统可以直接从官网下载预编译好的Doris 2.0 安装包:

https://doris.apache.org/zh-CN/download

如果你也是Macos系统,可以参考官网文档进行本地编译:

https://doris.apache.org/zh-CN/docs/1.2/install/source-install/compilation-mac

安装可以参考:

https://zhuanlan.zhihu.com/p/559718796

2.2 安装 Nginx

Nginx的安装我也是通过Brew 安装的,其他平台的Nginx安装,请自行搜索,

brew install nginx

首先我们这里分析的是Nginx的日志信息,我对Nginx的日志格式进行了调整,特别是时间具体的配置信息如下:

这里调整了 log_format 配置,每个字段时间分隔符指定成了 # ,同时将时间格式调成yyyy-MM-dd HH:mm:ss 格式

#user nobody;
worker_processes 1;

#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;

#pid       logs/nginx.pid;

events {
  worker_connections 1024;
}

http {
  include       mime.types;
  default_type application/octet-stream;

  log_format main '$year-$month-$day $hour:$minutes:$seconds#$remote_addr#$remote_user#"$request"#"$uri"#'                   '$status#$request_time#$request_length#$body_bytes_sent#$bytes_sent#$ssl_protocol#$ssl_cipher#'
                  '$http_referer#$http_x_forwarded_for#"$http_user_agent"';


  #log_format main '$remote_addr - $remote_user [$time_local] "$request" '
  #                 '$status $body_bytes_sent "$http_referer" '
  #                 '"$http_user_agent" "$http_x_forwarded_for"';
  access_log logs/access.log main;


  sendfile       on;
  #tcp_nopush     on;

  #keepalive_timeout 0;
  keepalive_timeout 65;

  #gzip on;

  server {
      listen       80;
      server_name localhost;

      #charset koi8-r;
     if ($time_iso8601 ~ "^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2})") {
         set $year $1;
         set $month $2;
         set $day $3;
         set $hour $4;
         set $minutes $5;
         set $seconds $6;
     }


      #access_log logs/host.access.log main;

      location / {
          root   html;
          index index.html index.htm;
      }

      #error_page 404             /404.html;

      # redirect server error pages to the static page /50x.html
      #
      error_page   500 502 503 504 /50x.html;
      location = /50x.html {
          root   html;
      }
  }

  include servers/*;
}

Nginx 安装好之后只有一个默认的欢迎页,我这边为了生成更多日志,我在Nginx下本地部署了Doris的官网

访问后生成的日志格式如下:

2023-05-23 00:17:49#127.0.0.1#-#"GET /zh-CN/blog/summit HTTP/1.1"#"/zh-CN/blog/summit"#301#0.000#838#169#379#-#-#-#-#"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36 Edg/115.0.0.0"
2023-05-23 00:17:49#127.0.0.1#-#"GET /zh-CN/blog/summit/ HTTP/1.1"#"/zh-CN/blog/summit/index.html"#200#0.000#839#65503#65744#-#-#-#-#"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36 Edg/115.0.0.0"

2.3 安装Logstash

我这边是直接使用 Brew 进行直接安装的,安装命令如下:

brew install elastic/tap/logstash-full

Logstash 配置文件目录:/opt/homebrew/etc/logstash

启动命令目录:/opt/homebrew/Cellar/logstash-full/7.17.4/bin/logstash

创建并使用管道配置文件:一个 Logstash 管理通常有一个或多个 input, filter 和 output 插件

验证通道,我们使用命令行输入级命令行输出的方式

/opt/homebrew/Cellar/logstash-full/7.17.4/bin/logstash -e 'input { stdin { } } output { stdout { } }'

随便输入一串数组回车可以看到下面的信息:

我们在 Logstash 配置目录下创建一个新的Doris的管道配置文件:doris.yaml

input {
beats {
  host =>"192.168.66.95"
  port => 5044
}
}
output {
  doris {
      http_hosts => [ "http://192.168.66.95:8030" ]
      user => "root"
      password => "zhangfeng"
      db => "demo"
      table => "nginx_log"
      label_prefix => "doris_logstash_nginx_log"
      column_separator => "#"
      columns => "http_time ,remote_addr,remote_user,request ,uri ,status,request_time,request_length,body_bytes_sent,bytes_sent ,ssl_protocol ,ssl_cipher ,http_referer ,http_x_forwarded_for ,http_user_agent"
  }
}

具体Doris的管道配置说明如下:

连接相关配置:

配置说明
http_hostsFE的HTTP交互地址。 例如: ["http://fe1:8030", "http://fe2:8030"]
user用户名,该用户需要有doris对应库表的导入权限
password密码
db数据库名
table表名
label_prefix导入标识前缀,最终生成的标识为 {label_prefix}{db}{table}_{time_stamp}

导入相关配置:

配置说明
column_separator列分割符,默认为\t。
columns用于指定导入文件中的列和 table 中的列的对应关系。
where导入任务指定的过滤条件。
max_filter_ratio导入任务的最大容忍率,默认零容忍。
partition待导入表的 Partition 信息。
timeout超时时间,默认为600s。
strict_mode严格模式,默认为false。
timezone指定本次导入所使用的时区,默认为东八区。
exec_mem_limit导入内存限制,默认为 2GB,单位为字节。

其他配置

配置说明
save_on_failure如果导入失败是否在本地保存,默认为true
save_dir本地保存目录,默认为 /tmp
automatic_retries失败时重试最大次数,默认为3
batch_size每批次最多处理的event数量,默认为100000
idle_flush_time最大间隔时间,默认为20(秒)

启动指定管道的命令如下:

/opt/homebrew/Cellar/logstash-full/7.17.4/bin/logstash -f /opt/homebrew/etc/logstash/doris.yaml --config.reload.automatic

启动之后,Logstash 开始通过管道 Input 采集数据,然后按照管道 output 配置的输出管道输出到指定的地方。

2.4 安装Filebeats

我这边是直接使用 Brew 进行直接安装的,安装命令如下:

brew install filebeat

配置 Filebeats

vi /opt/homebrew/etc/filebeat/filebeat.yml

修改下面几项:

filebeat.inputs:

# Each - is an input. Most options can be set at the input level, so
# you can use different inputs for various configurations.
# Below are the input specific configurations.

# filestream is an input for collecting log messages from files.
- type: log

# Unique ID among all inputs, an ID is required.
id: my-filestream-id

# Change to true to enable this input configuration.
enabled: true

# Paths that should be crawled and fetched. Glob based paths.
paths:
  - /opt/homebrew/Cellar/nginx/1.23.4/logs/access.log
  #- c:\programdata\elasticsearch\logs\*
   
  ......
   
#output.elasticsearch:
# Array of hosts to connect to.
hosts: ["localhost:9200"]

# Protocol - either `http` (default) or `https`.
#protocol: "https"

# Authentication credentials - either API key or username/password.
#api_key: "id:api_key"
#username: "elastic"
#password: "changeme"

# ------------------------------ Logstash Output -------------------------------
output.logstash:
# The Logstash hosts
hosts: ["192.168.66.95:5044"]
   
  1. type :改成 log
  2. enabled :改成 true
  3. paths :这里是你要采集的日志文件路径
  4. output.elasticsearch :注释掉
  5. output.logstash :打开

启动Filebeats

/opt/homebrew/opt/filebeat/bin/filebeat -e -c /opt/homebrew/etc/filebeat/filebeat.yml -d "publish"

2.5 编译安装 Doris Logstash 插件

下载 Doris 源码:

git clone https://github.com/apache/doris.git

在extension/logstash/ 目录下执行

gem build logstash-output-doris.gemspec

你将在同目录下得到 logstash-output-doris-{version}.gem 文件

安装 Doris Logstash 插件:

/opt/homebrew/opt/filebeat/bin/filebeat -e -c /opt/homebrew/etc/filebeat/filebeat.yml logstash-output-doris-{version}.gem

安装成功之后可以看到提示信息:

3. 采集分析

这里我们主要使用到Doris 2.0 里的新功能倒排索引,Doris 倒排索引的语法如下:

  1. 建表时指定索引
CREATE TABLE table_name
(
columns_difinition,
 INDEX idx_name1(column_name1) USING INVERTED [PROPERTIES("parser" = "english|chinese")] [COMMENT 'your comment']
 INDEX idx_name2(column_name2) USING INVERTED [PROPERTIES("parser" = "english|chinese")] [COMMENT 'your comment']
)
table_properties;
  1. Alter方式添加索引
  -- 语法1
  CREATE INDEX idx_name ON table_name(column_name) USING INVERTED [PROPERTIES("parser" = "english|chinese")] [COMMENT 'your comment'];
  -- 语法2
  ALTER TABLE table_name ADD INDEX idx_name(column_name) USING INVERTED [PROPERTIES("parser" = "english|chinese")] [COMMENT 'your comment'];

语法说明:

  • 建表时定义倒排索引,语法说明如下
    • 默认不指定代表不分词
    • english是英文分词,适合被索引列是英文的情况,用空格和标点符号分词,性能高
    • chinese是中文分词,适合被索引列有中文或者中英文混合的情况,采用jieba分词库,性能比english分词低
    • USING INVERTED 是必须的,用于指定索引类型是倒排索引
    • PROPERTIES 是可选的,用于指定倒排索引的额外属性,目前有一个属性parser指定分词器
    • COMMENT 是可选的,用于指定注释

下面这个是我这个例子的创建和Nginx日志格式相对应的表结构,建表语句如下:

CREATE TABLE nginx_log(
  http_time datetimev2,
  remote_addr varchar(200),
  remote_user varchar(200),
  request string,
  uri string,
   status int,
  request_time decimal(12,6),
  request_length int,
  body_bytes_sent int,
  bytes_sent int,
  ssl_protocol varchar(200),
  ssl_cipher varchar(200),
  http_referer varchar(200),
  http_x_forwarded_for  varchar(200),
  http_user_agent string,
   INDEX idx_request(request) USING INVERTED PROPERTIES("parser" = "english") ,
   INDEX idx_uri(uri) USING INVERTED PROPERTIES("parser" = "english") ,
   INDEX idx_remote_addr(remote_addr) USING INVERTED PROPERTIES("parser" = "english") ,
   INDEX idx_http_user_agent(http_user_agent) USING INVERTED PROPERTIES("parser" = "english")
)
Duplicate KEY(`http_time`, `remote_addr`)
DISTRIBUTED BY HASH(`http_time`) BUCKETS 2
PROPERTIES (
"replication_allocation" = "tag.location.default: 1",
"in_memory" = "false",
"storage_format" = "V2"
);

这里我对部分字段创建的了倒排索引,并指定分词是英文分析,如果你的日志中有中文,你可以指定成:chinese(中文分词)

Logstash 和 Filebeats 启动之后,我们在控制台可以看到 Logstash 采集数据入库的信息:

然后我们在MySQL 命令行下可以通过SQL进行查询日志的表

日志检索及分析

  1. 我们按照响应状态进行分组统计请求数量
mysql> select count(*),status  from nginx_log  group by status ;
+----------+--------+
| count(*) | status |
+----------+--------+
|       13 |    304 |
|        8 |    301 |
|        6 |    200 |
+----------+--------+

2. 统计访问社区栏目的要请求次数

mysql> select count(*) from nginx_log where  request MATCH_ANY 'community';
+----------+
| count(*) |
+----------+
|       12 |
+----------+
1 row in set (0.02 sec)

3. 统计访问博客栏目的要请求次数

mysql> select count(*) from nginx_log where  request MATCH_ANY 'blog';
+----------+
| count(*) |
+----------+
|        7 |
+----------+
1 row in set (0.03 sec)

4. Doris 倒排索引能力

Doris 倒排索引具备以下能力

  • 支持字符串类型的全文检索
    • 支持字符串全文检索,包括同时匹配多个关键字MATCH_ALL、匹配任意一个关键字MATCH_ANY
    • 支持字符串数组类型的全文检索
    • 支持英文、中文分词
  • 加速普通等值、范围查询,覆盖bitmap索引的功能,未来会代替bitmap索引
    • 支持字符串、数值、日期时间类型的 =, !=, >, >=, <, <= 快速过滤
    • 支持字符串、数字、日期时间数组类型的 =, !=, >, >=, <, <=
  • 支持完善的逻辑组合
    • 新增索引对OR NOT逻辑的下推
    • 支持多个条件的任意AND OR NOT组合
  • 支持灵活、快速的索引管理
    • 支持在创建表上定义倒排索引
    • 支持在已有的表上增加倒排索引,而且支持增量构建倒排索引,无需重写表中的已有数据
    • 支持删除已有表上的倒排索引,无需重写表中的已有数据

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

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

相关文章

Qcon 广州主题演讲:融云实时社区的海量消息分发实践

移步公众号文章 预约纸质版《作战地图》 5 月 26 日-27 日&#xff0c;QCon 全球软件开发大会落地广州。关注【融云全球互联网通信云】了解更多 融云 IM 服务架构师罗伟受邀分享“实时社区的海量消息分发实践”&#xff0c;从实践中来的前沿技术分享&#xff0c;收获现场开发者…

Nautilus Chain上首个DEX PoseiSwap即将开启IDO,潜力几何?

据悉&#xff0c;Nautilus Chain 上的首个 DEX PoseiSwap 即将开启 IDO &#xff0c;根据官方的最新公告显示&#xff0c;PoseiSwap 即将于 6 月 13 日至 6 月 14 日期间&#xff0c;在 Bounce 平台开启其治理通证 $POSE 的 IDO&#xff08;Initial DEX Offering&#xff09;&a…

openEuler Linux 部署 FineReport

openEuler Linux 部署 FineReport 部署环境 环境版本openEuler Linux22.03MySQL8.0.33FineReport11.0 环境准备 升级系统内核和软件 yum -y updatereboot安装常用工具软件 yum -y install vim tar net-tools 安装MySQL8 将 MySQL Yum 存储库添加到系统的存储库列表中 s…

【JavaEE】表白墙再升级(MySQL实现持久化)

表白墙再升级&#xff08;MySQL实现持久化&#xff09; 文章目录 【JavaEE】表白墙再升级&#xff08;MySQL实现持久化&#xff09;1. 后端引入JDBC的依赖2. 建库建表3. 编写数据库代码&#xff08;JDBC&#xff09;3.1 doGet方法改写3.1.1 构建本地数据源3.1.2 用本地数据源构…

移动端的轮播图

效果 技术选取 前端框架用的是vue3&#xff0c;使用的组件库为element-plus以及vant4 引入element-plus和vant4 安装element-plus cnpm install element-plus --save 安装按需导入 cnpm install -D unplugin-vue-components unplugin-auto-import 安装Vant cnpm i vant 按…

Fiddler抓包工具之fiddler的composer可以简单发送http协议的请求

一&#xff0c;composer的详解 右侧Composer区域&#xff0c;是测试接口的界面&#xff1a; 相关说明&#xff1a; 1.请求方式&#xff1a;点开可以勾选请求协议是get、post等 2.url地址栏&#xff1a;输入请求的url地址 3.请求头&#xff1a;第三块区域可以输入请求头信息…

图的简单理解

文章目录 1、图的基本概念2、图的存储结构2.1 邻接矩阵2.2 邻接表 3、图的遍历3.1 广度优先遍历3.2 深度优先遍历 4、最小生成树4.1 Kruskal算法4.2 Prim算法 5、最短路径5.1 单源最短路径–Dijkstra算法5.2 单源最短路径–Bellman-Ford算法5.3 多源最短路径 1、图的基本概念 …

路径规划算法:基于差分进化优化的路径规划算法- 附代码

路径规划算法&#xff1a;基于差分进化优化的路径规划算法- 附代码 文章目录 路径规划算法&#xff1a;基于差分进化优化的路径规划算法- 附代码1.算法原理1.1 环境设定1.2 约束条件1.3 适应度函数 2.算法结果3.MATLAB代码4.参考文献 摘要&#xff1a;本文主要介绍利用智能优化…

nginx的rewrite功能

常用的Nginx 正则表达式 ^匹配输入字符串的起始位置$匹配输入字符串的结束位置*匹配前面的字符零次或多次。如“ol*”能匹配“o”及“ol”、“oll”匹配前面的字符一次或多次。如“ol”能匹配“ol”及“oll”、“olll”&#xff0c;但不能匹配“o”?匹配前面的字符零次或一次…

【动态规划专栏】--简单-- 动态规划经典题型

目录 动态规划 动态规划思维&#xff08;基础&#xff09; 状态表示&#xff08;最重要&#xff09; 状态转移方程&#xff08;最难&#xff09; 初始化&#xff08;细节&#xff09; 填表顺序&#xff08;细节&#xff09; 返回值&#xff08;结果&#xff09; 解码方…

【Python FTP/SFTP】零基础也能轻松掌握的学习路线与参考资料

一、Python FTP/SFTP的学习路线 Python FTP/SFTP是Python语言的两种常用的文件传输协议。在学习Python网络编程过程中&#xff0c;学习FTP/SFTP是非常重要的一步。下面给出Python FTP/SFTP的学习路线&#xff1a; 了解FTP/SFTP协议 在开始学习Python FTP/SFTP之前&#xff0…

LSB信息隐藏——Python实现(完整解析版)

系列文章目录 仿射密码实验-Python实现 仿射密码实验——Python实现(完整解析版) DES密码实验-C语言实现 MD5密码实验——Python实现(完整解析版) 文章目录 系列文章目录前言实验方法实验环境实验内容实验步骤1.LSB原理2.确定设计模块Lsb——embdedLsb——extract 实验结果实验…

performance_schema 初相识 配置详解 应用

千金良方&#xff1a;MySQL性能优化金字塔法则 第4章 performance_schema初相识 第5章 performance_schema配置详解 第6章 performance_schema应用示例荟萃 简介 1、实时监控Server性能监控和诊断的工具 2、它提供了丰富的性能指标和事件&#xff0c;可以帮助你深入了解 MyS…

2023年6月PMP®项目管理认证招生简章

PMP认证是Project Management Institute在全球范围内推出的针对评价个人项目管理知识能力的资格认证体系。国内众多企业已把PMP认证定为项目经理人必须取得的重要资质。 【PMP认证收益】 1、能力的提升&#xff08;领导力&#xff0c;执行力&#xff0c;创新能力&#xff0c…

python 编译安装指定版本 for linux

python环境是linux中必备的&#xff0c;部分发行版会自带python&#xff0c;有时候需要安装手动安装 注意&#xff1a;如果需要多个版本并存&#xff0c;建议使用conda环境&#xff0c;如果自己配置多版本&#xff0c;需要用多个软链接 conda环境&#xff0c;可以参考&#x…

【CSS Zoro 01】说在前面 CSS概念 CSS语法 CSS选择器 元素 id 类 组合 通用 分组 属性 后代 子元素 相邻兄弟

CSS 说在前面概念语法 syntaxCSS选择器 说在前面 最近挺喜欢看One Piece的&#xff0c;并且发现前端三剑客如果对应上Sanji&#xff0c;Zoro和Luffy的话会很有趣&#xff0c;所以说非常想在博客里面对应上小彩蛋&#xff0c;即使会损失一些SEO&#xff0c;但是这样做对我来说很…

算法修炼之筑基篇——筑基一层(解决01背包问题)

✨博主&#xff1a;命运之光 ✨专栏&#xff1a;算法修炼之练气篇​​​​​ ✨博主的其他文章&#xff1a;点击进入博主的主页 前言&#xff1a;学习了算法修炼之练气篇想必各位蒟蒻们的基础已经非常的扎实了&#xff0c;下来我们进阶到算法修炼之筑基篇的学习。筑基期和练气期…

raise AssertionError(“Torch not compiled with CUDA enabled“)

1、运行代码可知&#xff0c;当前cuda不可用。 import torch print(torch.cuda.is_available()) # False 2、打开power shell or cmd&#xff0c;输入nvidia-smi命令&#xff0c;检查当前英伟达显卡信息。 可知当前驱动版本512.78&#xff0c;支持的cuda最高版本为11.6&…

时间序列教程 六、深度学习与时间序列分析结合

一、深度学习方法 与传统的时间序列预测模型相比,神经网络有以下几个好处: 1、自动学习如何将趋势、季节性和自相关等系列特征纳入预测。 2、能够捕捉非常复杂的模式。 3、可以同时建模许多相关的系列,而不是单独处理每个系列。 但是神经网络有一些劣势: 1、模型的构建可能…

PyCharm开发工具的安装与使用

PyCharm集成开发工具(IDE),是当下全球python开发者&#xff0c;使用最频繁的工具软件。绝大多数的python程序&#xff0c;都是在PyCharm工具内完成的开发。 1.先进行下载并安装它 下载官网地址&#xff1a;https://www.jetbrains.com/pycharm/download/#sectionwindows 宝子…