在Kafka、Oracle和PostgreSQL上的PrestoDB查询

239 阅读4分钟

关于PrestoDB

我们可以称PrestoDB为Facebook开发的分布式SQL查询引擎。世界上PrestoDB的主要用户有Facebook、Netflix、Airbnb、Dropbox、Uber、LinkedIn、Twitter。

Presto是一个用于查询PB级数据的SQL引擎(1 petabyte(PB) = 1,024 terabytes),开始由Facebook开发,后来转移到开源世界。Presto、Hive、Cassandra、关系型数据库、mongodb、Kafka等。它有一个连接器用于连接,并允许查询所有的数据源。

我们可以用一个查询来连接所有的数据源。

设置

环境 ("Red Hat Enterprise Linux 7")。

下载Presto文件。

https://repo1.maven.org/maven2/com/facebook/presto/presto-server/0.254.1/presto-server-0.254.1.tar.gz

下载Presto后,有必要将其解压到安装文件夹中。它包含以下文件夹。

/bin
/lib
/plugin

注意:把数据文件夹放在安装目录之外,也会使我们以后升级PrestoDB更加方便。

配置

我们需要在presto安装目录下创建*/etc*文件夹,并将以下配置文件放在其中。

节点属性

具体到每个节点的环境配置*(node.properties)*。

node.environment=dev
node.id=turkcell-presto-demo-ersin
node.data-dir=/xxx/yyyy/presto/data

JVM配置

用于Java虚拟机的命令行选项*(jvm.config)* 。

-server
-Xmx16G
-XX:+UseG1GC
-XX:G1HeapRegionSize=32M
-XX:+UseGCOverheadLimit
-XX:+ExplicitGCInvokesConcurrent
-XX:+HeapDumpOnOutOfMemoryError
-XX:+ExitOnOutOfMemoryError

配置属性

Presto服务器的设置*(config.properties)。*

目录属性

连接器的配置--(数据源)

/catalog目录 应该在*/etc*目录下创建。这里的目的是输入相关来源的目录信息,无论哪种数据来源都将被使用。在演示部分将做一个示例。

日志属性

设置日志级别 - (log.properties)

com.facebook.presto=INFO

PrestoDB的安装细节链接

连接器

你可以在这里找到所有的连接器。

现在我们将用连接器设置对数据源的访问。

示范

为Kafka-Oracle-Postgresql环境进行设置。我们在这里的目标是用一个SQL来组合和查询3个不同的源。在/etc目录下创建/catalog目录后,3个不同的源被定义如下。

KAFKA

创建kafka.properties文件。

connector.name=kafka
kafka.table-names=turkcell.sqlite-jdbc-ttech
kafka.nodes=localhost:9092

我想在这里做一个重要的提醒。根据你在Kafka中持有的数据类型,需要进行特别的调整。我在Kafka中把数据保存为JSON。它可以保存为字节或Avro等类型。这样的定制信息需要一些额外的设置。 /kafka目录是在*/etc*目录下创建的。这里的Kafka名称很重要,因为目录名称是Kafka。它必须是相同的名字。

看来,上面kafka.properties文件中的模式名称是Turkcell。因此,可以在 /etc/Kafka下创建turkcell.sqlite-jdbc-tech.json文件,JSON内容可以保持如下。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
{
"tableName": "sqlite-jdbc-ttech",
"schemaName": "turkcell",
"topicName": "turkcell.sqlite-jdbc-ttech",
"message": {
"dataFormat": "json",
"fields": [
{
"name": "id",
"mapping": "id",
"type": "INTEGER"
},
{
"name": "name",
"mapping": "name",
"type": "VARCHAR"
}
]
}
}

Oracle - 创建oracle.properties文件。

1
2
connector.name=oracle
connection-url=jdbc:oracle:thin:ersin/pwd_user@//xxyy.zz.tgc:9999/SERVICE

PostgreSQL - 创建postgresql.properties文件。

1
2
3
4
connector.name=postgresql
connection-url=jdbc:postgresql://localhost:61061/xxyydb
connection-user=user
connection-password=pwd_user

如何使用和截图

运行bin/launcher 运行 命令来启动Presto服务器。(在安装目录中)之后,我们可以从网络界面上看到运行中的查询的详细信息,在 本地主机,工作了多长时间,以及在哪个数据源上卡了多长时间。

我们可以通过CLI连接到Presto。你可以从以下网站下载CLI 这里.下载后,我把它重命名为 presto.jar,并把它复制到安装目录。我们可以通过*./presto.jar*命令进入客户端应用程序。我们可以在这里直接写SQL。

几个有用的命令

  • 显示目录。
1
2
3
4
5
6
7
8
9
10
11
12
13
presto> show catalogs;
Catalog
------------
jmx
kafka
oracle
postgresql
system
(5 rows)
Query 20210615_124934_00009_9f6xw, FINISHED, 1 node
Splits: 19 total, 19 done (100.00%)
0:00 [0 rows, 0B] [0 rows/s, 0B/s]
  • 显示oracle的模式。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
presto> show schemas from oracle;
Schema
------------------------
xx
yy
xxf
yy
sad
bgfhgf
hjghj
....
...
...
...
Query 20210615_125147_00012_9f6xw, FINISHED, 1 node
Splits: 19 total, 19 done (100.00%)
1:13 [817 rows, 10.5KB] [11 rows/s, 146B/s]
  • 显示来自oracle.myuser的表。
1
2
3
4
5
6
7
8
9
10
presto> show tables from oracle.myuser;
Table
---------------------------
test1
test_2
(2 rows)
Query 20210615_125418_00013_9f6xw, FINISHED, 1 node
Splits: 19 total, 19 done (100.00%)
0:01 [2 rows, 72B] [2 rows/s, 104B/s]