关于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=devnode.id=turkcell-presto-demo-ersinnode.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 |
连接器
现在我们将用连接器设置对数据源的访问。
示范
为Kafka-Oracle-Postgresql环境进行设置。我们在这里的目标是用一个SQL来组合和查询3个不同的源。在/etc目录下创建/catalog目录后,3个不同的源被定义如下。
KAFKA
创建kafka.properties文件。
connector.name=kafkakafka.table-names=turkcell.sqlite-jdbc-ttechkafka.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=oracleconnection-url=jdbc:oracle:thin:ersin/pwd_user@//xxyy.zz.tgc:9999/SERVICE |
PostgreSQL - 创建postgresql.properties文件。
1 2 3 4 | connector.name=postgresqlconnection-url=jdbc:postgresql://localhost:61061/xxyydbconnection-user=userconnection-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------------jmxkafkaoraclepostgresqlsystem(5 rows)Query 20210615_124934_00009_9f6xw, FINISHED, 1 nodeSplits: 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------------------------xxyyxxfyysadbgfhgfhjghj.............Query 20210615_125147_00012_9f6xw, FINISHED, 1 nodeSplits: 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---------------------------test1test_2(2 rows)Query 20210615_125418_00013_9f6xw, FINISHED, 1 nodeSplits: 19 total, 19 done (100.00%)0:01 [2 rows, 72B] [2 rows/s, 104B/s] |