引言
AdHoc —— Connect Everything,是我给 Trino 的一个中肯的评价。
也希望通过它,让大家能够对Trino这样一个无比的、而且又有故事的MPP引擎印象深刻。本篇,不讲概念、也不讲原理,只想告诉大家,有一个它,
——也许,你过去看不到关于它铺天盖地的营销、宣传。
——也许,你过去觉得它应用场景不像Spark、Flink,那么丰富。
——也许,你觉得它不像Impala,那么快。但它的社区非常活跃,关注度也非常高。你认为它本没有的功能,但它其实已经有了。
——也许,你觉得它非Apache开源项目出身,但它出身Fackbook,不耽误它碾压大多数的Apache现有项目。也因为它,独立成立一个基金会。
——也许,你只傻傻地把它当成是数仓跑批的引擎。但没有人会忘记它的初衷,没有人阻碍它在全球范围的发展。
Trino,每一个大数据开发都值得拥有。
前世今生
相信有不少人没有听说过Trino,但绝大多数人都听说过Presto。一个基于JVM的MPP计算引擎。在介绍Trino之前,我们先来简单了解下Presto。我们来看看Presto的产品定位。然后,再来聊聊Trino。
Presto
简介
- 我们维基百科,搜索Presto,你会看到如下。
- Wikipedia上介绍说,Presto是一个高性能的、分布式的大数据SQL查询引擎。
- Presto非常有特色的一点就是,它支持的数据源非常多。例如:Hadoop、AWS S3、Alluxio、MySQL、Cassandra、Kafka、ES、Kudu、MongoDB、MySQL等等。就是在市面能看到的存储,它基本上都支持。而对比Impala却没有支持这么多的组件。所以,Presto这个项目还是备受关注的,大家也都希望,通过一套引擎,就可以支持使用SQL查询这么多的组件。
历史
- Presto诞生于Facebook,那时候Facebook的数据分析师们需要基于Hadoop建设的大型数据仓库来进行交互式查询。
- 在没有Presto之前,大伙儿都是通过Hive基于PB级的数据仓库执行SQL,Hive的引擎是基于MapReduce的,它虽然能够完成定时跑批的任务,而且很稳定。但基于数据分析师交互式查询这种场景,速度是非常慢的。大伙儿都觉得非常慢。
- 在这样的业务场景推动下,Presto诞生了。它的出现,就是要来填补交互式快速查询的空白。
- 2013年11月,Facebook作为开源软件发布Presto。
- Facebooke并没有将Presto捐赠给Apache软件基金会。并于2019年,Presto软件基金会成立,该基金会是一个非盈利组织,致力于推动Presto开源分布式SQL查询引擎。这时,Presto出现了两个分支:
- 由Facebook维护的Presto DB
- 由Presto软件基金会维护的Presto SQL
- 2019年9月,Facebook将PrestoDB捐赠给Linux基金会,并成立了Presto基金会。比较尴尬的是,Presto的Fonder、PMC和Commit都没有被邀请到这个基金会。
- 于是,2020年12月,Presto SQL更名为Trino。
很明显,这期间一定是Presto的开发团队和Facebook有很大的矛盾,然后分道扬镳。
Trino:扬帆起航
2020年12月,Presto的创始人联合几位主要贡献者联合发布了一篇文章。
- 文章提到,从2012年开始,Presto是一个开源项目,开源是该项目的DNA。他们努力围绕Presto项目打造一个健康的开源社区和生态。
- 事情的转折点在2018年,Facebook管理层希望对Presto项目进行更严格的控制,并让Facebook内部没有任何Presto开发经验的开发人员加入到项目中。这样几位Presto的主要贡献者非常不爽,所以,他们选择了离开Facebook,专注于让Presto称为一个开放、独立社区的项目。
- 2019年,它们成立了Presto软件基金会,积极维护全球的Presto贡献者。并用了一张对比图,说明Presto比之前更加活跃。
- 2019年,Facebook创建了一个竞争社区,并申请了Presto商标,成立了Presto基金会,并开始执行新商标。交涉无果后,Martin必须要更名Presto基金会。所以,就取了一个新的名字——Trino。
Martin它们做出这样的决定是多么无奈。开源社区是一片自由的净土,作为众多开源软件的用户,我相信Trino一定会有更好的未来。
关于Impala
2012年,另一款也非常有名的MPP SQL查询引擎也开始开发了,有很多人说它其实是Google F1的开源版本——Cloudera Impala。2012年10月,Impala公开发发布了一个beta测试版本,2013年5月,正式发布。可以说,Impala对于Hadoop社区来说是非常关键的,因为它不管带来了一个高性能的查询引擎。还发布了名为Parquet面向列的文件格式。2015年,发布了对Kudu存储的支持。
随后,Cloudera公司提议将Kudu与Impala一起捐赠给Apache软件基金会。Impala于2017年11月顺利毕业,称为Apache项目。
About Trino
我们根据Trino官网的Why Trino来给大家介绍下Trino的key feature。
快速查询
Trino是一个并行执行、分布式的查询引擎,通过Trino可以构建高效、低延迟的分析系统。
大规模部署
基于Trino可以查询EB级的数据湖、以及海量数据仓库。
标准SQL
基于标准ANSI SQL查询引擎,可以与TableAU、PowerBI、Superset等BI工具配合使用。
多种使用场景
可以支持多种场景:
- 快速的Ad-Hoc
- 海量小时级的批量查询
- 亚秒级查询大规模数据的应用程序
就地分析
不需要复制数据,直接在hadoop、s3、cassandra、mysql等本地直接分析。
联合数据源查询
可以在Trino中查询多个系统的数据,例如:将MySQL的数据和Hive中的数据联合查询。
Runs anywhere
可以将Trino部署在本地集群、或者是云环境。
安装trino
下载trino
下载地址:https://repo1.maven.org/maven2/io/trino/trino-server/359/trino-server-359.tar.gz
安装要求
操作系统要求
- 64位Linux系统
- 为运行trino的用户提供足够的unlimit。包括trino能够打开的文件描述符,官方推荐以下配置:
vim /etc/security/limits.conf
trino soft nofile 131072
trino hard nofile 131072
修改完后,退出当前会话,重新登录即可生效。查看配置是否生效:
su trino
ulimit -a
Java运行时要求
Trino要求使用Java 11 64位版本,低要求为:11.0.11,注意:不支持Java 8,也不支持 Java 12或者Java 13。Trino官方推荐我们使用Azul Zulu的JDK版本。此处,我们选择较新的11.0.12+7版本。
下载链接:https://cdn.azul.com/zulu/bin/zulu11.50.19-ca-jdk11.0.12-linux_x64.tar.gz
Python版本要求
- 版本:2.6.x、2.7.x、或者3.x
开始安装
创建trino用户
在每个节点中创建trino用户。
ssh ha-node1 "useradd trino;usermod trino -G hadoop"; \
ssh ha-node2 "useradd trino;usermod trino -G hadoop"; \
ssh ha-node3 "useradd trino;usermod trino -G hadoop"
配置trino用户打开的文件
切换到trino用户,并用按照前面说的操作系统要求配置trino用户能打开的文件描述符。
上传并解压Zulu JDK
在个节点中配置以下:
[trino@ha-node1 ~]$ ll -hst
总用量 194M
194M -rw-r--r-- 1 root root 194M 7月 25 23:42 zulu11.50.19-ca-jdk11.0.12-linux_x64.tar.gz
# 解压
[trino@ha-node1 ~]$ tar -xvzf zulu11.50.19-ca-jdk11.0.12-linux_x64.tar.gz -C /opt/
# 创建超链接
[trino@ha-node1 ~]$ ln -s /opt/zulu11.50.19-ca-jdk11.0.12-linux_x64/ /opt/jdk11_zulu
[trino@ha-node1 ~]$ ll /opt/ | grep jdk11_zulu
... jdk11_zulu -> /opt/zulu11.50.19-ca-jdk11.0.12-linux_x64/
# 配置环境变量
vim ~/.bashrc
export JAVA_HOME=/opt/jdk11_zulu
export PATH=$JAVA_HOME/bin:$PATH
# 加载环境变量
source ~/.bashrc
# 查看JAVA版本
[trino@ha-node1 jdk11_zulu]$ java -version
openjdk version "11.0.12" 2021-07-20 LTS
OpenJDK Runtime Environment Zulu11.50+19-CA (build 11.0.12+7-LTS)
OpenJDK 64-Bit Server VM Zulu11.50+19-CA (build 11.0.12+7-LTS, mixed mode)
分发到其他节点:
# 切换到root用户(只是为了免密发送文件)
[root@ha-node1 ~]# whoami
root
# 分发文件和环境变量
for node in "ha-node2" "ha-node3";
do
scp -r /opt/zulu11.50.19-ca-jdk11.0.12-linux_x64 $node:/opt
ssh $node "ln -s /opt/zulu11.50.19-ca-jdk11.0.12-linux_x64/ /opt/jdk11_zulu"
ssh $node "chown -R trino:trino /opt/jdk11_zulu"
scp /home/trino/.bashrc $node:/home/trino/
done
测试其他节点JDK11是否配置成功。
for node in "ha-node2" "ha-node3";
do
ssh $node "java -version"
done
上传并解压trino安装包
[trino@ha-node1 ~]$ ll -hst
总用量 593M
593M -rw-r--r-- 1 root root 593M 7月 25 23:59 trino-server-359.tar.gz
# 解压trino
[trino@ha-node1 ~]$ tar -xvzf trino-server-359.tar.gz -C /opt/
# 创建超链接
[trino@ha-node1 ~]$ ln -s /opt/trino-server-359/ /opt/trino
# 查看链接
[trino@ha-node1 ~]$ ll /opt | awk '$0 ~ /^l/ { if($9 ~ /trino/) print $0 }'
lrwxrwxrwx 1 trino trino 22 7月 26 00:01 trino -> /opt/trino-server-359/
# 创建数据目录
[trino@ha-node1 trino]$ mkdir /opt/trino/data
配置trino
在安装目录中创建一个etc目录,我们会在该目录中配置以下:
- trino节点配置:配置每个trino节点的环境。
- JVM配置:配置JVM的相关参数。
- Config属性:配置trino服务器。
- Catalog属性:配置trino的connector(数据源)
创建配置目录
[trino@ha-node1 trino]$ mkdir /opt/trino/etc
配置节点属性
以下是一个简单的配置。
vim /opt/trino/etc/node.properties
node.environment=trino_dev
node.id=ffffffff-ffff-ffff-ffff-ffffffffffff
node. style="margin: 1.4em 0px; color: rgb(18, 18, 18); font-family: -apple-system, BlinkMacSystemFont, "Helvetica Neue", "PingFang SC", "Microsoft YaHei", "Source Han Sans SC", "Noto Sans CJK SC", "WenQuanYi Micro Hei", sans-serif; font-size: medium; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255); text-decoration-style: initial; text-decoration-color: initial;">说明:node.environment:集群中的所有trino节点都必须由相同的环境名称。必须以小写字母开头,只能包含小写字母、数字和下划线。- dmin/properties-task.html原文链接:
https://zhuanlan.zhihu.com/p/397704152