Spark大数据ETL实战:数据清洗与转换最佳实践

Spark大数据ETL实战:数据清洗与转换最佳实践

关键词:Spark、ETL、数据清洗、数据转换、大数据处理、最佳实践、分布式计算
摘要:本文系统解析Apache Spark在大数据ETL中的核心应用,聚焦数据清洗与转换的关键技术。通过深入剖析Spark架构原理、核心算法实现、数学模型构建及实战案例,结合Python代码演示数据质量检测、缺失值处理、格式标准化等核心操作。同时提供开发环境搭建指南、行业应用场景分析及工具资源推荐,帮助读者掌握基于Spark的高效ETL流水线设计与优化策略,解决多源异构数据处理中的实际问题。

1. 背景介绍

1.1 目的和范围

随着企业数据规模呈指数级增长,传统ETL工具在处理PB级数据时面临性能瓶颈,而Spark凭借其分布式计算框架和内存计算优势,成为大数据ETL的首选方案。本文聚焦Spark在数据清洗(Data Cleaning)和数据转换(Data Transformation)环节的最佳实践,涵盖从数据接入到高质量数据输出的完整流程,包括技术原理、算法实现、实战案例及性能优化策略。

1.2 预期读者

  • 数据工程师与大数据开发人员
  • 希望掌握Spark ETL核心技术的技术管理者
  • 从事数据科学与数据分析的相关从业者

1.3 文档结构概述

本文采用“原理-方法-实战-应用”的逻辑结构,依次讲解Spark ETL的核心概念、算法原理、数学模型、实战案例及行业应用,最后提供工具资源和未来趋势分析。

1.4 术语表

1.4.1 核心术语定义
  • ETL:Extract-Transform-Load(抽取-转换-加载),数据从数据源经过清洗转换后加载到目标存储的过程。
  • 数据清洗:处理数据中的错误、缺失、重复、格式不一致等问题,提升数据质量。
  • 数据转换:将数据从一种格式转换为另一种格式,或通过计算、聚合等操作生成新数据。
  • Spark DataFrame:Spark中用于结构化数据处理的分布式数据集,支持类似SQL的操作。
  • DAG(有向无环图):Spark任务调度的底层逻辑,将作业分解为多个阶段(Stage)执行。
1.4.2 相关概念解释
  • RDD(弹性分布式数据集):Spark的基础数据结构,支持分布式内存计算,但DataFrame/Dataset在结构化处理中更高效。
  • Schema:定义数据集中列的名称、类型及元数据,是DataFrame结构化处理的基础。
  • UDF(用户自定义函数):用户自定义的Spark函数,用于实现自定义数据转换逻辑。
1.4.3 缩略词列表
缩写全称
CSV逗号分隔值文件(Comma-Separated Values)
JSONJavaScript对象表示法(JavaScript Object Notation)
Parquet列式存储格式(Parquet File Format)
JDBCJava数据库连接(Java Database Connectivity)

2. 核心概念与联系

2.1 Spark ETL架构原理

Spark ETL流水线的核心组件包括数据源(Source)、数据处理逻辑(Transformation)和数据目的地(Sink)。数据源支持CSV、JSON、Parquet、JDBC等多种格式,处理逻辑基于DataFrame/Dataset API实现清洗转换,目的地可以是文件系统、数据仓库或实时流系统。

2.1.1 架构示意图
数据源(HDFS/S3/数据库) → Spark集群(Driver+Executor) → 数据处理(清洗/转换) → 目标存储(Hive/HBase/MySQL)
2.1.2 Mermaid流程图(Spark ETL处理流程)

结构化数据

半结构化数据

通过

不通过

数据源

数据格式检测

读取为DataFrame

解析为DataFrame

数据清洗

数据转换

数据质量校验

写入目标存储

错误数据处理

2.2 数据清洗与转换的核心关联

数据清洗是数据转换的前提,两者共同确保数据的准确性、一致性和可用性。清洗操作包括缺失值填充、异常值检测、重复数据删除等;转换操作包括字段类型转换、表达式计算、数据聚合、行列重组等。

3. 核心算法原理 & 具体操作步骤

3.1 数据质量检测算法

数据质量检测是清洗转换的第一步,常用指标包括完整性(缺失值比例)、唯一性(重复数据比例)、合法性(数据格式是否符合规范)、一致性(跨字段逻辑是否一致)。

3.1.1 缺失值检测代码示例(Python)
frompyspark.sql.functionsimportcol,isnan,when,countdefdetect_missing_values(df):missing_counts=df.select([count(when(isnan(c)|col(c).isNull(),c)).alias(c)forcindf.columns])returnmissing_counts
3.1.2 重复数据检测代码
defdetect_duplicates(df,subset=None):ifsubset:duplicate_count=df.groupBy(subset).count().filter("count > 1").count()else:duplicate_count=df.count()-df.distinct().count()returnduplicate_count

3.2 缺失值处理策略

3.2.1 删除法
# 删除包含缺失值的行(默认阈值为至少1个缺失值)df_clean=df.na.drop()# 按字段删除(仅删除age字段缺失的行)df_clean=df.na.drop(subset=["age"])# 按比例删除(删除缺失值超过50%的行)df_clean=df.na.drop(thresh=df.count()*0.5)
3.2.2 填充法
frompyspark.sql.functionsimportmean,col# 数值型字段用均值填充mean_age=df.select(mean("age")).first()[0]df_clean=df.na.fill(mean_age,subset=["age"])# 字符串型字段用众数或指定值填充df_clean=df.na.fill("Unknown",subset=["country"])

3.3 数据格式标准化

3.3.1 日期格式转换
frompyspark.sql.functionsimportto_date,unix_timestamp# 将"mm/dd/yyyy"转换为"yyyy-MM-dd"df_clean=df.withColumn("date",to_date(unix_timestamp(col("date"),"MM/dd/yyyy").cast("timestamp")))
3.3.2 字符串清洗(去除空格、统一大小写)
frompyspark.sql.functionsimporttrim,lower,upper df_clean=df.withColumn("name",trim(col("name")))df_clean=df.withColumn("email",lower(col("email")))

3.4 异常值检测与处理

3.4.1 Z-score算法检测数值异常值
frompyspark.sqlimportfunctionsasFfrompyspark.ml.featureimportStandardScalerfrompyspark.ml.linalgimportVectors# 将数据转换为MLlib的向量格式df_vectors=df.select(F.struct("value").alias("features"))scaler=StandardScaler(withMean=True,withStd=True)model=scaler.fit(df_vectors)scaled_df=model.transform(df_vectors)# 计算Z-score绝对值大于3的异常值scaled_df.filter(F.abs(scaled_df["scaledFeatures"][0])>3).show()

4. 数学模型和公式 & 详细讲解 & 举例说明

4.1 数据质量评估模型

4.1.1 缺失值比例公式

缺失率 ( c ) = 字段 c 的缺失值数量 总记录数 × 100 % \text{缺失率}(c) = \frac{\text{字段}c\text{的缺失值数量}}{\text{总记录数}} \times 100\%缺失率(c)=总记录数字段c的缺失值数量×100%
举例:假设“年龄”字段有50条缺失值,总记录数1000条,则缺失率为5%。

4.1.2 重复数据检测公式

重复记录数 = 总记录数 − 去重后记录数 \text{重复记录数} = \text{总记录数} - \text{去重后记录数}重复记录数=总记录数去重后记录数
举例:原始数据1000条,去重后950条,则重复记录数50条。

4.2 数据转换中的数学操作

4.2.1 数值转换公式
  • 标准化(Z-score)
    x ′ = x − μ σ x' = \frac{x - \mu}{\sigma}x=σxμ
    其中,(\mu)为均值,(\sigma)为标准差。

  • 归一化(Min-Max缩放)
    x ′ = x − x min x max − x min x' = \frac{x - x_{\text{min}}}{x_{\text{max}} - x_{\text{min}}}x=xmaxxminxxmin

4.2.2 字符串相似度计算(Levenshtein距离)

用于检测拼写错误,距离越小相似度越高。公式定义为将字符串A转换为字符串B所需的最少单字符编辑操作(插入、删除、替换)次数。

5. 项目实战:代码实际案例和详细解释说明

5.1 开发环境搭建

5.1.1 软件版本
  • Spark 3.3.0(支持Python 3.8+)
  • Java 11(Spark运行依赖)
  • PyCharm 2023.1(IDE)
  • Hadoop 3.3.1(分布式文件系统,可选)
5.1.2 环境配置步骤
  1. 下载Spark并解压:
    wgethttps://downloads.apache.org/spark/spark-3.3.0/spark-3.3.0-bin-hadoop3.tgztar-xzf spark-3.3.0-bin-hadoop3.tgz
  2. 配置环境变量:
    exportSPARK_HOME=/path/to/spark-3.3.0-bin-hadoop3exportPATH=$SPARK_HOME/bin:$PATH
  3. 创建Python虚拟环境并安装依赖:
    python -m venv spark_etl_envsourcespark_etl_env/bin/activate pipinstallpyspark pandas numpy

5.2 源代码详细实现和代码解读

5.2.1 案例背景

处理电商用户行为数据,包含字段:user_idtimestampevent_typeproduct_idpricecountry_code。目标:清洗缺失值、转换时间格式、标准化国家代码、计算每个用户的总消费金额。

5.2.2 数据读取
frompyspark.sqlimportSparkSession spark=SparkSession.builder \.appName("EcommerceETL")\.config("spark.sql.shuffle.partitions",4)\.getOrCreate()# 读取CSV文件,自动推断Schema(可能需要手动指定复杂类型)raw_df=spark.read.csv("data/user_events.csv",header=True,inferSchema=True,mode="DROPMALFORMED"# 丢弃格式错误的行)
5.2.3 数据清洗步骤
  1. 检测缺失值

    missing_values=detect_missing_values(raw_df)# 调用3.1.1节定义的函数missing_values.show()

    输出:显示各字段缺失值数量,假设price字段缺失100条。

  2. 填充缺失的价格

    mean_price=raw_df.select(mean("price")).first()[0]cleaned_df=raw_df.na.fill(mean_price,subset=["price"])
  3. 删除重复记录

    cleaned_df=cleaned_df.dropDuplicates(subset=["user_id","timestamp","event_type"])
5.2.4 数据转换步骤
  1. 时间戳转换为日期时间

    frompyspark.sql.functionsimportfrom_unixtime,col cleaned_df=cleaned_df.withColumn("event_time",from_unixtime(col("timestamp"),"yyyy-MM-dd HH:mm:ss"))
  2. 国家代码标准化(例如将"US"统一为"USA")

    country_mapping={"US":"USA","UK":"United Kingdom",# 其他国家映射...}frompyspark.sql.functionsimportcreate_map,lit country_map=create_map([lit(x)forxincountry_mapping.items()])cleaned_df=cleaned_df.withColumn("country",country_map[col("country_code")].otherwise(col("country_code")))
  3. 计算用户总消费金额

    frompyspark.sql.functionsimportsum,col result_df=cleaned_df.groupBy("user_id")\.agg(sum("price").alias("total_spend"))\.orderBy(col("total_spend").desc())
5.2.5 数据输出
# 写入Parquet文件(高效列式存储)result_df.write.parquet("output/user_spend.parquet",mode="overwrite")# 或写入MySQL数据库result_df.write.jdbc(url="jdbc:mysql://localhost:3306/ecommerce",table="user_total_spend",mode="overwrite",properties={"user":"root","password":"password","driver":"com.mysql.cj.jdbc.Driver"})

5.3 代码解读与分析

  • 数据读取阶段:使用mode="DROPMALFORMED"确保格式错误的行不影响处理,手动指定Schema可提升解析准确性。
  • 清洗阶段:优先处理缺失值和重复数据,避免脏数据影响后续转换逻辑。
  • 转换阶段:利用Spark内置函数(如create_map)实现复杂映射,聚合操作通过groupByagg高效分布式执行。
  • 输出阶段:Parquet格式适合大数据存储,JDBC写入关系型数据库时需注意分区数和批量大小优化。

6. 实际应用场景

6.1 电商领域

  • 场景:订单数据清洗(处理价格异常值、地址格式标准化)、用户行为日志转换(会话窗口划分、漏斗分析预处理)。
  • 价值:提升推荐系统输入数据质量,支持精准的用户分群和营销活动效果评估。

6.2 金融领域

  • 场景:交易数据清洗(检测洗钱相关的异常交易模式)、账户数据转换(多数据源账户信息合并去重)。
  • 挑战:需满足金融监管对数据可追溯性的要求,清洗逻辑需记录审计日志。

6.3 日志分析

  • 场景:服务器日志清洗(解析非结构化日志为结构化数据,过滤无效日志条目)。
  • 技术:使用正则表达式(regexp_extract)提取日志中的关键信息,如IP地址、错误代码。

6.4 数据湖构建

  • 场景:多源异构数据整合(将CSV、JSON、Parquet数据统一为标准Schema)。
  • 方案:通过Spark Data Catalog管理元数据,实现跨数据源的清洗转换逻辑复用。

7. 工具和资源推荐

7.1 学习资源推荐

7.1.1 书籍推荐
  1. 《Spark快速大数据分析》(作者:Holden Karau等):经典入门教材,涵盖Spark核心概念与实战案例。
  2. 《High Performance Spark》(作者:Josh Wills等):深入讲解性能优化策略,适合进阶读者。
  3. 《数据清洗:入门与实践》(作者:Eliyahu M. Goldratt):从数据质量理论到实战的全面指南。
7.1.2 在线课程
  • Coursera《Apache Spark for Big Data with Python》:系统学习Spark核心API和ETL实战。
  • Udemy《Spark and Hadoop for Big Data - Hands On with PySpark》:侧重Python环境下的Spark开发。
  • Databricks Academy免费课程:提供基于真实数据集的交互式练习。
7.1.3 技术博客和网站
  • Databricks博客:官方技术分享,包含最新Spark特性和最佳实践。
  • Spark.apache.org文档:权威官方文档,适合查阅API细节。
  • Towards Data Science:大量Spark实战案例分析。

7.2 开发工具框架推荐

7.2.1 IDE和编辑器
  • PyCharm/IntelliJ IDEA:支持Spark代码调试和集群配置,提供Scala/Python语法高亮。
  • VS Code:轻量级编辑器,通过插件支持Spark开发,适合快速脚本编写。
  • Jupyter Notebook:适合交互式开发和数据分析,配合PySpark内核使用。
7.2.2 调试和性能分析工具
  • Spark UI:内置Web界面,监控作业执行进度、Stage耗时、内存使用情况。
  • Grafana + Prometheus:分布式监控系统,实时追踪Spark集群资源利用率。
  • Databricks Debugger:云端调试工具,支持断点调试和变量查看。
7.2.3 相关框架和库
  • Delta Lake:构建可靠数据湖的框架,支持ACID事务、数据版本控制,与Spark无缝集成。
  • Sparklyr:R语言接口,方便R用户使用Spark进行数据处理。
  • Morpheus:数据清洗专用库,提供预定义的清洗规则模板,简化UDF开发。

7.3 相关论文著作推荐

7.3.1 经典论文
  1. 《Spark: Cluster Computing with Working Sets》(Matei Zaharia等,2010):Spark核心架构论文,提出弹性分布式数据集(RDD)概念。
  2. 《Data Cleaning: Problems and Current Approaches》(Hector Garcia-Molina等,2000):数据清洗领域奠基性论文,总结常见问题与解决方案。
7.3.2 最新研究成果
  • 《Efficient Data Cleaning for Big Data using Spark》(2022):探讨Spark在大规模数据清洗中的并行化策略优化。
  • 《Automated Data Transformation in Spark Pipelines》(2023):研究基于机器学习的自动数据转换规则生成技术。
7.3.3 应用案例分析
  • Uber使用Spark进行实时ETL的实践:大规模实时数据处理中的挑战与解决方案。
  • Airbnb数据湖构建案例:多源数据整合与清洗流程设计。

8. 总结:未来发展趋势与挑战

8.1 技术趋势

  1. 实时ETL与流处理融合:Spark Structured Streaming将批处理与流处理统一,推动实时数据清洗转换成为主流。
  2. 自动化数据质量监控:结合机器学习算法,自动识别数据模式变化并调整清洗策略。
  3. 云原生Spark应用:基于Kubernetes的Spark部署方案普及,提升资源利用率和弹性扩展能力。
  4. 与AI深度集成:利用预训练模型(如NLP模型)处理非结构化数据(文本、日志),提升清洗转换效率。

8.2 面临挑战

  • 多模态数据处理:如何高效清洗图片、视频、自然语言文本等非结构化数据,需要更灵活的Schema定义和处理框架。
  • 数据隐私与合规:GDPR等法规要求数据清洗过程中保护用户隐私,需研究差分隐私、数据匿名化等技术在Spark中的实现。
  • 性能优化瓶颈:随着数据规模向EB级增长,现有基于内存的计算模型可能面临容量限制,需探索分布式存储与计算的深度融合。

8.3 实践建议

  • 分层设计ETL流水线:将清洗转换逻辑拆分为青铜层(原始数据)、白银层(清洗后数据)、黄金层(业务就绪数据),便于管理和复用。
  • 建立数据质量仪表盘:通过Spark Metrics接口实时监控清洗转换过程中的数据质量指标,及时触发异常处理流程。
  • 持续优化代码与配置:定期分析Spark UI中的性能瓶颈,调整分区数、序列化格式、内存分配等参数,提升作业执行效率。

9. 附录:常见问题与解答

Q1:如何处理Spark作业中的OOM(内存溢出)错误?

  • A
    1. 减少分区数(通过repartitioncoalesce),避免单个Executor处理过多数据。
    2. 调整Spark内存配置(spark.executor.memoryspark.driver.memory),确保足够内存空间。
    3. 使用列式存储格式(如Parquet)减少内存占用,或启用Tungsten优化(spark.sql.tungsten.enabled=true)。

Q2:如何高效处理包含嵌套结构的JSON数据?

  • A
    使用from_json函数配合自定义Schema解析嵌套字段,例如:
    frompyspark.sql.typesimportStructType,StructField,StringType schema=StructType([StructField("user",StructType([StructField("id",StringType(),False),StructField("address",StructType([StructField("city",StringType(),True)]))]))])df=spark.read.json("nested_data.json",schema=schema)

Q3:如何在Spark中实现跨多个数据源的事务性ETL?

  • A
    利用Delta Lake或Hudi等事务型存储框架,支持原子性的写入操作,确保数据一致性。例如:
    df.write.format("delta").mode("append").save("delta_table_path")

Q4:UDF的性能问题如何优化?

  • A
    1. 优先使用Spark内置函数(如whencol),避免UDF带来的序列化开销。
    2. 将UDF转换为向量化函数(通过pandas_udf),利用Pandas的向量化操作提升性能。
    3. 减少UDF中的复杂逻辑,拆分多步处理为Spark原生操作。

10. 扩展阅读 & 参考资料

  1. Apache Spark官方文档
  2. Spark ETL最佳实践指南
  3. 《数据清洗:原理与实践》(机械工业出版社)
  4. Spark性能调优手册

通过掌握Spark在数据清洗与转换中的核心技术和最佳实践,数据工程师能够构建高效、可靠的大数据ETL流水线,为企业数据驱动决策提供坚实的数据基础。随着技术的不断演进,持续关注分布式计算、数据质量和自动化处理的前沿动态,将是应对未来大数据挑战的关键。

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

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

相关文章

【教程4>第10章>第20节】基于FPGA的图像sobel锐化算法开发——图像sobel锐化仿真测试以及MATLAB辅助验证

目录 1.软件版本 2.通过FPGA实现图像sobel锐化 3.testbench编写 4.程序操作视频 欢迎订阅FPGA/MATLAB/Simulink系列教程 《★教程1:matlab入门100例》 《★教程2:fpga入门100例》 《★教程3:simulink入门60例》 《★教程4:FPGA/MATLAB/Simulink联合开发入门与进阶X例》

【毕业设计】SpringBoot+Vue+MySQL 高校学科竞赛平台平台源码+数据库+论文+部署文档

💡实话实说:CSDN上做毕设辅导的都是专业技术服务,大家都要生活,这个很正常。我和其他人不同的是,我有自己的项目库存,不需要找别人拿货再加价。我就是个在校研究生,兼职赚点饭钱贴补生活费&…

STM32CubeMX安装步骤系统学习:配套工具链配置

STM32CubeMX安装与工具链配置全解析:从零搭建高效嵌入式开发环境 你是不是也曾遇到这样的情况?刚下载好STM32CubeMX,双击启动却弹出“ No Java virtual machine was found ”;或者好不容易打开界面,想生成Keil工程时…

python的sql解析库-sqlparse

内容目录 一、基本方法: 1.parse(sql)2.format(sql)3.split()4.parsestream() 二、Token三、其他类型四、案例: 提取所有查询的字段和表名 sqlparse 是一个 Python 库,是一个用于 Python 的非验证 SQL 解析器, 用于解析 SQL 语句并提供一个简单的 API 来访问解析后…

数字频率计共阴极数码管驱动电路实战

数码管驱动实战:如何用51单片机点亮4位频率计显示屏?你有没有遇到过这样的问题:想做个数字频率计,测出的频率值却没法“亮”出来?或者好不容易接上数码管,结果显示闪烁、重影,甚至MCU IO口直接拉…

Java Web 教学资源库系统源码-SpringBoot2+Vue3+MyBatis-Plus+MySQL8.0【含文档】

💡实话实说:有自己的项目库存,不需要找别人拿货再加价,所以能给到超低价格。摘要 随着信息技术的快速发展,教育领域对数字化教学资源的需求日益增长。传统的教学资源管理方式存在资源分散、检索效率低、共享困难等问题…

Python爬虫完整代码拿走不谢

对于新手做Python爬虫来说是有点难处的,前期练习的时候可以直接套用模板,这样省时省力还很方便。 使用Python爬取某网站的相关数据,并保存到同目录下Excel。 直接上代码: import re import urllib.error import urllib.requestimp…

系统管理工具,多功能隐私清理文件粉碎工具

软件介绍 今天给大伙儿安利个全能的系统管理工具,它叫 Windows超级管理器。功能那叫一个全乎,系统检测、文件清理、隐私保护、磁盘管理、文件粉碎这些实用活儿它都能干,堪称系统管家! 绿色单文件版:小巧便携的系统管…

SpringBoot+Vue 智能推荐卫生健康系统平台完整项目源码+SQL脚本+接口文档【Java Web毕设】

💡实话实说:CSDN上做毕设辅导的都是专业技术服务,大家都要生活,这个很正常。我和其他人不同的是,我有自己的项目库存,不需要找别人拿货再加价。我就是个在校研究生,兼职赚点饭钱贴补生活费&…

【踩坑记】WSL1 下 Docker 报错 iptables: No chain/target/match by that name 排查实录

这是一篇为你整理的“踩坑记”,还原了从报错、排查到发现核心原因并解决的全过程。【踩坑记】WSL1 下 Docker 报错 iptables: No chain/target/match by that name 排查实录1. 背景与环境今天在 WSL (Ubuntu 24.04) 环境下部署 Dify 项目,执行启动命令时…

autosar软件开发中诊断协议栈配置实践案例

AUTOSAR诊断协议栈配置实战:从UDS服务到DTC管理的全链路解析在一辆现代智能汽车中,当你用诊断仪读取一个故障码、刷新ECU程序,或是远程获取车辆实时数据时——背后支撑这一切的,正是AUTOSAR架构中的诊断通信协议栈。它不仅是连接整…

MPC5634 Bootloader

MPC5634 Bootloader嵌入式工程师最怕遇到设备变砖,而好的Bootloader设计就是咱们的救命稻草。今天咱们来盘一盘飞思卡尔MPC5634这颗工业级控制器的Bootloader实现,直接上干货不啰嗦。先说启动流程,这货上电先执行0x00地址的启动代码。来看关键…

无线网络仿真:5G网络仿真_(3).5G关键技术和性能指标

5G关键技术和性能指标 1. 大规模MIMO技术 1.1 原理 大规模MIMO(Multiple-Input Multiple-Output)技术是5G网络中的一项重要技术,通过在基站和用户设备上部署大量的天线,可以显著提升无线通信系统的容量和频谱效率。大规模MIMO技术…

洗衣店订单管理系统信息管理系统源码-SpringBoot后端+Vue前端+MySQL【可直接运行】

💡实话实说:有自己的项目库存,不需要找别人拿货再加价,所以能给到超低价格。摘要 随着现代生活节奏的加快,洗衣服务行业逐渐成为城市居民日常生活的重要组成部分。传统的洗衣店管理方式依赖手工记录订单信息&#xff0…

RabbitMQ 集群部署方案

RabbitMQ 一、安装 RabbitMQ 二、更改配置文件 三、配置集群 四、测试 环境准备:三台服务器,系统是 CentOS7 IP地址分别是: rabbitmq1:192.168.152.71rabbitmq2:192.168.152.72rabbitmq3:192.168.152.…

WSL Ubuntu 安装 Docker 操作指南

环境信息 操作系统:Windows 10/11WSL版本:WSL 1 或 WSL 2Linux发行版:Ubuntu 24.04 LTSDocker版本:29.1.4 前提条件 已安装WSL已安装Ubuntu 24.04发行版具有sudo权限的用户账户 安装步骤 1. 检查WSL环境状态 首先检查WSL的运…

Python高级之操作Mysql

Python高级 文章目录 Python高级 python操作数据库mysql-connector demo_mysql_test.py: pyMysql python操作数据库mysql-connector 本章节为大家介绍使用 mysql-connector 来连接使用 MySQL, mysql-connector 是 MySQL 官方提供的驱动器。 可以使用 pip 命令…

35 岁职场危机?网络安全这行为啥越老越吃香?

前几天我表弟小王来找我喝茶,聊着聊着突然问我:“老曹,你说我要不要转行做网络安全啊? 听说这行业挺赚钱的。 “我一听就笑了,这不正好最近我刚研究过这个行业吗? 我跟他说,别看现在各行各业…

cruise仿真模型,四轮驱动。 轮毂电机,轮边电机驱动cruise动力性经济性仿真模型,ba...

cruise仿真模型,四轮驱动。 轮毂电机,轮边电机驱动cruise动力性经济性仿真模型,base模型,适用轮边电机驱动及轮毂电机驱动。 可进行动力性经济性仿真分析,控制策略包含扭矩控制及能量回收控制使用c-code编写&#xff0…

SpringBoot+Vue 课程答疑系统管理平台源码【适合毕设/课设/学习】Java+MySQL

💡实话实说: 有自己的项目库存,不需要找别人拿货再加价,所以能给到超低价格。 摘要 随着信息技术的快速发展,教育信息化已成为现代教育的重要组成部分。传统的课程答疑方式通常依赖于面对面交流或简单的在线工具&…