【分布式文件存储系统Minio】2024.12保姆级教程

文章目录

    • 1.介绍
        • 1.分布式文件系统
        • 2.基本概念
    • 2.环境搭建
        • 1.访问网址
        • 2.账号密码都是minioadmin
        • 3.创建一个桶
        • 4.**Docker安装miniomc突破7天限制**
          • 1.拉取镜像
          • 2.运行容器
          • 3.进行配置
            • 1.格式
            • 2.具体配置
          • 4.查看桶
          • 5.给桶开放权限
    • 3.搭建minio模块
        • 1.创建一个oss模块
          • 1.在sun-common下创建
          • 2.引入minio依赖
            • 1.sun-dependencies 锁定版本
            • 2.sun-common-oss 引入依赖
        • 2.sun-common-oss 模块
          • 1.概览
          • 2.MinioConfig.java
          • 3.FileInfo.java
          • 4.MinioUtil.java
          • 5.StorageAdapter.java
          • 6.MinioStorageAdapter.java
        • 3.sun-demo操作minio
          • 1.引入sun-common-oss
          • 2.application.yml 配置minio参数
          • 3.暴露接口 MinioController.java
          • 4.测试

1.介绍

1.分布式文件系统

CleanShot 2024-08-02 at 15.21.59@2x

CleanShot 2024-08-02 at 15.22.16@2x

2.基本概念

CleanShot 2024-08-02 at 15.34.01@2x

2.环境搭建

1.访问网址

http://ip:9090/

2.账号密码都是minioadmin
3.创建一个桶

CleanShot 2024-08-02 at 15.35.14@2x

CleanShot 2024-08-02 at 15.35.50@2x

4.Docker安装miniomc突破7天限制
1.拉取镜像
docker pull minio/mc:RELEASE.2023-11-15T22-45-58Z.fips
2.运行容器
docker run -it --entrypoint=/bin/sh minio/mc:RELEASE.2023-11-15T22-45-58Z.fips
3.进行配置
1.格式
mc config host add <ALIAS> <YOUR-S3-ENDPOINT> <YOUR-ACCESS-KEY> <YOUR-SECRET-KEY>
2.具体配置
mc config host add minio http://ip:9000 9i14IBbM2ysYVPDa52oK eXRpXcXcX5w4Tmy8HprUkemVi5zzrbpS4NksxxtU
4.查看桶
mc ls minio
5.给桶开放权限
mc anonymous set download minio/桶

3.搭建minio模块

1.创建一个oss模块
1.在sun-common下创建

CleanShot 2024-08-02 at 15.37.36@2x

2.引入minio依赖
1.sun-dependencies 锁定版本
        <minio.version>8.2.0</minio.version><!-- minio依赖 --><dependency><groupId>io.minio</groupId><artifactId>minio</artifactId><version>${minio.version}</version></dependency>
2.sun-common-oss 引入依赖
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><!-- 继承父模块的版本和通用依赖 --><parent><groupId>com.sunxiansheng</groupId><artifactId>sun-common</artifactId><version>1.0-SNAPSHOT</version></parent><artifactId>sun-common-oss</artifactId><!-- 子模块的version,如果不写就默认跟父模块的一样 --><version>${children.version}</version><dependencies><!-- minio依赖 --><dependency><groupId>io.minio</groupId><artifactId>minio</artifactId></dependency><!-- spring-boot-starter-web --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><exclusions><exclusion><artifactId>spring-boot-starter-logging</artifactId><groupId>org.springframework.boot</groupId></exclusion></exclusions></dependency></dependencies></project>
2.sun-common-oss 模块
1.概览

CleanShot 2024-08-02 at 17.55.46@2x

2.MinioConfig.java
package com.sunxiansheng.oss.config;import io.minio.MinioClient;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;/*** Description: minio配置管理* @Author sun* @Create 2024/5/31 9:22* @Version 1.0*/
@Configuration
public class MinioConfig {/*** minioUrl*/@Value("${minio.url}")private String url;/*** minio账户*/@Value("${minio.accessKey}")private String accessKey;/*** minio密码*/@Value("${minio.secretKey}")private String secretKey;/*** 构造minioClient*/@Beanpublic MinioClient getMinioClient() {return MinioClient.builder().endpoint(url).credentials(accessKey, secretKey).build();}}
3.FileInfo.java
package com.sunxiansheng.oss.entity;import lombok.Data;/*** FileInfo类用于存储文件的基本信息,包括文件名、是否为目录的标志以及文件的ETag。* 这个类可以在对象存储系统中用于描述文件的属性。* @Author sun* @Create 2024/5/31 9:47* @Version 1.0*/
@Data
public class FileInfo {// 文件的名称private String fileName;// 指示该文件是否为目录的标志private Boolean directoryFlag;// 文件的ETag,用于标识文件的唯一性private String etag;}
4.MinioUtil.java
package com.sunxiansheng.oss.util;import com.sunxiansheng.oss.entity.FileInfo;
import io.minio.*;
import io.minio.http.Method;
import io.minio.messages.Bucket;
import io.minio.messages.Item;
import org.springframework.stereotype.Component;import javax.annotation.Resource;
import java.io.InputStream;
import java.util.LinkedList;
import java.util.List;
import java.util.stream.Collectors;/*** MinioUtil是一个用于与MinIO对象存储服务进行交互的工具类。* 提供了一系列方法用于管理存储桶和对象,包括创建桶、上传文件、下载文件、删除文件等操作。* @Author sun* @Create 2024/5/31 9:30* @Version 1.0*/
@Component
public class MinioUtil {@Resourceprivate MinioClient minioClient; // MinIO客户端实例,用于执行各种存储操作。/*** 创建存储桶。* 如果指定名称的存储桶不存在,则创建它。** @param bucket 存储桶的名称* @throws Exception 如果创建存储桶时发生错误*/public void createBucket(String bucket) throws Exception {boolean exists = minioClient.bucketExists(BucketExistsArgs.builder().bucket(bucket).build());if (!exists) {minioClient.makeBucket(MakeBucketArgs.builder().bucket(bucket).build());}}/*** 上传文件到指定存储桶。** @param inputStream 文件输入流* @param bucket 存储桶的名称* @param objectName 对象名称,即文件在存储桶中的名称* @throws Exception 如果上传文件时发生错误*/public void uploadFile(InputStream inputStream, String bucket, String objectName) throws Exception {minioClient.putObject(PutObjectArgs.builder().bucket(bucket).object(objectName).stream(inputStream, -1, 5242889L).build());}/*** 获取所有存储桶的名称列表。** @return 存储桶名称的列表* @throws Exception 如果获取存储桶列表时发生错误*/public List<String> getAllBucket() throws Exception {List<Bucket> buckets = minioClient.listBuckets();return buckets.stream().map(Bucket::name).collect(Collectors.toList());}/*** 获取指定存储桶中的所有文件信息。** @param bucket 存储桶的名称* @return 文件信息列表,其中包含文件名、是否为目录标志和ETag* @throws Exception 如果获取文件列表时发生错误*/public List<FileInfo> getAllFile(String bucket) throws Exception {Iterable<Result<Item>> results = minioClient.listObjects(ListObjectsArgs.builder().bucket(bucket).build());List<FileInfo> fileInfoList = new LinkedList<>();for (Result<Item> result : results) {FileInfo fileInfo = new FileInfo();Item item = result.get();fileInfo.setFileName(item.objectName());fileInfo.setDirectoryFlag(item.isDir());fileInfo.setEtag(item.etag());fileInfoList.add(fileInfo);}return fileInfoList;}/*** 从指定存储桶下载文件。** @param bucket 存储桶的名称* @param objectName 对象名称,即文件在存储桶中的名称* @return 文件输入流,用于读取下载的文件内容* @throws Exception 如果下载文件时发生错误*/public InputStream downLoad(String bucket, String objectName) throws Exception {return minioClient.getObject(GetObjectArgs.builder().bucket(bucket).object(objectName).build());}/*** 删除指定存储桶。* 注意:存储桶必须为空才能被删除。** @param bucket 存储桶的名称* @throws Exception 如果删除存储桶时发生错误*/public void deleteBucket(String bucket) throws Exception {minioClient.removeBucket(RemoveBucketArgs.builder().bucket(bucket).build());}/*** 删除指定存储桶中的文件。** @param bucket 存储桶的名称* @param objectName 对象名称,即要删除的文件在存储桶中的名称* @throws Exception 如果删除文件时发生错误*/public void deleteObject(String bucket, String objectName) throws Exception {minioClient.removeObject(RemoveObjectArgs.builder().bucket(bucket).object(objectName).build());}/*** 获取文件的预览URL。* 该URL可以用于在浏览器中查看或下载文件。** @param bucketName 存储桶的名称* @param objectName 对象名称,即文件在存储桶中的名称* @return 文件的预签名URL* @throws Exception 如果获取预签名URL时发生错误*/public String getPreviewFileUrl(String bucketName, String objectName) throws Exception{GetPresignedObjectUrlArgs args = GetPresignedObjectUrlArgs.builder().method(Method.GET).bucket(bucketName).object(objectName).build();return minioClient.getPresignedObjectUrl(args);}
}
5.StorageAdapter.java
package com.sunxiansheng.oss.adapter;import com.sunxiansheng.oss.entity.FileInfo;
import org.springframework.web.multipart.MultipartFile;import java.io.InputStream;
import java.util.List;/*** StorageAdapter接口定义了与对象存储服务交互的方法。* 这些方法提供了基本的存储操作,如创建存储桶、上传和下载文件、获取文件信息等。* @Author sun* @Create 2024/5/31 10:03* @Version 1.0*/
public interface StorageAdapter {/*** 创建存储桶。* 如果指定名称的存储桶不存在,则创建它。** @param bucket 存储桶的名称*/void createBucket(String bucket);/*** 上传文件到指定存储桶。** @param uploadFile 要上传的文件* @param bucket 存储桶的名称* @param objectName 对象名称,即文件在存储桶中的名称*/String uploadFile(MultipartFile uploadFile, String bucket, String objectName);/*** 获取所有存储桶的名称列表。** @return 存储桶名称的列表*/List<String> getAllBucket();/*** 获取指定存储桶中的所有文件信息。** @param bucket 存储桶的名称* @return 文件信息列表,其中包含文件名、是否为目录标志和ETag*/List<FileInfo> getAllFile(String bucket);/*** 从指定存储桶下载文件。** @param bucket 存储桶的名称* @param objectName 对象名称,即文件在存储桶中的名称* @return 文件输入流,用于读取下载的文件内容*/InputStream downLoad(String bucket, String objectName);/*** 删除指定存储桶。* 注意:存储桶必须为空才能被删除。** @param bucket 存储桶的名称*/void deleteBucket(String bucket);/*** 删除指定存储桶中的文件。** @param bucket 存储桶的名称* @param objectName 对象名称,即要删除的文件在存储桶中的名称*/void deleteObject(String bucket, String objectName);/*** 获取文件的访问URL。* 该URL可以用于在浏览器中查看或下载文件。* @param originalFilename 原始文件名* @param bucket 存储桶的名称* @param objectName 对象名称,即文件在存储桶中的名称* @return 文件的URL*/public String getUrl(String originalFilename, String bucket, String objectName);
}
6.MinioStorageAdapter.java
package com.sunxiansheng.oss.adapter;import com.sunxiansheng.oss.entity.FileInfo;
import com.sunxiansheng.oss.util.MinioUtil;
import lombok.SneakyThrows;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import org.springframework.web.multipart.MultipartFile;import javax.annotation.Resource;
import java.io.InputStream;
import java.util.List;/*** MinioStorageAdapter类实现了StorageAdapter接口,使用MinioUtil类与MinIO对象存储服务进行交互。* 提供了一系列方法来管理存储桶和对象,包括创建桶、上传文件、下载文件、删除文件等操作。* @Author sun* @Create 2024/5/31 10:06* @Version 1.0*/
@Component
public class MinioStorageAdapter implements StorageAdapter {@Resourceprivate MinioUtil minioUtil; // 使用MinioUtil工具类来执行存储操作/*** MinIO服务的URL。* 该URL通常在配置文件中设置,用于构建文件访问的完整URL。*/@Value("${minio.url}")private String url;/*** 创建存储桶。* 使用MinioUtil工具类创建存储桶。** @param bucket 存储桶的名称*/@Override@SneakyThrowspublic void createBucket(String bucket) {minioUtil.createBucket(bucket);}// ============================== 文件上传后的URL:url + 桶名 + 上传时的objectName ==============================/*** 上传文件到指定存储桶,并返回可访问的url* 使用提供的对象名称或文件的原始名称进行上传。** @param uploadFile 要上传的文件* @param bucket 存储桶的名称* @param objectName 对象名称,表示完整的文件路径和名称*/@Override@SneakyThrowspublic String uploadFile(MultipartFile uploadFile, String bucket, String objectName) {minioUtil.createBucket(bucket);String finalObjectName = generateObjectName(uploadFile.getOriginalFilename(), objectName);minioUtil.uploadFile(uploadFile.getInputStream(), bucket, finalObjectName);return getUrl(uploadFile.getOriginalFilename(), bucket, objectName);}/*** 自定义对象名的格式,上传时的对象名是什么格式,那么下载时的对象名也是什么格式* url的格式就是 url + 桶名 + 对象名** @param originalFilename 原始文件名字* @param objectName 提供的对象名称* @return 最终用于存储的对象名称*/private String generateObjectName(String originalFilename, String objectName) {// 如果对象名为空,则使用文件的原始名称作为对象名if (objectName == null) {return originalFilename;}// 如果对象名不为空,则对象名 + / + 文件名作为对象名return objectName + "/" + originalFilename;}/*** 获取文件的访问URL。* 该URL可以用于在浏览器中查看或下载文件。** @param bucket 存储桶的名称* @param objectName 对象名称,即文件在存储桶中的名称* @return 文件的完整URL*/@Override@SneakyThrowspublic String getUrl(String originalFilename, String bucket, String objectName) {// 首先生成对象名String finalObjectName = generateObjectName(originalFilename, objectName);// url的格式就是 url + 桶名 + 对象名return url + "/" + bucket + "/" + finalObjectName;}// ============================== 文件上传后的URL:url + 桶名 + 上传时的objectName ==============================/*** 获取所有存储桶的名称列表。** @return 存储桶名称的列表*/@Override@SneakyThrowspublic List<String> getAllBucket() {return minioUtil.getAllBucket();}/*** 获取指定存储桶中的所有文件信息。** @param bucket 存储桶的名称* @return 文件信息列表,其中包含文件名、是否为目录标志和ETag*/@Override@SneakyThrowspublic List<FileInfo> getAllFile(String bucket) {return minioUtil.getAllFile(bucket);}/*** 从指定存储桶下载文件。** @param bucket 存储桶的名称* @param objectName 对象名称,即文件在存储桶中的名称* @return 文件输入流,用于读取下载的文件内容*/@Override@SneakyThrowspublic InputStream downLoad(String bucket, String objectName) {return minioUtil.downLoad(bucket, objectName);}/*** 删除指定存储桶。* 注意:存储桶必须为空才能被删除。** @param bucket 存储桶的名称*/@Override@SneakyThrowspublic void deleteBucket(String bucket) {minioUtil.deleteBucket(bucket);}/*** 删除指定存储桶中的文件。** @param bucket 存储桶的名称* @param objectName 对象名称,即要删除的文件在存储桶中的名称*/@Override@SneakyThrowspublic void deleteObject(String bucket, String objectName) {minioUtil.deleteObject(bucket, objectName);}}
3.sun-demo操作minio
1.引入sun-common-oss
        <!-- 引入sun-common-oss --><dependency><groupId>com.sunxiansheng</groupId><artifactId>sun-common-oss</artifactId><version>1.0-SNAPSHOT</version></dependency>
2.application.yml 配置minio参数
# minio配置
minio:url: http://ip:9000accessKey: minioadminsecretKey: minioadmin
3.暴露接口 MinioController.java
package com.sunxiansheng.user.controller;import com.sunxiansheng.oss.adapter.StorageAdapter;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;import javax.annotation.Resource;/*** Description:* @Author sun* @Create 2024/8/2 16:25* @Version 1.0*/
@RestController
public class MinioController {@Resourceprivate StorageAdapter storageAdapter;/*** 上传文件并返回url*/@RequestMapping("/upload")public String upload(MultipartFile uploadFile, String bucket, String objectName) throws Exception {return storageAdapter.uploadFile(uploadFile, bucket, objectName);}}
4.测试

CleanShot 2024-08-02 at 18.18.25@2x

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2021.12.28基于UDP同信的相关流程

作业 1、将TCP的CS模型再敲一遍 服务器 #include <myhead.h> #define PORT 8888 #define IP "192.168.124.123" int main(int argc, const char *argv[]) {//创建套接字//绑定本机IP和端口号//监听客户端请求//接收客户端连接请求//收发消息//创建套接字int…

StarRocks 存算分离在得物的降本增效实践

编者荐语&#xff1a; 得物优化数据引擎布局&#xff0c;近期将 4000 核 ClickHouse 迁移至自建 StarRocks&#xff0c;成本降低 40%&#xff0c;查询耗时减半&#xff0c;集群稳定性显著提升。本文详解迁移实践与成果&#xff0c;文末附丁凯剑老师 StarRocks Summit Asia 2024…

vue视频录制 限制大小,限制时长

<template><div style"height: 100vh;background: #000;"><span style"color: #fff;font-size: 18px;">切换数量&#xff1a;{{ devices.length }}</span><video ref"video" autoplay muted playsinline></vid…

若依框架之简历pdf文档预览功能

一、前端 &#xff08;1&#xff09;安装插件vue-pdf&#xff1a;npm install vue-pdf &#xff08;2&#xff09;引入方式&#xff1a;import pdf from "vue-pdf"; &#xff08;3&#xff09;components注入方式&#xff1a;components:{pdf} &#xff08;4&…

永磁同步电机负载估计算法--自适应龙伯格观测器

一、原理介绍 龙贝格扰动观测器的参数可以通过带宽配置法进行整定&#xff0c;将观测器带宽设为L&#xff0c;选取大的L可以加快观测器的收敛速度&#xff0c;但是L过大会导致系统阶跃响应出现超调、稳态性能差等问题。因此&#xff0c;在龙贝格观测器中引入表征系统状态变量x…

Python机器学习笔记(十七、分箱、离散化、线性模型与树)

数据表示的最佳方法&#xff1a;取决于数据的语义&#xff0c;所使用的模型种类。 线性模型与基于树的模型&#xff08;决策树、梯度提升树和随机森林&#xff09;是两种成员很多同时又非常常用的模 型&#xff0c;它们在处理不同的特征表示时就具有非常不同的性质。我们使用w…

Spring Boot介绍、入门案例、环境准备、POM文件解读

文章目录 1.Spring Boot(脚手架)2.微服务3.环境准备3.1创建SpringBoot项目3.2导入SpringBoot相关依赖3.3编写一个主程序&#xff1b;启动Spring Boot应用3.4编写相关的Controller、Service3.5运行主程序测试3.6简化部署 4.Hello World探究4.1POM文件4.1.1父项目4.1.2父项目的父…

嵌入式入门Day35

网络编程 Day2 套接字socket基于TCP通信的流程服务器端客户端TCP通信API 基于UDP通信的流程服务器端客户端 作业 套接字socket socket套接字本质是一个特殊的文件&#xff0c;在原始的Linux中&#xff0c;它和管道&#xff0c;消息队列&#xff0c;共享内存&#xff0c;信号等…

安卓系统主板_迷你安卓主板定制开发_联发科MTK安卓主板方案

安卓主板搭载联发科MT8766处理器&#xff0c;采用了四核Cortex-A53架构&#xff0c;高效能和低功耗设计。其在4G网络待机时的电流消耗仅为10-15mA/h&#xff0c;支持高达2.0GHz的主频。主板内置IMG GE832 GPU&#xff0c;运行Android 9.0系统&#xff0c;内存配置选项丰富&…

centos,789使用mamba快速安装R及语言包devtools

如何进入R语言运行环境请参考&#xff1a;Centos7_miniconda_devtools安装_R语言入门之R包的安装_r语言devtools包怎么安装-CSDN博客 在R里面使用安装devtools经常遇到依赖问题&#xff0c;排除过程过于费时&#xff0c;使用conda安装包等待时间长等。下面演示centos,789都是一…

人工智能(AI)简史:推动新时代的科技力量

一、人工智能简介 人工智能&#xff08;AI&#xff0c;Artificial Intelligence&#xff09;是计算机科学的一个分支&#xff0c;旨在研究和开发可以模拟、扩展或增强人类智能的系统。它涉及多种技术和方法&#xff0c;包括机器学习、深度学习、自然语言处理&#xff08;NLP&a…

【笔记】在虚拟机中通过apache2给一个主机上配置多个web服务器

&#xff08;配置出来的web服务器又叫虚拟主机……&#xff09; 下载apache2 sudo apt update sudo apt install apache2 &#xff08;一&#xff09;ip相同 web端口不同的web服务器 进入 /var/www/html 创建站点一和站点二的目录文件&#xff08;目录文件名自定义哈&#x…

linux装git

前言 以 deepin 深度系统为例&#xff0c;安装命 令行版 Git 非常简单。 安装 注意&#xff1a;需要输入账号密码&#xff0c;否则无法进行。 打开终端&#xff0c;执行如下命令即可。 sudo apt-get install git成功 如下图所示&#xff0c;输入 git &#xff0c;命令识别即…

【Spark】架构与核心组件:大数据时代的必备技能(下)

&#x1f407;明明跟你说过&#xff1a;个人主页 &#x1f3c5;个人专栏&#xff1a;《大数据前沿&#xff1a;技术与应用并进》&#x1f3c5; &#x1f516;行路有良友&#xff0c;便是天堂&#x1f516; 目录 一、引言 1、什么是Apache Spark 2、Spark 的应用场景&…

NLP中的神经网络基础

一&#xff1a;多层感知器模型 1&#xff1a;感知器 解释一下&#xff0c;为什么写成 wxb>0 &#xff0c;其实原本是 wx > t ,t就是阈值&#xff0c;超过这个阈值fx就为1&#xff0c;现在把t放在左边。 在感知器里面涉及到两个问题&#xff1a; 第一个&#xff0c;特征提…

第十一章 图论

题目描述&#xff1a; 阿里这学期修了计算机组织和架构课程。他了解到指令之间可能存在依赖关系&#xff0c;比如WAR&#xff08;读后写&#xff09;、WAW、RAW。 如果两个指令之间的距离小于安全距离&#xff0c;则会导致危险&#xff0c;从而可能导致错误的结果。因此&#…

嵌入式系统 第七讲 ARM-Linux内核

• 7.1 ARM-Linux内核简介 • 内核&#xff1a;是一个操作系统的核心。是基于硬件的第一层软件扩充&#xff0c; 提供操作系统的最基本的功能&#xff0c;是操作系统工作的基础&#xff0c;它负责管理系统的进程、内存、设备驱动程序、文件和网络系统&#xff0c; 决定着系统的…

win11蓝屏死机 TPM-WMI

1. 打开win11的事件查看器&#xff0c;定位错误 最近两次都是 KB5016061&#xff1a;安全启动数据库和 DBX 变量更新事件 - Microsoft 支持 事件源 TPM-WMI 事件 ID 1796 2. 解决方案 打开注册表&#xff1a;计算机\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Contro…

Linux命令——3.网络与用户

文章目录 一、网络1.网络测试与诊断2.网络接口配置3.无线网络配置4.防火墙与网络管理6.防火墙管理1&#xff09;firewalld命令2&#xff09;iptables命令 二、用户和群组1.管理员模式2.用户账户管理1&#xff09;useradd创建2&#xff09;usermod修改3&#xff09;userdel 删除…

机器学习算法基础知识1:决策树

机器学习算法基础知识1&#xff1a;决策树 一、本文内容与前置知识点1. 本文内容2. 前置知识点 二、场景描述三、决策树的训练1. 决策树训练方式&#xff08;1&#xff09;分类原则-Gini&#xff08;2&#xff09;分类原则-entropy&#xff08;3&#xff09;加权系数-样本量&am…