案例分享|Alluxio在自动驾驶数据闭环中的应用
分享嘉宾:
孙涛 - 中汽创智智驾工具链数据平台开发专家
关于中汽创智:
中汽创智科技有限公司(以下简称“中汽创智”)由中国一汽、东风公司、南方工业集团、长安汽车和南京江宁经开科技共同出资设立。聚焦智能底盘、新能动力、智能网联三大业务领域,围绕“车端+云端+通信端”生态体系,开展前瞻、共性、平台、核心技术和产品研发及产业孵化。
分享提纲:
1. 自动驾驶数据闭环介绍;
2. Alluxio 在采集标注训练以及合规平台的一些应用场景;
3. 目前存在的问题以及未来规划。
观看完整分享
自动驾驶业务介绍
首先介绍一下中汽创智的自动驾驶整个开发业务流程。我们现在围绕自动驾驶开发主要强调的是数据闭环:开始是数据采集,数据采集之后进行预处理/数据挖掘,包括一些大模型的预刷;接着进入数据标注环节,主要包括人工标注和一些自动化的标注;标注以后产生的带有增值的数据集,提交给算法进行开发训练,如模型训练、评测和推理;最后再去迭代整个自动驾驶模型,模型经过上线进行实车部署。
在数据采集环节,自动驾驶的采集车需要经过改装,进行传感器的标定,主要在标定厂里对车端的一些传感器进行刚性位置的关系调教,改装完的车去做实测采集,比如在城区的道路、高速公路进行采集。每天采集的数据量非常大,一天一辆车采集的数据大概在 1 TB 左右。而采集回来的数据量是没办法通过线上传输的方式上传到我们的私有云或者公有云里,一般是通过特殊的存储介质拷贝带回来。当然也有实时的采集,比如每隔多长时间需要去做一些采样,这种数据是可以通过实时的采集传输到我们的私有云里。
可以看到自动驾驶业务的每个流程里都有数据传输和拷贝的环节,这都是跟存储加速强相关的。
关于标注,公司内部研发了一个人工标注的数据平台,主要把采集回来的数据进行预处理,因为原始的数据可能是一个 bag 包,如同现在机器人开发里基于 ros,里边类似于 Java topic 机制, 可以去订阅包括点云、图片、轨迹数据等,而这些数据是存储在一个二进制的很大文件里。经过预处理要对应到每一个时间戳,比如它有一个频率,每秒大概两帧或者是几帧,然后把这些数据做参数时间戳上的对齐,包括做一些插值,去处理成算法或人工标注所能识别的数据集(可能包括一组文件,里面有 point cloud 这样的文件夹。文件夹里是一帧帧的点云。车上可能有一系列前后左右一组传感器camera,每个时间戳下面都有对应的一张2D图片和一些轨迹,包括内外参的一些参数)。在处理成这种格式的数据之后,然后会把数据集上传到数据标注平台里进行增值的标注。
标注包括多模态,如 3D 的点云, 2D 图片 /camera 。点云和图片标注的时候会做 3D 到 2D 的转换,这个过程从人工标注之后进入到人工审核验收环节,最后流转出来到导出层,就成为了算法所需要的数据集(主要是一些增值数据,比如标注的box、车道线、车道线障碍物、锥桶、行人以及路上的设施)。
在模型开发训练阶段,自动驾驶的主要算法模块包括感知、预测、定位、规控。传统是基于分层的架构开发,每个模块有上下层的逻辑关系,现在比较流行的是端到端的模型训练,类似于我们的人脑,依靠眼睛、耳朵来接收外界的输入信号,通过内容融合的大模型,最终输出自动控制车辆的行为。
对于模型训练,我们跟很多大型企业一样有自己的智算中心,会有很大的投入去建设 GPU 集群用于训练,然后数据集会源源不断的进行输入。最后是模型评测和模型上线。
数据存储管理的痛点:
在整个我们的数据闭环中,数据存储是影响整个开发的非常大的痛点。因为数据是自动驾驶的三要素之一,它像血液一样,能驱动算法,驱动整个业务流程。如果没有数据,算法仅仅是一堆代码,模型根本无法支撑自动驾驶。
√在自动驾驶场景,数据是海量的,包括有采集车数据,一年的规模在几个 PB,如果是长年累月的积攒,这个量是无法估量的,还有座舱数据、平台的业务数据和指标数据,这些都需要管理和治理。
√数据闭环过程中,往往存在重复性的拷贝,重复读写相同数据,造成效率低下。
√平台和算法都存在大量数据上传下载的业务逻辑,并且读写的效率低下。
数据平台架构以及存储选型
存储类型
方案1:JuiceFS
之前也调研过 JuiceFS,并且在数智化部门也有使用的案例。由于我们的数据湖底座是在 OBS 上,对象存储里的数据有多种使用方式,JuiceFS 是自己实现了分布式文件系统的元数据层,按照自己的协议把数据写入 UFS,虽然通过gateway 方式也支持多种协议的读写,但是我们算法还保留着对象存储 API 使用方式,所以我们出于数据可用性考虑放弃。
方案 2 :Alluxio(最终采用)
Alluxio 接触是在我们使用 JuiceFS 之后,在我们多个平台里面共享存储这样的需求,涉及到采集、数据筛选/数据挖掘、合规、标注、训练推理、仿真等相关业务,我们希望有统一底层 UFS 数据接入,读写加速、把读写 UFS 的能力下沉到中间件层,提升业务的效率;Alluxio 开源版本2.9.3的功能特性能够满足我们当前的需求。
Alluxio 介绍
Alluxio 作为机器学习生态系统大数据中的新增数据访问层,可位于任何持久化存储系统(如Amazon S3、Microsoft Azure 对象存储、Apache HDFS 或 OpenStack Swift)和计算框架(如 Pytorch、TensorFlow、Apache Spark、Presto或Hadoop MapReduce )之间,但是 Alluxio 本身并非持久化存储系统。使用 Alluxio 作为数据访问层可带来诸多优势:
对于用户应用和计算框架而言,Alluxio 提供的快速存储可以让任务(无论是否在同一计算引擎上运行)进行数据共享,并且在同时将数据缓存在本地计算集群。因此,当数据在本地时,Alluxio 可以提供内存级别的数据访问速度;当数据在Alluxio中时,Alluxio 将提供计算集群网络带宽级别的数据访问速度。数据只需在第一次被访问时从底层存储系统中读取一次即可。因此,即使底层存储的访问速度较慢,也可以通过 Alluxio 显著加速数据访问。为了获得最佳性能,建议将 Alluxio 与集群的计算框架部署在一起。
就底层存储系统而言,Alluxio 将 AI 应用和不同的存储系统连接起来,因此扩充了能够利用数据的可用工作负载集。由于Alluxio 和底层存储系统的集成对于应用程序是透明的,因此任何底层存储都可以通过 Alluxio支持数据访问的应用和框架。此外,当同时挂载多个底层存储系统时,Alluxio 可以作为任意数量的不同数据源的统一层。内部架构如下:
数据平台架构
我们的海量数据主要是非结构化数据,有别于传统的数仓是结构化的数据(语义直接在数据里),而自驾的数据都是非结构化的,如你光看这些文件(图片、视频或者是点云)并不清楚里面是什么,只有通过挖掘之后才知道它表达的是什么语义,蕴含什么信息。这些需要抽象出来在数据库和数仓里去表达。
架构中数据湖架构底层由对象存储和 HDFS 组成,上面是分布式缓存加速层,如 Alluxio;再往上,我们会将抽象出来的非结构化数据元数据,业务数据存储在 OLTP / OLAP 数据库中,通过流式 cdc 或者数据集成工具同步写入数据湖,采用Hudi / Iceberg / Delta Lake 这样的 tableformat 数据格式,也是为了解决早期 Hive 在 upsert 场景上的性能问题;往上是元数据层,接着再往上我们集成了如 Clickhouse 和 Doris等 OLAP 引擎对业务层进行查询,数据湖则通过 Trino 进行交互式分析。整个数据湖架构为上层业务平台以及算法、工具链提供 DataOps 支撑。
自动驾驶数据平台使用场景
当前方案
目前部署了 3 Master + 10 Worker,客户端随应用侧使用sidecar 方式部署,应用 pod 中业务容器和 sidecar 容器通过存储卷的共享传播机制实现挂载。
主要使用到的 Allluxio 3大特性:
√ 简化数据管理 :Alluxio 提供对多数据源的单点访问,能够对多个独立存储系统提供单点访问,无论这些存储系统的物理位置在何处。这提供了所有数据源的统一视图和应用程序的标准接口。
√ 内存速度 I/O :Alluxio 能够用作分布式共享缓存服务,这样与 Alluxio 通信的计算应用程序可以透明地缓存频繁访问的数据(尤其是从远程位置),以提供内存级 I/O 吞吐率。此外,Alluxio的层次化存储机制能够充分利用内存、固态硬盘或者磁盘,降低具有弹性扩张特性的数据驱动型应用的成本开销。
√ 应用侧实现数据本地挂载 Alluxio-fuse
应用案例一
在我们标注平台有个场景是上提数据集。数据集有大有小,一般上提数据集文件数处于较小规模时没有问题,但如果有一个很大 BEV 数据集,1个包大概5至6GB,我们需要在上提的时候,把原始目录下的文件做转换,一些文件夹的处理。然后,按照每一帧组装好元数据,因为如果是图片可能比较大(几 MB 至十几 MB ),特别是在标注平台里,由于加载原始图片比较大,会涉及到生成缩略图。比如1帧可能会有 7 个camera,每个图片会生成大、中、小 3 个缩略图,这样就放大 3 倍。假如我们现在有3, 000 帧,一个摄像头就可能变成 9, 000 张图片,然后再加上 6 个摄像头,那就再乘以 6 倍,这个数据量就蹭蹭上去了。
之前为使用 Alluxio 的时候,还是通过传统方式先在本地生成,接着通过对象存储的 API 去上传,但当上提较大数据集时(文件数在1w左右),则会出现 gc 问题,刚开始采用多线程并且加内存资源,也依然存在问题,出现 GCLocker 的告警,并且一直重试申请分配对象,最终导致 OOM。
当我们用了 Alluxio之后,把这么多文件通过 MQ 分发到缩略图服务里,然后把 OBS 或者 MinIO 通过 sidecar 方式挂载到我们服务的 pod 里,这个时候可以看到速度非常快,性能也好,没有再出现之前的问题。我们之前读写方面的瓶颈问题,也通过 Alluxio 解决了,非常能够体现 Alluxio 的价值。
应用案例二
第二个是合规平台场景。现在企业里很多都要讲究数据的合规,它是把我们采集回来的数据根据法律法规去做一些数据的糊化和转换,首先是对数据进行分类分级,之后识别出敏感的数据,再通过数据抽帧,对于敏感的帧要进行识别和删除。剩下的数据,比如点云或轨迹,里面会有一些地理性的坐标,这种精准的信息是不允许对外的,只有经过坐标偏转之后才能对外提供服务。最后是个性脱敏,比如拍到的图片里面有人脸、车牌这些属于个人隐私的内容,需要通过算法推理做糊化,输出的图片才能交付给下游使用。
这些服务是通过工作流串联起来的,比如通过消息队列,我们在每个服务侧挂载了 Alluxio,采用 Alluxio sidecar 方式将对象存储挂载到本地,所有数据流转都通过写入本地挂载路径,通过 Alluxio 同步到 OBS 。我们看到当 FUSE Client 开启 cache,Alluxio Fuse 的读取速度从 50MB/sec 提升到了 200MB/sec ;敏感区识别和个人脱敏(人脸和车牌识别糊化)这些推理服务加载预热后的 Alluxio 数据,推理性能提升了40%。
应用案例三
第三个场景是仿真测试平台案例。如图左边的集群是业务集群在 K8S 里,右边是由 C++ 和 C# 写的仿真程序,名字叫Smartview。原先在仿真测试平台我们有个播放 bag 包的case,平台需要获取 OBS 上采集数据目录,然后拉取 bag 包进行仿真程序的回放播包,给算法进行一些 corner case 的定位以及回放;仿真程序单独部署在一个工控机上,运行在 Docker 容器中,需要让 k8s 集群外的 fuse 客户端能访问集群中的 Alluxio;这个时候需要对 Alluxio集群做修改,比如 worker 的配置,将 worker 中 hostNetwork 置为 true。
现在仿真测试也是在用这个环境,1个 bag 包大小都不一样,最小的也超过1GB,属于大文件的读写,我们看到在仿真程序里播包没有任何的延迟,都很顺畅。
Sidecar 接入方法
业务要接入 Alluxio 实现挂载 obs 需要在 k8s 部署 yaml 文件增加如下配置:
比如 haohan-datainject 服务的 deploy.yaml 中增加:
1. pod 配置中增加用户权限配置:
securityContext:runAsUser: 0runAsGroup: 0fsGroup: 0
2. pod 增加存储卷申明:
volumes:- name: alluxio-fuse-volumeemptyDir: {}
3. 增加 sidecar 容器配置:(resources 部分可以自行定义)
4. 业务容器增加挂载配置:
知识点–挂载卷的传播:
挂载卷的传播能力允许将容器安装的卷共享到同一 Pod 中的其他容器,甚至共享到同一节点上的其他 Pod。卷的挂载传播特性由 Container.volumeMounts 中的 mountPropagation 字段控制。它的值包括:
√ None - 此卷挂载将不会感知到主机后续在此卷或其任何子目录上执行的挂载变化。类似的,容器所创建的卷挂载在主机上是不可见的。这是默认模式。该模式等同于 mount(8) 中描述的 rprivate 挂载传播选项。然而,当 rprivate 传播选项不适用时,CRI 运行时可以转为选择 rslave 挂载传播选项 (即 HostToContainer)。当挂载源包含 Docker 守护进程的根目录(/var/lib/docker)时, cri-dockerd ( Docker ) 已知可以选择 rslave 挂载传播选项。
√ HostToContainer - 此卷挂载将会感知到主机后续针对此卷或其任何子目录的挂载操作。换句话说,如果主机在此挂载卷中挂载任何内容,容器将能看到它被挂载在那里。类似的,配置了 Bidirectional 挂载传播选项的 Pod 如果在同一卷上挂载了内容,挂载传播设置为 HostToContainer 的容器都将能看到这一变化.该模式等同于 mount(8) 中描述的 rslave 挂载传播选项。
√ Bidirectional - 这种卷挂载和 HostToContainer 挂载表现相同。另外,容器创建的卷挂载将被传播回至主机和使用同一卷的所有 Pod 的所有容器。该模式等同于 mount(8) 中描述的 rshared 挂载传播选项。
AlluxioFuse 这里一共有三个挂载:
√ AlluxioFuse 把 Alluxio 挂载到容器内的 /mnt/alluxio-fuse 目录下;
√ k8s 把宿主机路径 /mnt 以 bi-direction 的方式挂载到 AlluxioFuse 容器内的 /mnt 路径;
√ k8s把宿主机路径 /mnt 挂载到 application container 内任意路径。
先说第三个挂载,application container,其实把宿主机的 /mnt 还是 /mnt/alluxio-fuse 挂进去都是可以的,只不过容器内部会是不同的路径访问数据,多了一层子目录 alluxio-fuse,前两个挂载是有一点 tricky 的。如果 k8s 把目录 /mnt/alluxio-fuse 挂进 fuse container 的 /mnt/alluxio-fuse,然后 alluxioFuse 又把 Alluxio 挂到 /mnt/alluxio-fuse,会把第一个挂载给挤掉。这个其实还算比较符合直觉,不可能把路径A和路径B都挂到路径C上。挤掉之后这层宿主机和alluxio-fuse 的 connection 就没有了,application 自然也就没办法读到数据。当然用户如果不想把一整个/mnt 都挂进fuse container 里面,也可以用 /mnt/alluxio/alluxio-fuse 取代 /mnt/alluxio-fuse,/mnt/alluxio 取代 /mnt。
JAVA API 访问 Alluxio
应用 pom 文件添加依赖:
<dependency><groupld>org.alluxio</groupld><artifactld>alluxio-core-client-fs<?artifactld><version>2.9.3</version></dependency>
数据预热:Alluxio master 默认是存储元数据的,挂载以后客户端侧默认能看到所有挂载路径下的文件系统系统其实是通过 master load 到元数据,但是业务访问文件系统实际上还要取load数据,数据块是存储在 worker 中的,如果 worker 没有则会去底层的 UFS 即 obs 加载数据,这个在业务运营过程中其实对性能是有损的,所以通常我们惯用的方法就是提前数据预热。Alluxio 的 Java api 中 FileSystem 接口提供大部分文件系统的操作 API,比如新建、删除、挂载、读取、加载元数据等等,当然也有通过 job service 方式提供了其他额外的接口,比如 LoadJob,即可实现 load 数据到 worker。代码如下:
try {AlluxioProperties properties = new AlluxioProperties();properties.set(PropertyKey.MASTER_HOSTNAME, "10.79.180.14");properties.set(PropertyKey.MASTER_RPC_PORT, 30619);AlluxioConfiguration conf = new InstancedConfiguration(properties);FileSystem fs = FileSystem.Factory.create(conf);AlluxioURI path = new AlluxioURI("/origin/101/1664083078340767745/CAIC_郁健峰_L42340_南京市_城区_晴天_白天_20221104_rosbag_202211041650_1667551809843");LoadJobPOptions.Builder options = alluxio.grpc.LoadJobPOptions.newBuilder().setPartialListing(true).setVerify(true);LoadJobRequest job = new LoadJobRequest(path.getPath(), options.build());Optional<String> jobId = fs.submitJob(job);if (jobId.isPresent()) {System.out.printf("Load '%s' is successfully submitted. JobId: %s%n", path, jobId.get());} else {System.out.printf("Load already running for path '%s', updated the job with "+ "new bandwidth: %s, verify: %s%n",path,"unlimited","verify");}} catch (Exception e) {System.out.println("Failed to submit load job " + ": " + e.getMessage());}
遇到的问题
√ 我们的场景有读写,读其实没有太大的问题,但是写入目前2.9.3版本不支持追加写目前写的需求。目前我们是先写临时目录,然后复制到指定分发目录;
√ 元数据同步,目前 Alluxio 是通过设置 metadata sync interval 设置相关 UFS 的元数据同步,如果开启设置固定时间间隔,我们担心对 Alluxio 自身有性能影响,所以还是通过手动通过命令或者代码触发元数据同步。
未来规划
√ 从基础设施层去优化整个 Alluxio 集群的性能,赋能算法训练推理
- 将 Master 独立部署——稳定性保障
- 将 Worker 与 GPU 节点混布——降本增效
- 将 Worker 与 Fuse 混布——本地缓存
√ 参与社区研发,定制化开发一些场景需求
相关文章:
案例分享|Alluxio在自动驾驶数据闭环中的应用
分享嘉宾: 孙涛 - 中汽创智智驾工具链数据平台开发专家 关于中汽创智: 中汽创智科技有限公司(以下简称“中汽创智”)由中国一汽、东风公司、南方工业集团、长安汽车和南京江宁经开科技共同出资设立。聚焦智能底盘、新能动力、智…...
为什么选择 Baklib 而不是 Salesforce 进行知识库管理
对于希望管理其产品和服务的在线文档或知识库以支持其客户和员工的组织来说,市场上有太多的平台和工具。知识库通过向客户和员工提供重要信息来帮助组织提高生产力。这大致分为客户关系管理或客户服务。 很少有平台能够为销售、客户服务等提供一套服务。Salesforce…...
【C++11】解锁C++11新纪元:深入探索Lambda表达式的奥秘
📝个人主页🌹:Eternity._ ⏩收录专栏⏪:C “ 登神长阶 ” 🤡往期回顾🤡:C11右值引用 🌹🌹期待您的关注 🌹🌹 ❀C11 📒1. 可变参数模板…...
c语言排序(2)
前言 在上一篇文章,我们学习了插入排序,选择排序以及交换排序中的冒泡排序,接下来我们继续学习交换排序、归并排序以及非比较排序。 1. 快速排序 快速排序是交换排序的一种,它的基本思想:任取待排序序列中的某元素作…...
vue3+ts+element plus开源框架基础
Vue 3、TypeScript 和 Element Plus 的结合为现代前端应用开发提供了强大的支持。以下是关于这三者结合的基础介绍: 1. Vue 3 Vue 3 是一个流行的开源JavaScript框架,用于构建用户界面和单页面应用。它带来了许多新特性和改进,包括…...
RabbitMQ快速入门(MQ的概念、安装RabbitMQ、在 SpringBoot 项目中集成 RabbitMQ )
文章目录 1. 补充知识:同步通讯和异步通讯1.1 同步通讯1.2 异步通讯 2. 同步调用的缺点2.1 业务耦合2.2 性能较差2.3 级联失败 3. 什么情况下使用同步调用4. 异步调用5. 异步调用的优点和缺点5.1 异步调用的优点5.1.1 解除耦合,拓展性强5.1.2 无需等待&a…...
Linux文件与目录管理命令 ls cp rm mv使用方法
Linux文件与目录的管理基本上包括:显示属性、复制、删除、移动文件与目录等,由于文件与目录的管理不仅重要而且操作频繁,所以本文列举一些常用的管理命令。 如需了解路径的概念及目录的基本操作,可参考【Linux】路径的概念及目录的…...
KubeSphere 部署的 Kubernetes 集群使用 GlusterFS 存储实战入门
转载:KubeSphere 部署的 Kubernetes 集群使用 GlusterFS 存储实战入门 知识点 定级:入门级 GlusterFS 和 Heketi 简介 GlusterFS 安装部署 Heketi 安装部署 Kubernetes 命令行对接 GlusterFS 实战服务器配置(架构1:1复刻小规模生产环境,…...
elasticsearch源码分析-08Serch查询流程
Serch查询流程 查询请求Rest路由注册也是在actionModule中 //查询操作 registerHandler.accept(new RestSearchAction());Override public List<Route> routes() {return unmodifiableList(asList(new Route(GET, "/_search"),new Route(POST, "/_searc…...
【协作提效 Go - gin ! swagger】
什么是swagger Swagger 是一个用于设计、构建、记录和使用 RESTful Web 服务的工具集。它的主要作用包括: API 文档生成:Swagger 可以自动生成详细的 API 文档,包括每个端点的请求和响应格式、参数、状态码等。这使得开发者和用户可以轻松理…...
栈和队列——3.滑动窗口最大值
力扣题目链接 给定一个数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗口每次只向右移动一位。返回滑动窗口中的最大值。 示例: 输入:nums[1,3,-1,-3,5,3,6,7],k 3 …...
嵌入式智能手表开发系列文章之开篇
不好意思,朋友们,我回来了。想想已经断更了好久了。在这段断更的日子里。开拓了个新领域,不搞android 产品,而是去搞嵌入式智能手表啦。 接下来我会用几篇文章来介绍下我对这个领域的看法体会,以及我自己所负责领域的…...
24.8.2数据结构|双链表
双链表 1、定义结构:2个指针域、数据域 2、初始化:创建一个含有N个结点的带头结点双链表head (双链表头结点的前驱与和尾节点的后继与置为空) 3、求表长:返回双链表head的长度 4、取元素:取出双链表head中…...
RabbitMQ高级特性 - 事务消息
文章目录 RabbitMQ 事务消息概述实现原理代码实现不采用事务采用事务 RabbitMQ 事务消息 概述 RabbitMQ 的 AMQP 协议实现了事务机制,允许开发者保证消息的发送和接收时原子性的,也就是说,要么消息全都发送成功,要么全都发送失败…...
leetcode:心算挑战
题目: 心算项目的挑战比赛中,要求选手从N张卡牌中选出cnt张卡牌,若这cnt张卡牌数字总和为偶数,则选手成绩「有效」且得分为cnt张卡牌数字总和。给定数组cards和cnt,其中cards[i]表示第i张卡牌上的数字。 请帮参赛选手计…...
docker部署java项目(war包方式)
场景描述:java项目war包,在开发开电脑上使用dockerfile构建镜像,上传镜像到客户服务器中使用docker加载docker镜像,然后部署。 目录 一、本地环境安装 docker git 二、服务器环境安装 docker 三、构建docker镜像(win系统) 四、注意事项 (1)系统架构 (2)使…...
jsp 自定义taglib
一、简介 我们在javaWeb开发中,经常会用到jsp的taglib标签,有时候并不能满足我们的实际需要,这就需要我们自定义taglib标签, 二、开发步骤 1、编写control方法,继承BodyTagSupport 2、定义zdytaglib.tld标签文件 3、…...
从一到无穷大 #32 TimeCloth,云上的快速 Point-in-Time Recovery
本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。 本作品 (李兆龙 博文, 由 李兆龙 创作),由 李兆龙 确认,转载请注明版权。 文章目录 引言解决方案FAST FINE-GRAINED PITRLog FilterInter-Record Dependency ResolutionL…...
时间序列论文1——Forecasting at Scale
目录 0. AI总结0.1 文章概述0.2 研究背景0.3 研究思路0.4 研究结论与讨论1. Introduction2 Features of Business Time Series3 The Prophet Forecasting Model3.1 The Trend Model3.2 Seasonality3.3 Holidays and Events3.4 Model Fitting3.5 Analyst-in-the-Loop Modeling4 …...
HDFS常用命令
HDFS常用命令 1.HDFS命令介绍1.1基本语法格式1.2常用命令 1.HDFS命令介绍 HDFS 提供了一组命令行工具,用于管理和操作 HDFS 文件系统。 1.1基本语法格式 hdfs dfs -<命令> [选项] <参数>1.2常用命令 1.显示<path>指定的文件的详细信息。 had…...
请问如何做好软件测试工作呢?
一、明确测试目标和范围 理解测试目的:在开始测试之前,首先要明确测试的目标和范围,确保测试计划 与需求相匹配。这有助于测试人员聚焦在关键功能上,避免浪费时间和资源。制定详细的测试计划:根据项目需求࿰…...
单片机开发与Linux开发的区别
引言 单片机(MCU)和Linux开发是嵌入式系统领域的两大主要方向。它们在硬件平台、开发环境、应用场景和开发难度上存在显著区别。本文将系统性地比较单片机开发和Linux开发,探讨它们的主要区别及各自的应用场景和难度体系。 一、基本概念 1…...
【机器学习】回归类算法-相关性分析
一、前言 前面的几篇博客我们学习了分类算法,今天我们来了解一下回归类的算法吧。首先我们来谈谈两者有什么区别,首先是我们在之前的分类算法,这类算法可以将让我们学会如何将不同的数据划分到不同的类里面,输出的是一些离散的值。…...
java基础 之 集合与栈的使用(三)
文章目录 Map接口(一)实现类:HashMap特点HashMap集合的一些方法 (二)实现类: TreeMap特点【自然排序】代码【定制排序】代码TreeMap集合的一些方法 HashMap 和 TreeMap的区别 前文回顾: 戳这里 …...
JDK-java.nio包详解
JDK-java.nio包详解 概述 一直以来Java三件套(集合、io、多线程)都是最热门的Java基础技术点,我们要深入掌握好这三件套才能在日常开发中得心应手,之前有编写集合相关的文章,这里出一篇文章来梳理一下io相关的知识点。…...
虚拟机与服务器的区别是什么?虚拟机与服务器的区别和联系
服务器和虚拟机是两个不同的概念,它们在计算机领域有着不同的含义和作用。今天飞飞就和你分享虚拟机和服务器的区别和联系,希望可以帮助到你~ 1、物理形态 a)服务器是实实在在的物理设备,拥有独立的硬件架构。如CPU、硬盘、内存等 b)虚拟机…...
Linux CentOS stream9 命令
初学linux,对字符界面的命令并不陌生。问到什么是linux命令直接答cd、pwd、ls是linux命令。对于命令的定义并熟悉,也不太关心命令的底层执行逻辑,更关心录入命令,马上获取需要的结果。 本文就命令的定义、分类或执行优先级作一简单介绍。 一、定义 搜索网上对linux命令的…...
JavaScript基础——JavaScript变量声明
变量是存储数据的容器,可以变的量,值可以改变,在JavaScript中,变量声明的关键字有var、let,其中,var是ES5的语法,let是ES6的语法,变量需要先声明,在使用。 声明一个age变…...
ModuleNotFoundError: No Module Named openai
题意:Python 无法在环境中找到名为 openai 的模块 问题背景: import requests from bs4 import BeautifulSoup import openai #write each line of nuclear.txt to a list with open(nuclear.txt, r) as f:lines f.readlines()#remove the newline cha…...
基于SpringBoot+Vue的校园便利平台(带1w+文档)
基于SpringBootVue的校园便利平台(带1w文档) 基于SpringBootVue的校园便利平台(带1w文档) 本平台采用B/S架构、采用的数据库是MySQL,使用JAVA技术开发。该平台的开发方式无论在国内还是国外都比较常见,而且开发完成后使用普遍,可以给平台用户…...
去国外做外卖网站好/电子商务主要学什么
JAVA的JVM的内存可分为3个区:堆(heap)、栈(stack)和方法区(method) 堆区:1.存储的全部是对象,每个对象都包含一个与之对应的class的信息。(class的目的是得到操作指令)2.jvm只有一个堆区(heap)被所有线程共享,堆中不存放基本类型和对象引用&a…...
政府网站建设管理工作自查报告/网站关键词优化排名外包
一、HDFS的读写过程 1. 写流程 <1>HDFS获取客户端; <2>向NameNode请求上传文件; <3>NameNode检查目录树是否可以创建文件; 检查权限 检查目录结构,目录是否存在 <4>NameNode 响应可以上传文件ÿ…...
做外贸都做哪些网站好免费/web网页制作成品
二维码是用某种特定的几何图形按一定规律在平面(二维方向上)分布的黑白相间的图形记录数据符号信息。这篇文章收集了33款创意的二维码名片设计作品,一起欣赏。 KOODOZ Letterpress Business Cards with QR Code STRUMPETS CRUMPETS FORMGARTE…...
清新网站模板/关键词优化排名哪家好
前些日子写了个拦截器里面获取Spring对象的,写的个方法是需要 request的,今天需要搞个线程,而且获取不到 request了,再加上获取 request的方法也不通用,这里来写个通用的。 SpringContext 对象的获取方式有三种 1.从…...
什么是网站的栏目和板块/互联网营销推广渠道
写在前边的话:你的支持是我写作的动力,有帮助到你的话麻烦点赞加收藏呦。感激不尽!如有错误也请留言指正。 考研数据结构练习,欢迎订阅我的专辑《考研数据结构题型分类讲解练习》...
wordpress 评论邮件通知/设计网站模板
在数据库中,有一个值是日期来的。但在ASP.NET显示时,它还是有显示时间部分: 解决这个问题,也许你第一时间想到,在前端页去format一下日期格式,如:http://www.cnblogs.com/insus/archive/2010/05…...