文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

【大数据】Presto(Trino)配置参数以及 SQL语法

2024-11-30 14:16

关注

Trino官方文档:https://trino.io/docs/current/

关于更多的Presto介绍可以参考我这篇文章:大数据Hadoop之——基于内存型SQL查询引擎Presto(Presto-Trino环境部署)

二、Trino coordinator 和 worker 节点作用

1)Trino coordinator 节点作用

在Trino中,coordinator节点是整个集群的管理节点,它的作用包括:

因此,可以看出coordinator节点在Trino集群中起到了至关重要的作用,它是整个集群的大脑和控制中心。为了保证集群的性能和可用性,建议对coordinator节点进行适当的配置和管理,以满足查询复杂度和数据量的需求。

2)Trino worker 节点作用

在Trino中,worker节点是集群中执行任务的节点。它的作用包括:

因此,可以看出worker节点在Trino集群中扮演了至关重要的角色,它是整个集群的工作机器和数据存储仓库。为了保证集群的性能和可用性,建议对worker节点进行适当的配置和管理,以满足查询和数据处理的需求。同时,建议用户根据自己的业务需求和数据量来增加或降低worker节点的数量和配置,以达到最佳的资源利用率和查询效率。

三、Trino 参数详细讲解

1)coordinator 节点配置

1、config.properties 配置文件

config.properties是Trino服务器的配置文件,它包含了Trino服务器的各种配置选项,如节点配置、查询优化器配置、内存和CPU配置、集群安全配置等。下面是几个常见的config.properties选项:

因此,config.properties文件对于Trino服务器的性能和功能都具有重要的作用,建议管理员和用户仔细查阅和配置。同时,可以根据业务需求和系统资源情况来适当调整其中的选项,以达到最佳的性能和效率。

示例配置如下:

###################################
## 协调节点配置
###################################
coordinator=true

###################################
## HTTP服务配置
###################################

http-server.http.port=8080

###################################
## 内存配置
###################################

query.max-memory=5GB
query.max-memory-per-node=2GB
query.max-total-memory-per-node=10GB

###################################
## 发现服务配置
###################################

discovery-server.enabled=true
discovery.uri=http://localhost:8080

###################################
## 插件配置
###################################

plugin.myplugin.property=value

###################################
## 其他配置
###################################

# 身份验证配置
http-server.authentication.type=PASSWORD
http-server.authentication.password-user-mapping-file=etc/password-authenticator.properties

# 授权配置
access-control.name=my-access-control
access-control.config-file=etc/access-control.properties

# 元数据存储配置
metadata.store.type=jdbc
metadata.store.jdbc-url=jdbc:postgresql://localhost:5432/trino_metadata
metadata.store.username=trino
metadata.store.password=secret

# 集群配置
discovery-server.enabled=true
discovery.uri=http://localhost:8080
node-scheduler.include-coordinator=true

# 指标和监控配置
metrics.enabled=true
metrics.reporting-interval=1m
metrics.store.type=prometheus
metrics.store.reporters=prometheus
metrics.store.prometheus.uri=http://localhost:9090/metrics

2、jvm.config 配置文件

Trino协调节点(coordinator)的JVM配置文件是 jvm.config。它位于Trino安装目录的 etc 文件夹中。

jvm.config 文件用于配置协调节点的Java虚拟机(JVM)参数,以控制内存、垃圾回收、线程等方面的行为。

一些常用的JVM参数及其含义:

-server:启用服务器模式,优化性能。-Xmx8G:设置Java堆的最大内存为8GB。最好是配置小于32G。-XX:+UseG1GC:启用G1垃圾收集器。-XX:InitialRAMPercentage:是一个Java虚拟机(JVM)参数,用于设置初始堆内存的百分比。它指定了初始堆内存大小相对于可用系统内存的比例。默认值为64,表示JVM将会使用可用系统内存的64%。

`-XX:InitialRAMPercentage` 该参数通常与`-Xmx`(最大堆内存)参数一起使用,以确保在应用程序启动时分配足够的初始堆内存。

-XX:InitialRAMPercentage 和 -Xmx 都是用于配置Java虚拟机(JVM)的堆内存参数。下面是一个示例配置和相应的换算示例:

-XX:InitialRAMPercentage=25
-Xmx8G

假设可用系统内存为16GB(Gigabytes),我们将根据配置计算初始堆内存和最大堆内存的大小。

首先,我们使用 -XX:InitialRAMPercentage 参数来计算初始堆内存的大小:

初始堆内存大小 = 可用系统内存 * (InitialRAMPercentage / 100)

初始堆内存大小 = 16GB * (25 / 100) = 4GB

接下来,我们使用 -Xmx 参数来指定最大堆内存的大小,这里设置为8GB。

因此,根据以上配置和换算示例,初始堆内存将为4GB,最大堆内存将为8GB。

请注意,确保根据实际系统内存大小和应用程序的内存需求进行适当的调整。对于初始堆内存和最大堆内存,建议根据应用程序的性能需求进行合理配置,以确保充分利用系统资源并避免内存不足或浪费的情况。

此外,-XX:InitialRAMPercentage 和 -Xmx 参数的可用性和行为可能因JVM的版本和厂商而有所不同。请参考所使用JVM的文档以获取准确的信息。

这个选项通常用于开发和以下是一个示例的 jvm.config 配置文件:

-server
-Xmx2G
-XX:InitialRAMPercentage=20
-XX:MaxRAMPercentage=80
-XX:G1HeapRegionSize=32M
-XX:+ExplicitGCInvokesConcurrent
-XX:+ExitOnOutOfMemoryError
-XX:+HeapDumpOnOutOfMemoryError
-XX:-OmitStackTraceInFastThrow
-XX:ReservedCodeCacheSize=512M
-XX:PerMethodRecompilationCutoff=10000
-XX:PerBytecodeRecompilationCutoff=10000
-Djdk.attach.allowAttachSelf=true
-Djdk.nio.maxCachedBufferSize=2000000
-XX:+UnlockDiagnosticVMOptions
-XX:+UseAESCTRIntrinsics
# Disable Preventive GC for performance reasons (JDK-8293861)
-XX:-G1UsePreventiveGC

请注意,具体的配置取决于您的硬件资源、工作负载和性能需求。您可以根据您的具体情况来调整和优化JVM参数。

3、log.properties 配置文件

# 设置日志级别,有四个级别:DEBUG, INFO, WARN and ERROR
io.trino=INFO

4、node.properties 配置文件

# 环境的名字。集群中所有的Trino节点必须具有相同的环境名称。
node.environment=production
# 此Trino安装的唯一标识符。这对于每个节点都必须是唯一的,不填则是随机的。
node.id=trino-coordinator
# 数据目录的位置(文件系统路径)。Trino在这里存储日志和其他数据。
node.data-dir=/opt/apache/trino/data

2)worker 节点配置

1、config.properties 配置文件

以下是一个Trino工作节点的配置文件示例config.properties,用于配置工作节点的基本设置,包括通信、内存、线程池以及插件等。

coordinator=false
node-scheduler.include-coordinator=false
http-server.http.port=8080
query.max-memory=10GB
query.max-memory-per-node=2GB
discovery-server.enabled=true
discovery.uri=http://:8080
exchange.http-client.keep-alive-interval=5m
exchange.http-client.idle-timeout=10m
task.concurrency=16
task.writer-count=4
jvm.configured-initial-ram-percent=80
memory.heap-headroom-per-node=1GB

以下是示例配置文件中的各项设置的含义:

- query.max-memory-per-node=2GB:单个工作节点可用于执行查询的最大内存数量。

请注意,这只是一个示例配置,您可以根据您自己的需求进行修改。有关更多配置参数和详细信息,请参阅官方文档:https://trino.io/docs/current/installation/deployment.html。

2、jvm.config 配置文件

下面是一个Trino工作节点的jvm.config示例配置文件,它包含了一些常用的JVM参数,可以帮助你优化Trino的性能和内存利用率:

-server
-Xmx16G
-XX:+UseG1GC
-XX:G1HeapRegionSize=16M
-XX:+ExplicitGCInvokesConcurrent
-XX:+HeapDumpOnOutOfMemoryError
-XX:OnOutOfMemoryError=kill -9 %p
-XX:ErrorFile=/var/log/trino/hs_err_pid%p.log
-Djava.library.path=/usr/lib/hadoop/lib/native
-Djdk.attach.allowAttachSelf=true

这里是每个参数的含义:

这只是一个基础配置文件,用户可以根据各自的需求和系统资源状况进行微调。同时需要注意的是,在配置JVM参数时,一定要谨慎,了解每个参数的含义和影响,并进行适当的测试和调优,以确保系统的稳定性和性能。

3、log.properties 配置文件

# 设置日志级别,有四个级别:DEBUG, INFO, WARN and ERROR
io.trino=INFO

4、node.properties 配置文件

# 环境的名字。集群中所有的Trino节点必须具有相同的环境名称。
node.environment=production
# 此Trino安装的唯一标识符。这对于每个节点都必须是唯一的,不填则是随机的。
node.id=trino-worker-1
# 数据目录的位置(文件系统路径)。Trino在这里存储日志和其他数据。
node.data-dir=/opt/apache/trino/data

四、环境准备

如已经有环境了,可以忽略,如想快熟部署Presto(Trino)环境可参考我这篇文章:【大数据】通过 docker-compose 快速部署 Presto(Trino)保姆级教程

docker exec -it trino-coordinator bash

# --catalog:数据源 --schema:数据库
${TRINO_HOME}/bin/trino-cli --server http://trino-coordinator:8080 --user=hadoop

五、Trino 中的 数据源(catalog)

在Trino中,catalog是一种用于管理数据连接和数据源的概念。一个catalog可以代表一个数据库、一个hive实例、或者其他支持的数据源。Trino可以通过启用不同的catalog来连接和查询不同的数据源,这样你就可以使用一个Trino集群查询多个数据源中的数据,而不需要使用不同的工具和语言进行查询。

Trino中支持的catalog包括:

系统catalog:包括system、memory、information_schema和metadata,用于管理和查询Trino系统和运行时信息。

Trino中支持的catalog包括:

除了以上常用的catalog,Trino还支持许多其他的catalog。你可以通过配置文件或者命令行参数来启用或禁用不同的catalog,以便连接和查询不同的数据源。当启用一个catalog时,需要为它配置连接参数和身份凭证等信息。Trino中的catalog提供了一种简便而灵活的方式来管理连接和查询多种数据源,使得数据查询和集成变得更加高效和便利。

官方文档:https://trino.io/docs/current/connector.html

六、Trino 数据类型

官方文档:https://trino.io/docs/current/language/types.html

1)基础数据类型

类型

描述

示例

boolean

true或false

true

tinyint

8位有符号整数,最小值− 2^7 ,最大值 2^7-1

42

smallint

16位有符号整数,最小值− 2^15 ,最大值 2^15-1

42

integer、int

32位有符号整数,最小值− 2^31 ,最大值 2^31-1


bigint

64位有符号整数,最小值− 2^63 ,最大值 2^63-1


real

32位浮点数,遵循IEEE 754二进制浮点数运算标准

2.71828

double

64位浮点数,遵循IEEE 754二进制浮点数运算标准

2.71828

decimal

固定精度小数

123456.7890

varchar、varchar(n)

可变长度字符串。字符长度为m(m < n),则分配m个字符

“hello world”

char、char(n)

固定长度字符串。总是分配n个字符,不管字符长度是多少。char表示char(1)

“hello world”

2)集合数据类型

类型

示例

array

array[‘apples’, ‘oranges’, ‘pears’]

map

map(array[‘a’, ‘b’, ‘c’], array[1, 2, 3])

json


row

row(1, 2, 3)

3)日期时间数据类型

官方文档:https://trino.io/docs/current/functions.html

类型

描述

示例

date

包含年、月、日的日期

2023-05-14

time

包含时、分、秒、毫秒的时间, 时区可选

16:26:08.123 +08:00

timestamp

包含日期和时间, 时区可选

2023-05-14 16:26:08.123 Asia/Shanghai

interval year to month

间隔时间跨度为年、月

interval ‘1-2’ year to month

interval day to second

间隔时间跨度为天、时、分、秒、毫秒

interval ‘5’ day to second

七、Trino 内置函数

Trino(之前叫Presto)提供了丰富的内置函数,可以满足各种SQL查询的需求。下面对Trino内置函数进行详细说明。

1)数学函数

2)字符串函数

3)日期时间函数

4)聚合函数

5)逻辑函数

6)类型转换函数

这些内置函数只是Trino中的部分函数,Trino还支持大量其他内置函数,可以参阅Trino的官方文档获得更详细、更全面的信息。

八、Trino 中的 SQL 语法

连接:

# 如不是通过容器部署,自己有环境,可以忽略下来容器登录的步骤
docker exec -it trino-coordinator bash

# --catalog:数据源 --schema:数据库
${TRINO_HOME}/bin/trino-cli --server http://trino-coordinator:8080 --user=hadoop

官方文档:https://trino.io/docs/current/sql.html

1)数据源语法

一般数据源配置在${TRINO_HOME}/etc/catalog目录下

# 查看数据源
show catalogs;

当然也可以通过sql创建,示例如下:

配置hive数据源${TRINO_HOME}/etc/catalog/hive.conf

connector.name=hive
hive.metastore.uri=thrift://hive-metastore:9083
hive.config.resources='/opt/apache/trino/etc/catalog/core-site.xml,/opt/apache/trino/etc/catalog/hdfs-site.xml'

查看catalog

${TRINO_HOME}/bin/trino-cli --server http://trino-coordinator:8080 --user=hadoop

SHOW CATALOGS;

# 查看当前 catalog
SELECT current_catalog;

2)数据库语法(schemas)

在Trino中,catalog用于访问数据源和外部系统。每个catalog都可以包含一个或多个schema,每个schema包含一组相关的表。你可以在Trino中使用CREATE SCHEMA、DROP SCHEMA、RENAME SCHEMA和SHOW SCHEMAS等语句来管理schema。

语法:

CREATE SCHEMA [ IF NOT EXISTS ] schema_name
[ AUTHORIZATION ( user | USER user | ROLE role ) ]
[ WITH ( property_name = expression [, ...] ) ]

以下是一些用于操作catalog schema的示例:

#USE 语法,USE catalog.schema 
# USE schema

USE hive.default;
CREATE SCHEMA IF NOT EXISTS schema_test;
# 查看
show schemas;

【注意】如果登录时,没有带--scheme,就必须USE切换scheme,才能使用创建schema。

  1. 查看scheme
show schemas from hive;
show schemas;
  1. 删除一个名为my_schema的schema
DROP SCHEMA hive.schema_test;
  1. 查看当前scheme
# 查看当前catalog
SELECT current_catalog;
# 查看scheme
SELECT current_schema;

3)表 DDL 语法

在Trino中,你可以使用CREATE TABLE语句来创建表,使用ALTER TABLE来修改表的结构和元数据,并使用DROP TABLE来删除表。

下面分别介绍一下这几个操作的语法和参数:

1、创建表 - CREATE TABLE

语法:

CREATE TABLE [ IF NOT EXISTS ]
table_name (
  { column_name data_type [ NOT NULL ]
      [ COMMENT comment ]
      [ WITH ( property_name = expression [, ...] ) ]
  | LIKE existing_table_name
      [ { INCLUDING | EXCLUDING } PROPERTIES ]
  }
  [, ...]
)
[ COMMENT table_comment ]
[ WITH ( property_name = expression [, ...] ) ]

使用CREATE TABLE创建一个新的表。下面是一个示例:

CREATE TABLE orders (
  orderkey bigint,
  orderstatus varchar,
  totalprice double,
  orderdate date
)
WITH (format = 'ORC')

# 在Trino中,你可以使用 FORMAT 子句指定查询结果输出的格式。Trino支持多种常见格式,包括文本(text)、CSV、JSON、javax.json、Avro、Parquet、ORC、RCFile等。

其中,my_table是你想要创建的表名,后面的括号中列出了表的列和对应的数据类型。在Trino中可以定义多种数据类型,如integer、varchar、boolean等等。更多数据类型可以查看Trino官方文档。

你可以使用CREATE TABLE的参数进行更高级的操作,例如指定分桶(bucket)、分区(partition)和格式(format),以下是一些常用参数的示例:

CREATE TABLE my_table3 (
  column1 int,
  column2 varchar(64),
  column3 varchar(64),
  column4 varchar(64)
)
WITH (
  format = 'ORC',
  partitioned_by = ARRAY['column3','column4'],
  bucketed_by = ARRAY['column2'],
  bucket_count = 10
);
# 注意:partitioned字段必须是表的最后的字段

这个示例中,表使用ORC格式存储,按照column3和column4列进行了分区,使用column2列进行了分桶,并设置了10个桶。

2、修改表 - ALTER TABLE

使用ALTER TABLE命令修改现有表。下面是一些常见的用法:

ALTER TABLE my_table ADD COLUMN new_column datatype;
ALTER TABLE my_table ALTER COLUMN column1 TYPE new_datatype;
ALTER TABLE my_table DROP COLUMN column1;
ALTER TABLE my_table ADD PARTITION (column1 = 'value1', column2 = 'value2');
ALTER TABLE my_table DROP PARTITION (column1 = 'value1', column2 = 'value2', ...);

3、删除表 - DROP TABLE

使用DROP TABLE语句删除现有表。下面是一个示例:

DROP TABLE my_table;

-- 如报错:io.prestosql.spi.security.AccessDeniedException: Access Denied: Cannot drop table
-- 在catalog hive中添加以下两行
-- hive.allow-drop-table=true
-- hive.allow-rename-table=true

注意:删除一个表将会永久删除该表的全部数据,慎重操作!

4、trino 中的分区分桶

在Trino中,你可以使用分区(partition)和分桶(bucket)来优化查询性能,提高查询速度和效率。

1、分区(partition)

以下是一个创建一个按照日期分区的示例:

CREATE TABLE my_part_table (
  id bigint,
  name varchar(64),
  event_date date
)
WITH (
partitioned_by = ARRAY['event_date']
);

2、分桶(bucket)

使用分桶后,Trino优化器可以将查询操作分配到不同的节点上并行执行,以实现更快的查询速度。比如,如果你的分桶表中有100个桶,Trino可以把这100个桶分配到100个不同的节点上并行执行查询操作,从而大大提高查询效率。

以下是一个创建分桶的示例:

CREATE TABLE my_bucket_table (
  id INT,
  name VARCHAR,
  age INT
)
WITH (
  bucket_count = 10,
  bucketed_by = ARRAY['id']
);

CREATE TABLE my_bucket_table_new (
  id INT,
  name VARCHAR,
  age INT
)
WITH (
  bucket_count = 10,
  bucketed_by = ARRAY['id']
);

4)添加数据

INSERT INTO my_bucket_table (id, name, age) VALUES (1, 'Tom', 20), (2, 'Jerry', 23);
INSERT INTO my_bucket_table_new SELECT * FROM my_bucket_table;
来源:今日头条内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯