当前位置: 首页 > 工具软件 > Pinot > 使用案例 >

pinot的table配置

索嘉胜
2023-12-01

下面的配置由官网说明翻译过来:

Table Config

示例表配置和描述

下面显示了一个示例表配置,其中的子节被重新排序。这些小节将在下面的小节中分别进行描述。功能特定文档的进一步链接到可用的地方。

tableName : 应该只包含字母数字字符、连字符(' - ')或下划线(' _ ')。虽然使用双下划线(' __ ')是不允许的,并保留在Pinot的其他功能。

tableType : 指示表的类型。每种类型都有一些特定的设置。这将在下文每一分节解释时加以澄清。

 

允许值

OFFLINE : 脱机表用于存放可能定期上传的数据——每日、每周等。有关脱机表的更多信息

REALTIME : realtime表用于使用来自传入数据流的数据,并以接近实时的方式提供这些数据。

表配置格式如下

{

  "tableName": "myPinotTable",

  "tableType": "REALTIME"

  "segmentsConfig": {...},

  "tableIndexConfig": {...},

  "tenants": {...},

  "routing": {...},

  "task": {...},

  "metadata": {...}

}

需要一些部分,否则pinot-controller将拒绝表配置。所需的部分是:

  • tableName

  • tabletype

  • "segmentsConfig": {...}

  • "tableIndexConfig": {...}

  • "tenants": {...}

  • "metadata": {...}

对于实时表,streamConfig部分是必需的。

 

Segments Config Section

segmentsConfig节有关于配置以下信息:

Segment 保留参数 retentionTimeUnit和 retentionTimeValue ,保留只适用于表类型为APPEND

允许值:

  • retentionTimeUnit - DAYS

  • retentionTimeValue - 正整数

  • segmentPushFrequency  以指示片段上传的频率, REALTIME类型的表忽略

允许值: daily, hourly

segmentPushType: 指的是推到表的类型。对于实时类型的表忽略。

允许值: 

APPEND:意味着新的数据将被推入并追加到表中的当前数据中,所有的实时表必须被明确设置为追加。

REFRESH: 将刷新表中包含的整个数据集。 Segment保持在设置为REFRESH时被忽略。

replication: 表中数据的副本数,用于类型为离线表和类型为REALIME 的表。当stream.<consumername>.consumer.type被设置为 HighLevel(参见StreamConfigs部分)

允许值: 正整数

replicasPerPartition : 使用表的单个流数据分区的副本数量,用于类型为REALTIME的表。<consumername>.consumer。type设置为 LowLevel (见StreamConfigs部分)

允许的值-正整数

 

Time列—使用timeColumnName和timeType,它必须与前面的模式中配置的内容匹配。这是一个特殊的列,Pinot使用它来管理保留(删除旧段)、混合表中实时表和离线表之间的分割查询等。

允许的值——字符串,它必须与模式中的timeFieldSpec部分匹配

Segment分配策略-详细描述自定义Pinot页面

 

Table Index Config Section(索引配置部分)

tableIndexConfig部分有关于如何配置的信息如下:

invertedIndexColumns : 指示要为其创建反向索引的架构中指定的实列名列表。更多关于索引的信息可以在索引技术页面找到。

允许的值-字符串;字符串必须与对应模式中的列名匹配

 

noDictionaryColumns : 指示模式中指定的实列名列表。当前的列名不会创建字典。更多关于索引的信息可以在索引技术页面找到。

允许的值-字符串;字符串必须与对应模式中的列名匹配

 

sortedColumn:  指示模式中指定的实列名列表。应该根据提供的列名对数据进行排序。只需要为实时表设置此字段。对于离线,如果源数据已排序,我们将自动创建一个已排序的索引。更多关于索引的信息可以在索引技术页面找到。

允许的值-字符串;字符串必须与对应模式中的列名匹配

 

aggregateMetrics:  切换到聚合度量特性。此功能将在使用时聚合实时流数据(如适用),以减少段大小。我们对具有相同维列值的所有行的度量列值求和,并在所有这些行的实时段中创建一行。此功能仅在实时表中可用。

允许的值——true启用,false禁用。

 

segmentPartitionConfig : 配置数据分区策略。有关此特点的更多文档可以在数据分区策略一节中找到。

loadMode—指示将如何在pinot-server上加载数据。可以配置“MMAP”或“HEAP”。

允许的值:

MMAP  -配置pinot-server将数据段加载到堆外内存。

HEAP -配置pinot-server,将数据直接加载到直接内存中。

 

streamConfigs  此部分是仅针对REALTIME表的大部分设置的所在位置。看到StreamConfigs节

"tableIndexConfig": {

  "invertedIndexColumns": [],

  "noDictionaryColumns" : [],

  "sortedColumn": [

    "nameOfSortedColumn"

  ],

  "noDictionaryColumns": [

    "nameOfNoDictionaryColumn"

  ],

  "aggregateMetrics": "true",

  "segmentPartitionConfig": {

    "columnPartitionMap": {

      "contentId": {

        "functionName": "murmur",

        "numPartitions": 32

      }

    }

  },

  "loadMode": "MMAP",

  "lazyLoad": "false",

  "segmentFormatVersion": "v3",

  "streamConfigs": {}

},

Tenants Section

tenants部分有两个主要的配置字段。这些字段用于配置哪些 tenants 在Helix中使用。

"tenants": {

"broker": "brokerTenantName",

"server": "serverTenantName"

},

在上面的例子中

在Helix中被标记为brokerTenantName_BROKER的代理将为该表提供服务。

表的离线段将驻留在标记为serverTenantName_OFFLINE的pinot服务器中

实时段(消耗的和完成的)将托管在标记为serverTeantName_REALTIME的pinot服务器中。

 

您还可以在 tenants 部分下面添加一个tagOverrideConfig部分。目前,唯一允许的覆盖是为消费和完成的片段添加额外的标记。例如:

"tenants": {

  "broker": "brokerTenantName",

  "server": "serverTenantName",

  "tagOverrideConfig" : {

    "realtimeConsuming" : "serverTenantName_REALTIME"

    "realtimeCompleted" : "serverTenantName_OFFLINE"

  }

}

在上面的例子中,消费段仍然会被分配给serverTenantName_REALTIME主机,但是一旦完成,这些段将被移动到serverTeantnName_OFFLINE。可以在本节中指定任何标记的全名(例如,您可以决定此表的完整段应该在标记为allTables_COMPLETED的pinot服务器中)。

有关使用和完成段的详细信息,请参阅摄取实时数据部分。

 

Routing Section

路由部分包含关于如何使用哪些routingTableBuilder以及如何将特定的选项传递给该生成器的配置。路由策略部分有更多信息。

"routing": {

  "routingTableBuilderName": "PartitionAwareRealtime",

  "routingTableBuilderOptions": {}

},

 

Metadata Section

元数据部分用于将特殊的键-值对传递到Pinot中,Pinot将与表配置一起存储在Pinot中。更多信息在自定义配置部分。

"metadata": {

  "customConfigs": {

    "specialConfig": "testValue",

    "anotherSpecialConfig": "value"

  }

}

StreamConfigs Section(流式配置部分)

此部分特定于REALTIME类型的表,如果表类型为其他类型,则忽略此部分。有关实时数据摄取的概述,请参阅有关实时数据摄取的部分。

以下是关于streamConfigs部分的一个小例子:

"streamConfigs" : {

  "realtime.segment.flush.threshold.size": "0",

  "realtime.segment.flush.threshold.time": "24h",

  "realtime.segment.flush.desired.size": "150M",

  "streamType": "kafka",

  "stream.kafka.consumer.type": "LowLevel",

  "stream.kafka.topic.name": "ClickStream",

  "stream.kafka.consumer.prop.auto.offset.reset" : "largest"

}

streamType字段是强制性的。在本例中,它被设置为kafka。kafka的StreamType在Pinot中得到了本地支持。您可以使用默认的解码器类和消费者工厂类。Pinot允许您将其他流类型与它们自己的消费者工厂和解码器类一起使用(或者,如果您的安装以不同的方式格式化kafka消息,甚至可以使用kafka的其他解码器和消费者工厂)。

如果您正在考虑添加对Kafka以外的流的支持,请参阅可插流一节。

有些配置对所有流类型都是通用的,有些配置则是特定于流类型的。

Configuration generic to all stream types(对所有流类型通用的配置)

realtime.segment.flush.threshold.size: 在持久化消费段之前要消费的最大行数

注意,在上面的例子中,它被设置为0。在本例中,Pinot使用real .segment.flush.desire .size值自动计算行限制。如果消费者类型为HighLevel,则此值为每个消费段的最大值。如果消费者类型是低级别的,那么这个值将被托管在任何一个pinot-server上的所有消费者分配。

默认是5000000。

realtime.segment.flush.threshold.time: 在此之后应该持久化消费 segment 的最大运行时间。

该值可以设置为人类可读的字符串,如“1d”、“4h30m”等。应该设置此值,使其不低于底层流中的消息保留,但又不太长,以免导致服务器耗尽内存。

默认是“6 h”

realtime.segment.flush.desired.size:

完成 segments的期望大小。

仅当 consumer type设置为 LowLevel时,才支持此设置。该值可以设置为可读的字符串,如“150M”或“1.1G”等。此值在realtime.segment.flush.threshold时使用。大小设置为0。Pinot学习并估计需要使用的行数,以便持久化的 segment 大约是这个大小。学习阶段首先将行数设置为100,000(可以根据 realtime.segment.flush.autotune.initialRows设置进行更改)  并增加到所需的 segment 大小。在学习阶段, Segment 的大小可能会超过期望的大小。随着时间的推移,Pinot修正了估计,因此不能保证最终完成的段的大小与配置的完全一致。您应该设置此值以优化查询的性能(即既不太小也不太大)

默认 "200M"

realtime.segment.flush.autotune.initialRows:

学习的初始行数。

此值仅在realtime.segment.flush.threshold时使用。大小设置为o 0,消费者类型为低级。参见上面的realtime.segment.flush.desired.size。

默认的“100 k”

Configuration specific to stream types

所有这些配置项都有前缀流。<streamType>。在上面的例子中,前缀是stream.kafka。

stream.kafka.consumer.type: 这个值应该是低级别(推荐)或高级别。

请确保按照前面在表配置中描述的那样正确设置 replicasPerPartition 的值。

stream.kafka.topic.name: 要从中消费的主题的名称。

stream.kafka.consumer.prop.auto.offset。指示从流中的何处开始消耗。

        如果消费者类型是 LowLevel,则仅在首次供应表时使用此配置。在高级消费者类型中,它还将在新服务器卷入或现有服务器被新服务器替换时使用。您可以指定最小或最大的值,如果您的流支持它,甚至可以指定3d。如果指定最大,则消耗将从数据流中最近的事件开始。这是创建新表的推荐方法。

       如果指定最小值,则消耗将从数据流中可访问的最早事件开始。

预期底层流将使用所有以streamtype为前缀的配置。因此,可以使用前缀流设置Kafka配置页面中描述的任何配置。kafka应该注意这一点。

 类似资料: