Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >聊聊流式数据湖Paimon(一)

聊聊流式数据湖Paimon(一)

作者头像
Ryan_OVO
发布于 2023-12-26 01:05:41
发布于 2023-12-26 01:05:41
2.2K01
代码可运行
举报
文章被收录于专栏:程序随笔程序随笔
运行总次数:1
代码可运行

翻译自 Apache Paimon官方文档

概览

概述

Apache Paimon (incubating) 是一项流式数据湖存储技术,可以为用户提供高吞吐、低延迟的数据摄入、流式订阅以及实时查询能力。

简单来说,Paimon的上游是各个CDC,即changlog数据流;而其自身支持实时sink与search(下沉与查询)changlog数据流。一般会与Flink等流式计算引擎集成使用。

流式数据湖是一种先进的数据存储架构,专门为处理大规模实时数据流而设计。在流式数据湖中,数据以流的形式持续不断地进入系统,而不是批量存储后处理。

数据湖是一个存储企业的各种各样原始数据的大型仓库,其中的数据可供存取、处理、分析及传输。

数据仓库中的数据是经过优化后(也可以看作是结构化的数据),且与该数据仓库支持的数据模型吻合的数据。

Paimon提供以下核心功能:

  • 统一批处理和流式处理:Paimon支持批量写入和批量读取,以及流式写入更改和流式读取表change log。
  • 数据湖:Paimon作为数据湖存储,具有成本低、可靠性高、元数据可扩展等优点。
  • Merge Engines:Paimon支持丰富的合并引擎(Merge Engines)。默认情况下,保留主键的最后一个条目。您还可以使用“部分更新”或“聚合”引擎。
  • Changelog Producer:用于在数据湖中生成和跟踪数据的变更日志(changelog);Paimon 支持丰富的 Changelog Producer,例如“lookup”和“full-compaction”;正确的changelog可以简化流式处理管道的构造。
  • Append Only Tables:Paimon支持只追加(append only)表,自动压缩小文件,提供有序的流式读取。您可以使用它来替换消息队列

架构

架构如下所示 读/写:Paimon 支持多种读/写数据和执行 OLAP 查询的方式。

  • 对于读取,支持如下三种方式消费数据
    • 历史快照(批处理模式)
    • 最新的偏移量(流模式)
    • 混合模式下读取增量快照
  • 对于写入,它支持来自数据库变更日志(CDC)的流式同步或来自离线数据的批量插入/覆盖。

生态系统:除了Apache Flink之外,Paimon还支持Apache Hive、Apache Spark、Trino等其他计算引擎的读取。 底层存储:Paimon 将列式文件存储在文件系统/对象存储上,并使用 LSM 树结构来支持大量数据更新和高性能查询。

统一存储

对于 Apache Flink 这样的流引擎,通常有三种类型的connector:

  • 消息队列,例如 Apache Kafka,在该消息管道(pipeline)的源阶段和中间阶段使用,以保证延迟保持在秒级。
  • OLAP系统,例如ClickHouse,它以流方式接收处理后的数据并服务用户的即席查询。
  • 批量存储,例如Apache Hive,它支持传统批处理的各种操作,包括INSERT OVERWRITE。

Paimon 提供抽象概念的表。 它的使用方式与传统数据库没有什么区别:

  • 在批处理执行模式下,它就像一个Hive表,支持Batch SQL的各种操作。 查询它以查看最新的快照。
  • 在流执行模式下,它的作用就像一个消息队列。 查询它的行为就像从历史数据永不过期的消息队列中查询stream changelog。

基本概念

Snapshot

snapshot捕获table在某个时间点的状态。 用户可以通过最新的snapshot来访问表的最新数据。通过time travel,用户还可以通过较早的快照访问表的先前状态。

Partition

Paimon 采用与 Apache Hive 相同的分区概念来分离数据。 分区是一种可选方法,可根据date, city, and department等特定列的值将表划分为相关部分。每个表可以有一个或多个分区键来标识特定分区。 通过分区,用户可以高效地操作表中的一片记录。

Bucket

未分区表或分区表中的分区被细分为Bucket(桶),以便为可用于更有效查询的数据提供额外的结构。 Bucket的范围由record中的一列或多列的哈希值确定。用户可以通过提供bucket-key选项来指定分桶列。如果未指定bucket-key选项,则主键(如果已定义)或完整记录将用作存储桶键。 Bucket是读写的最小存储单元,因此Bucket的数量限制了最大处理并行度。 不过这个数字不应该太大,因为它会导致大量 小文件和低读取性能。 一般来说,每个桶中建议的数据大小约为200MB - 1GB。

Consistency Guarantees

Paimon Writer 使用两阶段提交协议以原子方式将一批record提交到Table中。每次提交时最多生成两个snapshot。 对于任意两个同时修改table的写入者,只要他们不修改同一个Bucket,他们的提交就可以并行发生。如果他们修改同一个Bucket,则仅保证快照隔离。也就是说,最终表状态可能是两次提交的混合,但不会丢失任何更改。


文件

概述

一张表的所有文件都存储在一个基本目录下。 Paimon 文件以分层方式组织。 下图说明了文件布局。 从snapshot文件开始,Paimon reader可以递归地访问表中的所有记录。

Snapshot Files

所有snapshot文件都存储在snapshot目录中。 snapshot文件是一个 JSON 文件,包含有关此snapshot的信息,包括

  • 正在使用的Schema文件
  • 包含此snapshot的所有更改的清单列表(manifest list)

Manifest Files

所有清单(manifest)列表和清单文件都存储在清单目录中。 清单列表(manifest list)是清单文件名的列表。 清单文件是包含有关 LSM 数据文件和changelog文件的更改的文件。 例如对应快照中创建了哪个LSM数据文件、删除了哪个文件。

Data Files

数据文件按分区和桶(Bucket)分组。每个Bucket目录都包含一个 LSM 树及其changelog文件。 目前,Paimon 支持使用 orc(默认)、parquet 和 avro 作为数据文件格式。

LSM-Trees

Paimon 采用 LSM 树(日志结构合并树)作为文件存储的数据结构。 如下简要介绍

Sorted Runs

LSM 树将文件组织成多个 sorted runs。 sorted runs由一个或多个数据文件组成,并且每个数据文件恰好属于一个 sorted runs。 数据文件中的记录按其主键排序。 在 sorted runs中,数据文件的主键范围永远不会重叠。

如图所示的,不同的 sorted runs可能具有重叠的主键范围,甚至可能包含相同的主键。查询LSM树时,必须合并所有 sorted runs,并且必须根据用户指定的合并引擎和每条记录的时间戳来合并具有相同主键的所有记录。 写入LSM树的新记录将首先缓存在内存中。当内存缓冲区满时,内存中的所有记录将被顺序并刷新到磁盘,并创建一个新的 sorted runs。

Compaction

当越来越多的记录写入LSM树时,sorted runs的数量将会增加。由于查询LSM树需要将所有 sorted runs合并起来,太多 sorted runs将导致查询性能较差,甚至内存不足。 为了限制 sorted runs的数量,我们必须偶尔将多个 sorted runs合并为一个大的 sorted runs。 这个过程称为压缩。 然而,压缩是一个资源密集型过程,会消耗一定的CPU时间和磁盘IO,因此过于频繁的压缩可能会导致写入速度变慢。 这是查询和写入性能之间的权衡。 Paimon 目前采用了类似于 Rocksdb 通用压缩的压缩策略。 默认情况下,当Paimon将记录追加到LSM树时,它也会根据需要执行压缩。 用户还可以选择在专用压缩作业中执行所有压缩。

可以将 sorted runs 理解为多个有序的Data File组成的一个有序文件。


主键表

Changelog表是创建表时的默认表类型。用户可以在表中插入、更新或删除记录。 主键由一组列组成,这些列包含每个记录的唯一值。Paimon通过对每个bucket中的主键进行排序来实现数据排序,允许用户通过对主键应用过滤条件来实现高性能。 通过在变更日志表上定义主键,用户可以访问以下特性。

Bucket

桶(Bucket)是进行读写操作的最小存储单元,每个桶目录包含一个LSM树。

Fixed Bucket

配置一个大于0的桶,使用Fixed bucket模式,根据Math.abs(key_hashcode % numBuckets)来计算记录的桶。 重新缩放桶只能通过离线进程进行。桶的数量过多会导致小文件过多,桶的数量过少会导致写性能不佳。

Dynamic Bucket

配置'Bucket'='-1'。 先到达的key会落入旧的bucket,新的key会落入新的bucket,bucket和key的分布取决于数据到达的顺序。 Paimon 维护一个索引来确定哪个键对应哪个桶。 Paimon会自动扩大桶的数量。

  • Option1: 'dynamic-bucket.target-row-num':控制一个桶的目标行数。
  • Option2:'dynamic-bucket.initial-buckets':控制初始化bucket的数量。
Normal Dynamic Bucket Mode

当更新不跨分区(没有分区,或者主键包含所有分区字段)时,动态桶模式使用 HASH 索引来维护从键到桶的映射,它比固定桶模式需要更多的内存。 如下:

  • 一般来说,没有性能损失,但会有一些额外的内存消耗,一个分区中的 1 亿个条目多占用 1 GB 内存,不再活动的分区不占用内存。
  • 对于更新率较低的表,建议使用此模式,以显着提高性能。
Cross Partitions Upsert Dynamic Bucket Mode

当需要跨分区upsert(主键不包含所有分区字段)时,Dynamic Bucket模式直接维护键到分区和桶的映射,使用本地磁盘,并在启动流写作业时通过读取表中所有现有键来初始化索引 。 不同的合并引擎有不同的行为:

  1. Deduplicate:删除旧分区中的数据,并将新数据插入到新分区中。
  2. PartialUpdate & Aggregation:将新数据插入旧分区。
  3. FirstRow:如果有旧值,则忽略新数据。

性能:对于数据量较大的表,性能会有明显的损失。而且,初始化需要很长时间。 如果你的upsert不依赖太旧的数据,可以考虑配置索引TTL来减少索引和初始化时间: 'cross-partition-upsert.index-ttl':rocksdb索引和初始化中的TTL,这样可以避免维护太多索引而导致性能越来越差。 但请注意,这也可能会导致数据重复。

Merge Engines

当Paimon sink收到两条或更多具有相同主键的记录时,它会将它们合并为一条记录以保持主键唯一。 通过指定merge-engine属性,用户可以选择如何将记录合并在一起。

Deduplicate

deduplicate合并引擎是默认的合并引擎。 Paimon 只会保留最新的记录,并丢弃其他具有相同主键的记录。 具体来说,如果最新的记录是DELETE记录,则所有具有相同主键的记录都将被删除。

Partial Update

通过指定 'merge-engine' = 'partial-update',用户可以通过多次更新来更新记录的列,直到记录完成。 这是通过使用同一主键下的最新数据逐一更新值字段来实现的。 但是,在此过程中不会覆盖空值。 如下所示:

  • <1, 23.0, 10, NULL>-
  • <1, NULL, NULL, 'This is a book'>
  • <1, 25.2, NULL, NULL>

假设第一列是主键key,那么最后的结果是 <1, 25.2, 10, 'This is a book'>

Sequence Group

Sequence字段并不能解决多流更新的部分更新表的乱序问题,因为多流更新时 Sequence(序列) 字段可能会被另一个流的最新数据覆盖。 因此我们引入了部分更新表的序列组(Sequence Group)机制。 它可以解决:

  1. 多流更新时出现混乱。 每个流定义其自己的序列组。
  2. 真正的部分更新,而不仅仅是非空更新。

如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
CREATE TABLE T (
  k INT,
  a INT,
  b INT,
  g_1 INT,
  c INT,
  d INT,
  g_2 INT,
  PRIMARY KEY (k) NOT ENFORCED
) WITH (
  'merge-engine'='partial-update',
  'fields.g_1.sequence-group'='a,b',
  'fields.g_2.sequence-group'='c,d'
);

INSERT INTO T VALUES (1, 1, 1, 1, 1, 1, 1);

-- g_2 is null, c, d should not be updated
INSERT INTO T VALUES (1, 2, 2, 2, 2, 2, CAST(NULL AS INT));

SELECT * FROM T; -- output 1, 2, 2, 2, 1, 1, 1

-- g_1 is smaller, a, b should not be updated
INSERT INTO T VALUES (1, 3, 3, 1, 3, 3, 3);

SELECT * FROM T; -- output 1, 2, 2, 2, 3, 3, 3

对于 sequence-group,有效的比较数据类型包括:DECIMAL、TINYINT、SMALLINT、INTEGER、BIGINT、FLOAT、DOUBLE、DATE、TIME、TIMESTAMP 和 TIMESTAMP_LTZ。

Aggregation

可以为输入字段指定聚合函数,支持聚合中的所有函数。 如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
CREATE TABLE T (
          k INT,
          a INT,
          b INT,
          c INT,
          d INT,
          PRIMARY KEY (k) NOT ENFORCED
) WITH (
     'merge-engine'='partial-update',
     'fields.a.sequence-group' = 'b',
     'fields.b.aggregate-function' = 'first_value',
     'fields.c.sequence-group' = 'd',
     'fields.d.aggregate-function' = 'sum'
 );
INSERT INTO T VALUES (1, 1, 1, CAST(NULL AS INT), CAST(NULL AS INT));
INSERT INTO T VALUES (1, CAST(NULL AS INT), CAST(NULL AS INT), 1, 1);
INSERT INTO T VALUES (1, 2, 2, CAST(NULL AS INT), CAST(NULL AS INT));
INSERT INTO T VALUES (1, CAST(NULL AS INT), CAST(NULL AS INT), 2, 2);


SELECT * FROM T; -- output 1, 2, 1, 2, 3
Default Value

如果无法保证数据的顺序,仅通过覆盖空值的方式写入字段,则读表时未覆盖的字段将显示为空。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
CREATE TABLE T (
                  k INT,
                  a INT,
                  b INT,
                  c INT,
                  PRIMARY KEY (k) NOT ENFORCED
) WITH (
     'merge-engine'='partial-update'
     );
INSERT INTO T VALUES (1, 1, CAST(NULL AS INT), CAST(NULL AS INT));
INSERT INTO T VALUES (1, CAST(NULL AS INT), CAST(NULL AS INT), 1);

SELECT * FROM T; -- output 1, 1, null, 1

如果希望读表时未被覆盖的字段有默认值而不是null,则需要fields.name.default-value

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
CREATE TABLE T (
    k INT,
    a INT,
    b INT,
    c INT,
    PRIMARY KEY (k) NOT ENFORCED
) WITH (
    'merge-engine'='partial-update',
    'fields.b.default-value'='0'
);

INSERT INTO T VALUES (1, 1, CAST(NULL AS INT), CAST(NULL AS INT));
INSERT INTO T VALUES (1, CAST(NULL AS INT), CAST(NULL AS INT), 1);

SELECT * FROM T; -- output 1, 1, 0, 1
Aggregation

有时用户只关心聚合结果。 聚合 合并引擎根据聚合函数将同一主键下的各个值字段与最新数据一一聚合。 每个不属于主键的字段都可以被赋予一个聚合函数,由 fields.<field-name>.aggregate-function 表属性指定,否则它将使用 last_non_null_value 聚合作为默认值。 例如,请考虑下表定义。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
CREATE TABLE MyTable (
    product_id BIGINT,
    price DOUBLE,
    sales BIGINT,
    PRIMARY KEY (product_id) NOT ENFORCED
) WITH (
    'merge-engine' = 'aggregation',
    'fields.price.aggregate-function' = 'max',
    'fields.sales.aggregate-function' = 'sum'
);

price字段将通过 max 函数聚合,sales字段将通过 sum 函数聚合。 给定两个输入记录 <1, 23.0, 15> 和 <1, 30.2, 20>,最终结果将是 <1, 30.2, 35>。 当前支持的聚合函数和数据类型有:

  • sum:支持 DECIMAL、TINYINT、SMALLINT、INTEGER、BIGINT、FLOAT 和 DOUBLE。
  • min/max:支持 CHAR、VARCHAR、DECIMAL、TINYINT、SMALLINT、INTEGER、BIGINT、FLOAT、DOUBLE、DATE、TIME、TIMESTAMP 和 TIMESTAMP_LTZ。
  • last_value / last_non_null_value:支持所有数据类型。
  • listagg:支持STRING数据类型。
  • bool_and / bool_or:支持BOOLEAN数据类型。
  • first_value/first_not_null_value:支持所有数据类型。

只有 sum 支持撤回(UPDATE_BEFORE 和 DELETE),其他聚合函数不支持撤回。 如果允许某些函数忽略撤回消息,可以配置:'fields.${field_name}.ignore-retract'='true'

First Row

通过指定 'merge-engine' = 'first-row',用户可以保留同一主键的第一行。 它与Deduplicate合并引擎不同,在First Row合并引擎中,它将生成仅insert changelog。

  1. First Row合并引擎必须与 lookup changlog producer 一起使用。
  2. 不能指定sequence.field。
  3. 不接受 DELETE 和 UPDATE_BEFORE 消息。 可以配置 first-row.ignore-delete 来忽略这两种记录。

这对于替代流计算中的log deduplication有很大的帮助。

Changelog Producers

流式查询会不断产生最新的变化。 通过在创建表时指定更改changelog-producer表属性,用户可以选择从表文件生成的更改模式。

Changelog:通俗全面的理解就是操作过程中(比如ETL/CRUD),数据变化的日志;这样的日志可以帮助跟踪数据的历史变化,确保数据的质量与一致性,并允许回溯到之前的某个数据状态,帮助进行数据审计数据分析数据恢复等。

None

默认情况下,不会将额外的changelog producer应用于表的writer。 Paimon source只能看到跨snapshot的合并更改,例如删除了哪些键以及某些键的新值是什么。 但是,这些合并的更改无法形成完整的changelog,因为我们无法直接从中读取键的旧值。 合并的更改要求消费者“记住”每个键的值并重写这些值而不看到旧的值。 然而,一些消费者需要旧的值来确保正确性或效率。 考虑一个消费者计算某些分组键的总和(可能不等于主键)。 如果消费者只看到一个新值5,它无法确定应该将哪些值添加到求和结果中。 例如,如果旧值为 4,则应在结果中加 1。 但如果旧值是 6,则应依次从结果中减去 1。 旧的value对于这些类型的消费者来说很重要。 总而言之,没有一个changelog producer最适合数据库系统等使用者。 Flink 还有一个内置的"normalize"运算符,可以将每个键的值保留在状态中。 很容易看出,这种操作符的成本非常高,应该避免使用。 (可以通过“scan.remove-normalize”强制删除“normalize”运算符。)

Input

通过指定 'changelog- Producer' = 'input',Paimon Writer依赖他们的输入作为完整changelog的来源。 所有输入记录将保存在单独的changelog file中,并由 Paimon source提供给消费者。 当 Paimon 编写者的输入是完整的changelog(例如来自数据库 CDC)或由 Flink 状态计算生成时,可以使用input changelog producer.

Lookup

如果您的输入无法生成完整的changelog,但想摆脱昂贵的"normalize"运算符,则可以考虑使用'lookup' changelog producer. 通过指定'changelog- Producer' = 'lookup',Paimon将在提交数据写入之前通过'lookup'生成changelog。

Lookup 会将数据缓存在内存和本地磁盘上,您可以使用以下选项来调整性能:

Lookup changelog- Producer 支持changelog- Producer.row-deduplicate以避免为同一记录生成-U、+U changelog。

Full Compaction

如果你觉得“lookup”的资源消耗太大,可以考虑使用“full-compaction”changelog Producer,它可以解耦数据写入和changelog生成,更适合高延迟的场景(例如10分钟) )。 通过指定 'changelog- Producer' = 'full-compaction',Paimon 将比较完全压缩之间的结果并生成差异作为changelog。changelog的延迟受到完全压缩频率的影响。 通过指定 full-compaction.delta-commits 表属性,在增量提交(检查点 checkpoint)后将不断触发 full compaction。 默认情况下设置为 1,因此每个检查点都会进行完全压缩并生成change log。

Full-compaction changelog- Producer 支持changelog- Producer.row-deduplicate 以避免为同一记录生成-U、+U 变更日志。

Sequence Field

默认情况下,主键表根据输入顺序确定合并顺序(最后输入的记录将是最后合并的)。 然而在分布式计算中,会存在一些导致数据混乱的情况。 这时,可以使用时间字段作为sequence.field,例如:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
CREATE TABLE MyTable (
    pk BIGINT PRIMARY KEY NOT ENFORCED,
    v1 DOUBLE,
    v2 BIGINT,
    dt TIMESTAMP
) WITH (
    'sequence.field' = 'dt'
);

无论输入顺序如何,具有最大sequence.field 值的记录将是最后合并的记录。 Sequence Auto Padding: 当记录更新或删除时,sequence.field必须变大,不能保持不变。 对于-U和+U,它们的序列字段必须不同。 如果您无法满足此要求,Paimon 提供了自动填充序列字段的选项。

  1. 'sequence.auto-padding' = 'row-kind-flag':如果对-U和+U使用相同的值,就像Mysql Binlog中的“op_ts”(数据库中进行更改的时间)一样。 建议使用自动填充行类型标志,它会自动区分-U(-D)和+U(+I)。
  2. 精度不够:如果提供的sequence.field不满足精度,比如大约秒或毫秒,可以将sequence.auto-padding设置为秒到微或毫秒到微,这样序列号的精度 将由系统弥补到微秒。
  3. 复合模式:例如“second-to-micro,row-kind-flag“,首先将micro添加到第二个,然后填充row-kind标志。

Row Kind Field

默认情况下,主键表根据输入行确定行类型。 您还可以定义“rowkind.field”以使用字段来提取行类型。 有效的行类型字符串应为“+I”、“-U”、“+U”或“-D”。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-12-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
自动驾驶的技术架构和生态发展
我们先以汽车在现代科技领域的演进来开始这次的chat,最早的就是电动汽车,其中的代表无疑是特兹拉,相信大家对电动车还是比较熟悉的,这里就不展开说明了。接下来就是最近很火的共享车,以滴滴来讲,据滴滴官方报道平台用户3亿,车主1500万,日均订单有1400万,从1400万的数据来看订单数已经超过美团,大众点评,在中国互联网界仅次于阿里巴巴和京东,要知道滴滴是个非常年轻的公司,但是这1400万的日均订单也只占整个出行市场的1%,可见整个出行市场的天花板还远远望不到头。接下来就是车联网领域,车联网是个很广义的概念,
刘盼
2018/03/16
1.7K0
自动驾驶的技术架构和生态发展
平均交付准确率99%以上!又一大厂进军自动驾驶AI数据服务,教AI学会人类标注能力
允中 发自 凹非寺 量子位 | 公众号 QbitAI △AI数据是人工智能行业的燃料,在智能驾驶领域同样扮演着助推技术落地的角色 如今自动驾驶成为了人工智能领域最受关注、最具挑战和影响力最为广泛的产业方向,是推动全球汽车工业变革最重要的科技力量。 汽车正在向智能化转变,在自动驾驶落地较好的企业往往也具备强劲的市场竞争力。但目前智能汽车想要实现更高等级的自动驾驶,还有许多技术难点有待解决。 成熟的自动驾驶技术需要具备感知和决策两方面能力。 通过多种融合的车外传感器使汽车具备感知周围行驶环境的能力;决策则是
量子位
2023/02/28
3530
平均交付准确率99%以上!又一大厂进军自动驾驶AI数据服务,教AI学会人类标注能力
借力算法,海天瑞声驾驭自动驾驶“新引擎”
机器之心原创 作者:吴昕 2022 年的 3 月,或将被写入自动驾驶史册——美国颁布无人驾驶法规,中国也许将从政策层面允许 L3 自动驾驶乘用车上路,国内首条支持自动驾驶的快速路通车运营…… 毫无疑问,自动驾驶已经逐渐从快速迭代迈入大规模落地阶段。在这个 “临门一脚” 的关键时刻,想要让汽车本身的算法做到处理更多、更复杂的场景,不可或缺的是海量的场景数据支撑。 通过对话国内唯一 A 股上市数据服务商—海天瑞声,透视 AI 数据在助推自动驾驶实现的路上,所面临的机会与挑战。 一、自动驾驶数据迎来爆发期
机器之心
2022/03/24
3090
浅析基于双目视觉的自动驾驶技术
单目视觉是Mobileye(ME)的看家法宝,其实当年它也考虑过双目,最终选择放弃。
3D视觉工坊
2022/03/11
9400
浅析基于双目视觉的自动驾驶技术
深度|详解自动驾驶核心部件激光雷达,它凭什么卖70万美元?
【新智元导读】作为自动驾驶汽车的核心部件之一,激光雷达传感器以昂贵出名,此前的价格高达70万美元,远超普通汽车。自动驾驶研究专家黄武陵在本文中介绍了激光雷达传感器的关键作用和激光雷达传感器在环境感知中
新智元
2018/03/26
1.7K0
深度|详解自动驾驶核心部件激光雷达,它凭什么卖70万美元?
【机器学习】自动驾驶——智能交通与无人驾驶技术的未来
自动驾驶的概念源自20世纪60年代,但真正的突破发生在2000年代初期,谷歌、特斯拉等公司开始投入大量资源研发相关技术。如今,全球多家科技公司和汽车厂商都在积极布局这一领域,力求实现无人驾驶的未来。
2的n次方
2024/10/15
4710
【机器学习】自动驾驶——智能交通与无人驾驶技术的未来
大盘点|三维视觉与自动驾驶数据集(40个)
简介:KITTI数据集由德国卡尔斯鲁厄理工学院和丰田美国技术研究院联合创办,是目前国际上最大的自动驾驶场景下的算法评测数据集。该数据集用于评测立体图像(stereo),光流(optical flow),视觉测距(visual odometry),3D物体检测(object detection)和3D跟踪(tracking)等计算机视觉技术在车载环境下的性能。KITTI包含市区、乡村和高速公路等场景采集的真实图像数据,每张图像中最多达15辆车和30个行人,还有各种程度的遮挡与截断。整个数据集由389对立体图像和光流图,39.2 km视觉测距序列以及超过200k 3D标注物体的图像组成,以10Hz的频率采样及同步。对于3D物体检测,label细分为car, van, truck, pedestrian, pedestrian(sitting), cyclist, tram以及misc。
3D视觉工坊
2021/07/29
2K0
使用深度学习做自动驾驶,“PlusAI”希望在未来1-3年完成全工况L4级无人驾驶
近期接触的“PlusAI”也是一家使用深度学习做自动驾驶解决方案的公司,成立于2016年,在美国硅谷、北京、西安设有研发中心。PlusAI与包括斯坦福、西安交大在内的高校研究所有合作。PlusAI目前已经获得美国加州自动驾驶的测试牌照,这在创业企业中是比较少见的,同时,其自动驾驶原型试验样车已经在加州进行路测,目前已经测试了上万英里。 PlusAI已经吸纳了一线美元基金和个人商业领袖的投资及参与,包括一家地图公司,并与两家车企建立了合作。此外,PlusAI也在和国内地方政府在洽谈产业落地事宜。PlusAI
AiTechYun
2018/03/02
7700
机器学习在自动驾驶中的应用-以百度阿波罗平台为例【上】
自动驾驶是人工智能当前最热门的方向之一,也是未来将对人类生活会产生重大影响的方向。机器学习在自动驾驶中有举足轻重的地位,从环境感知到策略控制,都有它的身影。在本文中,SIGAI将以百度阿波罗平台为例,介绍机器学习在自动驾驶系统中的应用,揭开自动驾驶算法的神秘面纱。
SIGAI学习与实践平台
2018/08/07
1.1K0
机器学习在自动驾驶中的应用-以百度阿波罗平台为例【上】
深度学习在自动驾驶感知领域的应用
本次直播课程是由深度学习资深研究者-杨阳博士从百度Apollo自动驾驶感知技术出发,讲解环境感知中深度学习的实用性与高效性。
AI科技大本营
2019/05/06
1.5K0
TJ4DRadSet:自动驾驶4D成像雷达数据集
文章:TJ4DRadSet: A 4D Radar Dataset for Autonomous Driving
点云PCL博主
2022/12/27
1.2K0
TJ4DRadSet:自动驾驶4D成像雷达数据集
自动驾驶 Apollo 源码分析系列,感知篇(一)
我是自动驾驶从业者,百度的 Apollo 是行业优秀的开源框架,近几年发展的比较快,基于对技术的热爱,我计划用 3 个月的样子来学习 Apollo 的源码,以提升自己的自动驾驶认知和技术。
Frank909
2020/12/21
2.8K0
自动驾驶 Apollo 源码分析系列,感知篇(一)
Momenta 陈凯:Momenta 自动驾驶背后的底层技术及人才需求 | 职播间第 4 期(附 Momenta 招聘解读)
AI 科技评论按:目前全球汽车行业公认由美国高速公路安全管理局(NHTSA)和国际自动机工程师学会(SAE)提出的的分级制度,把自动驾驶分成 L0 到 L5 级,分别承担相应的职责,而 L4 作为级别第二高的无人驾驶,是指在特定场景下(如高速公路)可以在完全没有人干预时进行全自动无人驾驶,到现在为止,实现 L4 无人驾驶依旧是人工智能领域最具挑战性、最复杂的难题之一。
AI科技评论
2018/12/12
2K0
Momenta 陈凯:Momenta 自动驾驶背后的底层技术及人才需求 | 职播间第 4 期(附 Momenta 招聘解读)
大模型来了,自动驾驶还远吗?关键看“眼睛”
感知系统是自动驾驶最重要的模块之一,被视为智能车的“眼睛”,对理解周围环境起到至关重要的作用。随着深度学习以及传感器技术的发展,感知系统呈现出迅猛的发展趋势,涌现出各种新技术,性能指标不断提升。本文将围绕感知系统架构、方法及挑战,结合驭势科技的具体实践深入探究自动驾驶感知技术。 作者 |耿秀军、李金珂、张丹、彭进展 出品 | 新程序员 感知系统架构与方法 目标的检测与跟踪是感知系统的两大基础任务,主要利用不同传感器数据输入,完成对周围障碍物的检测与跟踪,并将结果传递给下游规划控制模块完成预测、决策、规划、
AI科技大本营
2023/05/15
5120
大模型来了,自动驾驶还远吗?关键看“眼睛”
自动驾驶综述|定位、感知、规划常见算法汇总
这一部分概述了自动驾驶汽车自动化系统的典型体系结构,并对感知系统、决策系统及其子系统的职责进行了评述。
磐创AI
2020/05/26
3K0
自动驾驶综述|定位、感知、规划常见算法汇总
无人车业务中的视觉三维重建
高精地图也称为高分辨率地图(High Definition Map, HDMap)或者高度自动驾驶地图(Highly Automated Driving Map, HAD Map)。近些年,随着自动驾驶技术以及业务的蓬勃发展,高精地图成为了实现高等级自动驾驶必不可少的数据。
美团无人配送
2021/11/02
2.3K0
高精地图介绍
高精度地图,通俗来讲就是精度更高、数据维度更多的电子地图。精度更高体现在精确到厘米级别,数据维度更多体现在其包括了除道路信息之外的与交通相关的周围静态信息。
点云PCL博主
2019/07/30
5.4K0
高精地图介绍
【智驾深谈】自动驾驶潜在突破点:传感器与车载集成系统(万字干货)
作者:黄武陵 【新智元导读】黄武陵从事无人车系统研发、无人车标准评估体系构建、无人车挑战赛等工作多年,每次发表观点都非常详尽,本文从自动驾驶近期热点入手,结合挑战赛八年积累,深入分析了传感、感知、车联
新智元
2018/03/23
1.7K0
【智驾深谈】自动驾驶潜在突破点:传感器与车载集成系统(万字干货)
自动驾驶领域,「决策」和「感知」终于握手言和
一方面,资本力量的积极投入,行业巨头纷纷抢占先机。例如,特斯拉近期推出了其“端到端”的全自动驾驶软件FSD v12版本,并已在美国和加拿大地区逐步面向非员工用户提供更新服务。与此同时,小米汽车于23年末宣告搭载自主研发的端到端感知决策大模型的小米智能驾驶系统面世,展现其在自动驾驶领域的创新突破。
AI科技评论
2024/02/27
3850
自动驾驶领域,「决策」和「感知」终于握手言和
Apollo自动驾驶之地图生产技术
在城市道路环境下,高精地图生产分为数据采集、数据处理、元素识别、人工验证四个环节。
李小白是一只喵
2022/03/21
6160
Apollo自动驾驶之地图生产技术
推荐阅读
相关推荐
自动驾驶的技术架构和生态发展
更多 >
LV.1
这个人很懒,什么都没有留下~
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验