大数据 ETL + Flume 数据清洗 — 详细教程及实例(附常见问题及解决方案)
大数据 ETL + Flume 数据清洗 — 详细教程及实例
- 1. ETL 和 Flume 概述
- 1.1 ETL(Extract, Transform, Load)
- 1.2 Flume 概述
- 2. Flume 环境搭建
- 2.1 下载并安装 Flume
- 2.2 启动 Flume
- 3. Flume 配置和常见 Source、Sink、Channel
- 3.1 Flume Source
- 3.2 Flume Sink
- 3.3 Flume Channel
- 4. ETL 数据清洗过程
- 4.1 提取(Extract)
- 4.2 转换(Transform)
- 4.3 加载(Load)
- 5. 实例演示:使用 Flume 进行数据清洗
- 5.1 配置 Flume
- 5.2 启动 Flume
- 5.3 使用 Spark 清洗数据
- 6.常见问题及解决方案详细化(附实例)
- 6.1. Flume 启动失败或无法启动
- 6.1.1 配置文件错误
- 6.1.2 端口被占用
- 6.1.3 Java 环境变量未配置
- 6.2. 数据丢失或无法写入目标
- 6.2.1 Sink 配置错误
- 6.2.2 Channel 类型配置错误
- 6.2.3 目标系统不可用
- 3. 数据传输速度慢
- 6.3.1 Flume 配置不合理
- 6.3.2 网络带宽瓶颈
- 6.3.3 资源配置不足
- 4. 数据格式不一致或数据损坏
- 6.4.1 数据格式不一致
- 6.4.2 数据损坏
- 5. Flume 性能瓶颈
- 6.5.1 配置不当导致性能瓶颈
- 6.5.2 增加 Flume Agent 并行度
- 7. 总结
在大数据生态中,ETL(Extract, Transform, Load)是处理和清洗数据的核心过程。Flume 是一个分布式的、可靠的流数据收集工具,常用于将日志和流数据导入到 Hadoop、HDFS、Kafka 或其他数据存储系统。本文将结合 Flume 的使用、数据清洗、ETL 流程以及 常见问题和解决方案,为您提供完整的技术指南。
1. ETL 和 Flume 概述
1.1 ETL(Extract, Transform, Load)
ETL 是从各种数据源中提取数据(Extract)、对数据进行清洗和转换(Transform),最后将数据加载到目标存储系统(Load)的过程。ETL 过程是大数据架构中至关重要的一部分,常用于处理不同格式的原始数据,将其转化为有价值的数据。
- Extract(提取):从数据源中提取原始数据,支持多种数据源,如文件、数据库、流数据等。
- Transform(转换):清洗、格式化、过滤、去重等数据转换操作。
- Load(加载):将处理后的数据加载到目标存储(如 HDFS、Kafka、数据库等)中。
1.2 Flume 概述
Flume 是 Apache 提供的一个分布式流数据收集、聚合和传输的工具。它可以用来将实时数据流(如日志、监控数据等)收集并传输到 Hadoop、Kafka 等存储系统进行后续处理。Flume 的工作原理是通过定义 Source、Channel 和 Sink 来完成数据的收集、传输和存储。
- Source(源):数据输入来源,Flume 支持多种 Source 类型(如
netcat
、file
、exec
)。 - Channel(通道):负责暂存数据,提供异步、持久化存储。
- Sink(接收器):数据输出目标,可以是 HDFS、Kafka、数据库等。
2. Flume 环境搭建
2.1 下载并安装 Flume
-
下载 Flume
从 Apache Flume 官方下载页面 下载适合您操作系统的 Flume 安装包。
-
解压并安装
解压下载的包,并进入安装目录:
tar -xzvf apache-flume-1.9.0-bin.tar.gz cd apache-flume-1.9.0
2.2 启动 Flume
Flume 提供了命令行工具来启动 Flume 服务。以下是启动 Flume Agent 的命令行示例:
bin/flume-ng agent --conf conf --conf-file conf/flume-conf.properties --name agent -Dflume.root.logger=INFO,console
其中,flume-conf.properties
是 Flume 的配置文件,agent
是 Flume Agent 的名称。
3. Flume 配置和常见 Source、Sink、Channel
Flume 配置文件定义了 Source、Sink 和 Channel 的类型、属性以及它们之间的连接方式。
3.1 Flume Source
Flume 支持多种 Source 类型,常见的 Source 包括:
- netcat:通过 TCP/UDP 接收数据。
- file:从文件系统读取数据。
- exec:通过执行外部命令获取数据。
- avro:通过 Avro 协议接收数据。
3.2 Flume Sink
Flume 提供了多种 Sink 类型,支持将数据输出到不同目标系统:
- logger:打印日志。
- hdfs:将数据保存到 Hadoop HDFS。
- kafka:将数据发送到 Kafka。
- jdbc:将数据存入数据库。
3.3 Flume Channel
Flume 的 Channel 用于暂存数据,可以配置为:
- memory:使用内存存储数据。
- file:使用文件系统存储数据。
- jdbc:将数据存入数据库。
4. ETL 数据清洗过程
ETL 中的数据清洗通常包括对原始数据进行过滤、格式转换、去重、规范化等操作。Flume 本身并不提供数据转换功能,但我们可以将 Flume 与其他工具(如 Apache Spark、Kafka、HDFS)结合使用,进行复杂的数据清洗和转换。
4.1 提取(Extract)
Flume 从数据源(如文件、网络端口、外部命令等)中提取原始数据。例如,我们可以使用 netcat
从指定端口接收数据:
# flume-conf.properties
agent.sources = r1
agent.sources.r1.type = netcat
agent.sources.r1.bind = localhost
agent.sources.r1.port = 44444
4.2 转换(Transform)
Flume 本身不提供复杂的转换功能,因此可以使用 Apache Spark、Flink 或 Hadoop 进行数据处理。例如,我们可以将 Flume 数据传输到 Kafka 或 HDFS,之后使用 Spark 对数据进行清洗和转换。
Spark 数据清洗示例:
from pyspark.sql import SparkSession
from pyspark.sql.functions import colspark = SparkSession.builder.appName("ETL Data Cleaning").getOrCreate()# 加载数据
df = spark.read.json("hdfs://localhost:9000/user/flume/output_data/*.json")# 清洗数据:去除空值
df_cleaned = df.filter(col("user_id").isNotNull()).filter(col("event_time") > "2024-01-01")# 保存清洗后的数据
df_cleaned.write.json("hdfs://localhost:9000/user/flume/cleaned_data/")
4.3 加载(Load)
清洗后的数据可以通过 Flume 将其加载到目标存储(如 HDFS、Kafka、数据库等)。
# 将清洗后的数据写入 HDFS
agent.sinks.k1.type = hdfs
agent.sinks.k1.hdfs.path = hdfs://localhost:9000/user/flume/output_data
agent.sinks.k1.hdfs.filePrefix = events-
agent.sinks.k1.hdfs.rollSize = 1000000
5. 实例演示:使用 Flume 进行数据清洗
假设我们需要从网络端口接收 JSON 格式的原始数据,清洗数据后将其保存到 HDFS。我们将 Flume 配置为通过 netcat
读取数据,将数据传输到 HDFS,接着使用 Spark 进行数据清洗。
5.1 配置 Flume
# flume-conf.properties
# Source 配置:使用 netcat 接收数据
agent.sources = r1
agent.sources.r1.type = netcat
agent.sources.r1.bind = localhost
agent.sources.r1.port = 44444# Channel 配置:使用 memory 存储数据
agent.channels = c1
agent.channels.c1.type = memory# Sink 配置:将数据存入 HDFS
agent.sinks = k1
agent.sinks.k1.type = hdfs
agent.sinks.k1.hdfs.path = hdfs://localhost:9000/user/flume/output_data
agent.sinks.k1.hdfs.filePrefix = event_data_
agent.sinks.k1.hdfs.rollSize = 1000000# 连接 Source 和 Sink
agent.sources.r1.channels = c1
agent.sinks.k1.channel = c1
5.2 启动 Flume
通过以下命令启动 Flume Agent,监听 localhost:44444
端口并将数据发送到 HDFS:
bin/flume-ng agent --conf conf --conf-file conf/flume-conf.properties --name agent -Dflume.root.logger=INFO,console
5.3 使用 Spark 清洗数据
在 Flume 将数据保存到 HDFS 后,使用 Spark 进行数据清洗:
from pyspark.sql import SparkSession
from pyspark.sql.functions import colspark = SparkSession.builder.appName("ETL Data Cleaning").getOrCreate()# 加载数据
df = spark.read.json("hdfs://localhost:9000/user/flume/output_data/*.json")# 数据清洗
df_cleaned = df.filter(col("user_id").isNotNull()) \.filter(col("event_time") > "2024-01-01")# 保存清洗后的数据
df_cleaned.write.json("hdfs://localhost:9000/user/flume/cleaned_data/")
6.常见问题及解决方案详细化(附实例)
在使用 Flume 进行大数据处理和 ETL 操作时,经常会遇到一些配置问题、性能瓶颈或者数据问题。以下是一些 Flume 在实际应用中常见的问题及解决方案,并附带了实例帮助你解决问题。
6.1. Flume 启动失败或无法启动
问题描述:
启动 Flume Agent 时,系统报错或者 Flume 无法正常启动。
常见原因及解决方案:
6.1.1 配置文件错误
原因:Flume 启动失败的常见原因之一是配置文件有误,比如文件路径错误、格式不正确、某些属性未配置等。
解决方案:
- 检查配置文件
flume-conf.properties
是否有语法错误或缺少关键配置项。 - 确保配置文件中的路径(如
hdfs.path
)正确。 - 检查配置文件中的
Source
、Sink
和Channel
是否正确连接。
示例:假设我们有以下的配置文件:
# flume-conf.properties
agent.sources = r1
agent.channels = c1
agent.sinks = k1# Source 配置:netcat
agent.sources.r1.type = netcat
agent.sources.r1.bind = localhost
agent.sources.r1.port = 44444# Channel 配置:memory
agent.channels.c1.type = memory# Sink 配置:hdfs
agent.sinks.k1.type = hdfs
agent.sinks.k1.hdfs.path = hdfs://localhost:9000/user/flume/output_data
agent.sinks.k1.hdfs.filePrefix = event_data_
agent.sinks.k1.hdfs.rollSize = 1000000# Source 和 Sink 连接
agent.sources.r1.channels = c1
agent.sinks.k1.channel = c1
确保所有配置项(例如 bind
, port
, path
)都是正确的,并且没有拼写错误。
6.1.2 端口被占用
原因:如果 Flume 的 Source 配置绑定的端口(如 localhost:44444
)已经被其他应用占用,那么 Flume 无法启动。
解决方案:
-
检查端口是否被其他程序占用,可以使用
netstat
或lsof
命令查看端口占用情况。netstat -tuln | grep 44444
-
如果端口已被占用,可以更改 Flume 配置中的端口号,避免冲突。
agent.sources.r1.port = 55555
6.1.3 Java 环境变量未配置
原因:Flume 是基于 Java 开发的,如果你的 Java 环境变量未正确配置,会导致 Flume 启动失败。
解决方案:
-
确保 JAVA_HOME 环境变量已正确配置,并且 Java 版本支持 Flume。
-
使用以下命令检查 Java 版本是否可用:
java -version
确保 Java 版本至少是 8 以上。
6.2. 数据丢失或无法写入目标
问题描述:
Flume 在收集和传输数据时,数据丢失或无法成功写入目标系统(如 HDFS、Kafka 等)。
常见原因及解决方案:
6.2.1 Sink 配置错误
原因:如果 Sink
配置错误,数据可能无法成功写入目标。例如,HDFS 的路径配置不正确、Kafka 配置错误等。
解决方案:
- 检查 Flume 配置中的
Sink
部分,确保目标系统(如 HDFS)路径正确并且有写权限。 - 确保 HDFS 或 Kafka 目标系统处于运行状态。
示例:假设我们配置了将数据写入 HDFS,但 HDFS 的路径配置错误:
agent.sinks.k1.type = hdfs
agent.sinks.k1.hdfs.path = hdfs://localhost:9000/user/flume/output_data
如果路径错误,Flume 会无法写入数据。确保 hdfs://localhost:9000
是正确的 HDFS 路径,并且 Flume 用户有相应的写权限。
6.2.2 Channel 类型配置错误
原因:Flume 使用 Channel
来暂存数据,如果 Channel
配置不当,可能会导致数据丢失或者传输失败。
解决方案:
- 检查
Channel
的类型和配置。例如,使用memory
类型的Channel
时,数据会保存在内存中,可能导致内存溢出。 - 如果需要持久化存储,考虑使用
file
类型的Channel
。
示例:如果使用内存存储的 Channel
,并且数据量较大,可能会导致内存溢出:
agent.channels.c1.type = memory
解决方案是将 Channel
类型改为 file
,或者增加内存配置:
agent.channels.c1.type = file
6.2.3 目标系统不可用
原因:Flume 的目标系统(如 HDFS、Kafka)出现故障或不可用时,数据无法成功写入。
解决方案:
- 检查目标系统是否可用。例如,检查 HDFS 是否运行正常,Kafka 是否连接可用。
- 配置 Flume 的
Sink
重试机制,可以设置batchSize
、maxRetries
等参数。
agent.sinks.k1.hdfs.batchSize = 100
agent.sinks.k1.hdfs.rollCount = 10000
3. 数据传输速度慢
问题描述:
Flume 在传输数据时,传输速度较慢,影响数据实时性。
常见原因及解决方案:
6.3.1 Flume 配置不合理
原因:Flume 的配置(如 batchSize
、channel
配置等)不合理可能会导致数据传输速度慢。
解决方案:
- 调整
batchSize
和rollSize
等配置,提高数据批量处理能力。 - 通过调优
Source
、Sink
、Channel
的参数,控制每次操作的数据量。
示例:优化 HDFS Sink 配置来提高数据传输速度:
agent.sinks.k1.hdfs.batchSize = 1000
agent.sinks.k1.hdfs.rollSize = 10485760 # 10MB
6.3.2 网络带宽瓶颈
原因:数据传输过程中的网络带宽不足,导致数据传输缓慢。
解决方案:
- 检查网络带宽,确保 Flume 节点之间的网络连接足够快。
- 优化数据传输路径,例如通过 Kafka 或其他高速数据流组件传输。
6.3.3 资源配置不足
原因:Flume 配置的内存或 CPU 资源不足,导致数据处理速度慢。
解决方案:
- 增加 Flume 进程的内存,调整 JVM 堆内存设置。
export JAVA_OPTS="-Xmx4g -Xms2g"
- 增加 Flume Agent 的并发度或分区数,提高数据处理速度。
4. 数据格式不一致或数据损坏
问题描述:
Flume 处理的原始数据格式不一致,或者传输过程中数据格式出现问题。
常见原因及解决方案:
6.4.1 数据格式不一致
原因:Flume 收集的数据格式不统一,可能是 JSON、CSV 或 XML 等不同格式,导致数据无法正确解析。
解决方案:
- 在 Flume 配置中使用合适的
Interceptor
或Processor
,将数据格式统一化。
示例:假设我们要清洗 JSON 格式数据,首先用 JsonDecoder
解码 JSON 数据:
agent.sources.r1.interceptors = i1
agent.sources.r1.interceptors.i1.type = org.apache.flume.interceptor.JsonDecoder$Builder
6.4.2 数据损坏
原因:Flume 在数据传输过程中,数据可能被损坏或不完整。
解决方案:
- 检查 Flume 的日志,查看是否有数据丢失或传输失败的错误信息。
- 增加
Channel
的持久化特性,确保数据在传输过程中不会丢失。
agent.channels.c1.type = file
5. Flume 性能瓶颈
问题描述:
在处理大规模数据时,Flume 的性能出现瓶颈,导致数据传输延迟或失败。
常见原因及解决方案:
6.5.1 配置不当导致性能瓶颈
原因:Flume 配置不当(如 batchSize
、Channel
配置、内存不足)会导致性能瓶颈。
解决方案:
- 调整 `batch
Size、
rollSize、
sink` 配置,提高吞吐量。
- 使用内存和磁盘混合的
Channel
配置,避免内存溢出。
示例:调优 Sink
和 Channel
配置:
agent.sinks.k1.hdfs.batchSize = 10000
agent.sinks.k1.hdfs.rollSize = 10000000 # 10MB
agent.channels.c1.type = file
6.5.2 增加 Flume Agent 并行度
原因:Flume Agent 可能需要处理大量数据流时,单线程无法满足高吞吐量需求。
解决方案:
- 增加 Flume 的并发度,使用多线程或多个 Flume Agent 实例分担压力。
7. 总结
通过本文的详细教程,我们介绍了如何使用 Flume 进行大数据的 ETL 操作,结合 Spark 实现数据清洗。Flume 作为流数据收集工具,可以与其他大数据技术结合,实现高效的数据传输与清洗。通过合理的配置和调优,能够处理和清洗大规模数据,最终为数据分析提供高质量的数据集。
推荐阅读:《大数据测试 Elasticsearch — 详细教程及实例》,《大数据测试spark+kafka-详细教程》
相关文章:
大数据 ETL + Flume 数据清洗 — 详细教程及实例(附常见问题及解决方案)
大数据 ETL Flume 数据清洗 — 详细教程及实例 1. ETL 和 Flume 概述1.1 ETL(Extract, Transform, Load)1.2 Flume 概述 2. Flume 环境搭建2.1 下载并安装 Flume2.2 启动 Flume 3. Flume 配置和常见 Source、Sink、Channel3.1 Flume Source3.2 Flume Si…...
鸿蒙next版开发:订阅应用事件(ArkTS)
在HarmonyOS 5.0中,ArkTS提供了强大的应用事件订阅机制,允许开发者订阅和处理系统或应用级别的事件。这一功能对于监控应用行为、优化用户体验和进行性能分析至关重要。本文将详细介绍如何在ArkTS中订阅应用事件,并提供示例代码进行说明。 应…...
F litter 开发之flutter_local_notifications
flutter_local_notifications 消息通知 flutter_local_notifications地址 flutter_local_notifications: ^18.0.1class NotificationHelper {//工厂模式调用该类时,默认调用此方法,将实例对象返回出去static NotificationHelper? _instance null;sta…...
springboot参数校验
springboot 参数校验 Validated 以及 Valid - 唏嘘- - 博客园 SpringBoot参数校验Validated、Valid_springboot validate-CSDN博客...

Spring生态学习路径与源码深度探讨
引言 Spring框架作为Java企业级开发中的核心框架,其丰富的生态系统和强大的功能吸引了无数开发者的关注。学习Spring生态不仅仅是掌握Spring Framework本身,更需要深入理解其周边组件和工具,以及源码的底层实现逻辑。本文将从Spring生态的学…...

C++:set详解
文章目录 前言一、set概念介绍二、set的使用1. 插入删除相关2. 查找相关1)find2)count3)lower_bound与upper_bound4)equal_range 三、set的值是不能修改的原理四、基于哈希表的set总结 前言 根据应用场景的不同,STL总…...

(一)- DRM架构
一,DRM简介 linux内核中包含两类图形显示设备驱动框架: FB设备:Framebuffer图形显示框架; DRM:直接渲染管理器(Direct Rendering Manager),是linux目前主流的图形显示框架; 1&am…...

Docker了解
Docker是一种容器化技术,它可以将应用程序和其依赖项打包到一个独立的、可移植的容器中,以便在不同的环境中运行。Docker基于Linux操作系统的容器化技术,可以提供更轻量、更快速、更灵活、更一致的应用部署和管理方式。 Docker的基本概念包括…...

【DL】YOLO11 OBB目标检测 | 模型训练 | 推理
本文进行YOLO11的旋转目标检测任务,旋转目标检测能够更精确地定位和描述那些非水平排列的目标,比如倾斜的飞机、船舶等。在原始的目标检测中,添加一个角度预测,实现定向边界框检测。 话不多说,先来个效果图!!! YOLO11中的旋转目标检测的特点 ▲更精确的定位:通过使用…...
vue读取本地excel文件并渲染到列表页面
1.安装插件(版本0.18.5) npm i xlsx 2.封装插件 <template><div class"container"><slot></slot></div> </template><script> import * as XLSX from xlsx export default {name: ReadExcel,props: {filePath: {type: …...
github 以及 huggingface下载模型和数据
runningcheese/MirrorSite: 镜像网站合集 (github.com) huggingface 下载模型和数据使用snapshot_download的方法 不会修改HuggingFace模型下载默认缓存路径?一篇教会你!_huggingface默认下载路径-CSDN博客 下载模型 使用snapshot_download 使用snapshot_down…...

使用 Vue 配合豆包MarsCode 实现“小恐龙酷跑“小游戏
作者:BLACK595 “小恐龙酷跑”,它是一款有趣的离线游戏,是Google给Chrome浏览器加的一个有趣的彩蛋。当我们浏览器断网时一只像素小恐龙便会出来提示断网。许多人认为这只是一个可爱的小图标, 但当我们按下空格后,小恐…...

51c视觉~合集6
我自己的原文哦~ https://blog.51cto.com/whaosoft/11603901 #CSWin-UNet 将自注意力机制集成到UNet中!CSWin-UNet:U型分割方法,显著提高计算效率和感受野交互!本文提出了CSWin-UNet,这是一种新颖的U型分割方法&…...
STM32(hal库)在串口中,USART和uart有什么区别?
在STM32的HAL库中,USART和UART都是用于串口通信的模块,但它们在功能特性和使用场景上存在一些区别。以下是对两者的详细比较: 一、功能特性 UART(通用异步收发器): 是一种串行、异步、全双工的通信协议。通…...
机器学习、深度学习面试知识点汇总
下面是本人在面试中整理的资料和文字,主要针对面试八股做浅显的总结,大部分来源于ChatGPT,中间有借鉴一些博主的优质文章,已经在各文中指出原文。有任何问题,欢迎随时不吝指正。 文章系列图像使用动漫 《星游记》插图…...

FPGA高速设计之Aurora64B/66B的应用与不足的修正
FPGA高速设计之Aurora64B/66B的应用与不足的修正 Aurora IP协议的特点 首先基于网上找到的一些资料,来讲述下Aurora高速协议的特点与相关的应用。Aurora 协议在 2002 年由 Xilinx 公司首次提出,是由Xilinx提供的一个开源、免费的链路层串行传输通信协议…...
如何通过PHP脚本自动推送WordPress文章至百度站长平台
想要提高网站在百度搜索中的曝光度?百度站长平台提供了一个非常方便的API接口,允许网站自动将新发布的内容推送至百度以加快收录。本文将带您一步步实现这一功能,帮助您的WordPress站点实现每日自动推送最新文章的URL至百度站长平台。 1. 前提条件 确保您有一个已安装并运行…...

ORA-01092 ORA-14695 ORA-38301
文章目录 前言一、MAX_STRING_SIZE--12C 新特性扩展数据类型 varchar2(32767)二、恢复操作1.尝试恢复MAX_STRING_SIZE参数为默认值2.在upgrade模式下执行utl32k.sql 前言 今天客户发来一个内部测试库数据库启动截图报错,描述是“上午出现服务卡顿,然后重…...

upload-labs通关练习---更新到15关
目录 环境搭建 第一关 方法一 修改文件类型 方法二 前端禁用JS绕过 第二关 方法一 修改Content-Type类型 方法二 修改上传文件类型 第三关 第四关 第五关 方法一 Windows大小写绕过 方法二 利用.user.ini 第六关 第七关 第八关 第九关 第十关 第十一关 第十二…...
WPF 应用程序中使用 Prism 框架时,有多种方式可以注册服务和依赖项
Prism 提供了更多的注册方式,适应不同的需求和场景。下面我会全面列出 IContainerRegistry 提供的所有常见注册方式,并附带相应的示例。1. 注册单例(Singleton) 注册单例类型服务,整个应用生命周期内只会创建一个实例&…...

GC1808:高性能24位立体声音频ADC芯片解析
1. 芯片简介 GC1808 是一款24位立体声音频模数转换器(ADC),支持96kHz采样率,集成Δ-Σ调制器、数字抗混叠滤波器和高通滤波器,适用于家庭影院、蓝牙音箱等场景。 核心特性 高精度:24位分辨率,…...
ocrapi服务docker镜像使用
umiocr只能用于windows,http服务只能找旧版,没办法,只能找docker替代一下了。 umiocr 使用paddleOCR和rapidOCR引擎。以下时这两个docker的运行方法 paddleOCR使用 duolabmeng666的ppocr镜像 镜像大小约2.6G docker run -itd --name ppoc…...

华为云Flexus+DeepSeek征文|基于华为云Flexus X和DeepSeek-R1打造个人知识库问答系统
目录 前言 1 快速部署:一键搭建Dify平台 1.1 部署流程详解 1.2 初始配置与登录 2 构建专属知识库 2.1 进入知识库模块并创建新库 2.2 选择数据源导入内容 2.3 上传并识别多种文档格式 2.4 文本处理与索引构建 2.5 保存并完成知识库创建 3接入ModelArts S…...
《前端面试题:JS数据类型》
JavaScript 数据类型指南:从基础到高级全解析 一、JavaScript 数据类型概述 JavaScript 作为一门动态类型语言,其数据类型系统是理解这门语言的核心基础。在 ECMAScript 标准中,数据类型分为两大类: 1. 原始类型(Pr…...
RetroMAE 预训练任务
RetroMAE 预训练任务的具体步骤,围绕 编码(Encoding)、解码(Decoding)、增强解码(Enhanced decoding) 三个核心阶段展开,以下结合图中流程拆解: 一、阶段 A:…...

单片机0-10V电压输出电路分享
一、原理图 二、芯片介绍 GP8101是一个PWM信号转模拟信号转换器,相当于一个PWM信号输入,模拟信号输出的DAC。此 芯片可以将占空比为0%到100%的PWM信号线性转换成0-5V或者0-10V的模拟电压,并且输出电压 精度小于1%。GP8101M可以处理高频调制的…...

摆脱硬件依赖:SkyEye在轨道交通中的仿真应用
在城市轨道交通系统中,信号系统承担着确保列车安全、高效运行的关键任务。从排列进路、信号开放,到终点折返与接发车,几乎每一个调度动作背后都依赖于信号系统的精密控制与实时响应。作为信号系统的重要组成部分,目标控制器&#…...

强化学习入门:Gym实现CartPole随机智能体
前言 最近想开一个关于强化学习专栏,因为DeepSeek-R1很火,但本人对于LLM连门都没入。因此,只是记录一些类似的读书笔记,内容不深,大多数只是一些概念的东西,数学公式也不会太多,还望读者多多指教…...

为什么HDI叠孔比错孔设计难生产
摘要:本文深入探讨了HDI(高密度互连)技术中叠孔与错孔设计在生产难度上的差异。通过对两种设计在对位精度、制程复杂性、可靠性挑战等方面进行详细分析,阐述了叠孔设计在生产过程中面临的一系列难题,旨在为HDI产品的设…...

2025年06月06日Github流行趋势
项目名称:agent-zero 项目地址url:https://github.com/frdel/agent-zero项目语言:Python历史star数:8958今日star数:324项目维护者:frdel, 3clyp50, linuztx, evrardt, Jbollenbacher项目简介:A…...