概览
Trino 是一个分布SQL查询引擎,设计用来查询大的分布式数据集,分布在一个或更多不同总类的数据源.
使用案例
这节全面介绍Trino,这样潜在的管理员和用户知道可以从Trino期待什么.
Trino 不能做什么
至从Trino被社区很多成员称为数据库,这是有意义的开始定义Trino不是什么.
不要误解事实,Trino 理解SQL是它提供标准数据库的特性. Trino 并不是一般用途的关系型数据库.它不能代替,像MySQL, PostgreSQL 或Oracle. Trino不是被设计处理OTPL. 对于很多其它数据设计和数仓或分析优化总是这样.
Trino 可以做什么
Trino 是一个工具,被设计高效查询 数据使用分布式查询.如果你工具TB或PB的数据,你可能使用工具来与Hadoop和HDSF交互. Trino 被设计作为另外选择工具,查询HDFS使用MapReduce管理任务,像Hive或Pig, 但是Trino 没有限制访问HDFS. Trino 可以有一个扩展的操作在不同类型的数据源,包含传统关系性数据库和其它数据源像Cassandra.
Trino被设计处理数仓数据和分析:数据分析,聚合大量数据生成报告.这些工作量通常分类到OLAP.
1.2 Trino 概念
概览
为弄懂Trino ,你需要首先了解Persto文档中到处使用术语和概念.
然而这是非常容易了解statement 和query,作为终端用户你应该熟悉这些概念,像stages 和 split利用Trino来高效执行查询. 作为Trino管理员或Trino做贡献者,你应该明白Trino概念怎样stage 映射到task,和怎样tasks包含一组driver来处理数据.
这部分提供固定定义为核心概念引用遍布在Trino中,并且这部分是排序从总体到细节.
Server类型
有两种Trino Server类型: coordinator 和worker.下边区域来解决他们的不同.
Coordinator
Trino coordinator 负责转换statement,设计query, 管理trino 中worker节点. 这是Trino安装的大脑,并且 也是一个客户端连接提交执行statement的节点. 每个Trino安装必须有一个coordinator 和一个或多个worker. 对于开发或测试目的,单独一个Trino实例可以配置来执行两个角色.
coordinator 保持跟踪每一个活着的worker和 调的执行query. coordinator 创建一个查询涉及一系列stage的逻辑模型,它翻译成一系列连接的task运行在集群中worker.
Coordinator与worker交互使用REST API.
worker
Trino worker 在Trino 安装中是一个server, 它负责执行任和处理数据.Worker节点获得数据从connector 和彼此之间交互的中间数据. coordinator负责获得结果从worker并且返回最终结果给client.
当Trino worker进程启动, 它通知自己给在coordinator上的发现server, 对于Trino coordinator可用为任务执行.
worker与其它worker交互并且Trino coordinator使用REST API.
数据源
通过这个文档,你会读到一些术语,像connector, catalog, schema, 和table. 这些基础概念覆盖Trino模型的一部分数据源并且被下文描述.
Connector
connector 适配Trino成为数据源,像Hive或关系型数据库.你可以认为connector 就想起数据库的driver. 它是Trino SPI的一个实现,允许Trino与资源交互使用标准API.
Trino包含多种内建connectors: JVM connector,系统 connector可以提供访问系统内建表, TPCH connector设计用来服务 TPC-H benchmark 数据.很多第3方开发者做贡献connector,导致 Trino 可以访问大量数据源.
每个 catalog 关联一个指定的connector.如果你检查catolog配置文件,你看到每个包含强制属性connector.name
,它被catalog 管理使用来创建connector为给定的catalog. 这是可能的有不至一个catalog 使用相同的connector 来访问两个不同实例相似的数据库. 例如,如果你有两个hive集群,你可以配置两个catalog在一个Trino集群,两个hive connector允许你查询数据从hive集群,甚至里边有相同SQL查询.
Catalog
Trino catalog 包含schema 和通过connector引用的数据源. 例如, 你可以配置JMX catalog来提供访问JMX 信息通过JMX connector.当你在Trino中运行SQL statement,你运行它对应一个或多个catalog. 其它例子中catalogs 包含Hive catalog云连接hive数据源.
当在Trino中定位table,完整的表名总是从catalog的根开始.例如完整的表名hive.test_data.test
指向 table test
在 schema test_data
在catalog hive
中.
Catalogs 被定义在属性文件中,保存在Trino 配置目录.
Schema
Schema 是组成表的一种方式.放在一起, catalog 和schema定义一组可以被查询的表. 当用Trino访问 Hive或关系数据库像Mysql, schema 翻译成相同概念在目标数据库. 其它类型的connector 可能用选择组织表到 schema一种方式,意味着了解底层数据源.
Table
table是一种无顺序的行,它可以组织到命名带有类型的列. 这也和任何关系型数据库相同.通过connector映射数据源到表.
Query执行模型
Trino 查询SQL statement并且转换这些statement到查询 query, 被执行通过分布集群中的coordinator 和worker.
Statement
Trino 执行ANSI兼容的SQL statement. 当Trino文档 指向一个statement ,它引用 statement 作为SQL ANSI标准定义, 它包含语句,表达式和谓语.
一些读者可能好奇为什么这部分列出单独的概念为statement 和 query. 这是必要的因为,在Trino中 statement 只是指向代表SQL语句的文本. 当 statement 被执行, Trino创建一个查询,伴随一个查询计划,然后分发到一系列worker.
Query
当Trino转换成statement,它转换它为一个查询语句,并且 创建分发查询计划, 它然后被实现通过一系列内部联接的stages运行在Trino worker.当你检索关于Trino中的query, 你可以收到每个组件的快照,它涉及在产生结果集来响应statement.
statement 和query中的不同非常简单. statement可以被认为是一个SQL文本传递给Trino,当查询指向配置和被实例化组件来执行那个statement. 查询包含stage, task 和 split, connector 和其它组件并且数据源工作一致在产生的结果.
Stage
当Trino执行query,它做通过打散执行到一个层级的stage.例如,如果Trino需要聚合数据从十亿行保存到hvie,他做通过创建一个根 stage 去聚合多个stage输出, 所有这些被设计来实现不同区域的分布查询计划.
这个层级stage 包含query, 像树. 每个query有根stage,它负责聚合从其它stage的输出. stage 是coordinator 使用分布式查询计划成模型,但是stage他们自己不运行在Trino worker.
Task
上部分提到的stage模型是分布查询一部分,但是stage他们自己不执行在Trino worker. task是"主力"在Trino架构,作为分布查询计算被解构成一系列stage,它然后被翻译成task,作为或处理split.Trino task有输入和输出,并且当stage可能被执行以并行方式通过一系列tasks,一个任务被执行以并行用一系列driver.
split
Task运行在split上,它是大数据集的一部分. Stage在分布查询计划获取数据的最低级别,通过来至connector的split,并且中间stage在分布查询计划从其它stage上获取数据高级级别.
当Trino安排query, coordinator 查询connector 为一列表可用的split. coordinator 保持跟踪哪台机器运行任务,和被哪一个任务处理来切分.
Driver
任务包含一个或多个并行driver.driver扮演数据和组合operator 生成输出然后被任务聚合,再传递到其它stage的 另外任务. driver 是一系列操作实例,或你可以认为driver作为在内存中物理 组的operator.它是最低级别并行在Trino架构中.drver有一个输入和一个输出.
Operator
Operator 消费,转换和生成数据. 例如,表可以扫描获得数据从connector 和生产数据,可以被其它 operator消费 ,并且一个过滤operator 消费数据并且生成子数据通过输入数据应用预测.
Exchange
Exchange传输数据在Trino nodes之间为不同的 stage 查询. 任务生成数据 到输出buffer并且消费数据从其它任务用exchange 客户端.