绑定完请刷新页面
取消
刷新

分享好友

×
取消 复制
大数据开发都值得拥有一个Trino——Connect everything
2022-05-12 15:18:06

引言

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节点都必须由相同的环境名称。必须以小写字母开头,只能包含小写字母、数字和下划线。
分享好友

分享这个小栈给你的朋友们,一起进步吧。

Trino
创建时间:2022-04-12 14:37:38
Trino
展开
订阅须知

• 所有用户可根据关注领域订阅专区或所有专区

• 付费订阅:虚拟交易,一经交易不退款;若特殊情况,可3日内客服咨询

• 专区发布评论属默认订阅所评论专区(除付费小栈外)

技术专家

查看更多
  • 飘絮絮絮丶
    专家
戳我,来吐槽~