《推荐一款神器presto,部署很方便》讲解了一个核心概念Server Types,理解了系统架构和启动方法,但Presto真正的价值在于可以连接无数多的数据源,且可以在上面运行SQL,也称之为SQL-on-anything,这篇文章介绍如何在presto中配置不同的数据源,如何连接不同的数据源从而可以执行SQL。
1:Data Sources
Data Sources包含四个核心概念,首先是Connector,它表示presto连接的数据源,可能是Hive、MySQL、kudu等等,可以将它理解为数据库的驱动,通过presto的SPI抽象,各种数据可以成为presto的数据源。
第二个概念是Catalog,每个catalog和connector一一对应,从配置文件的角度看,presto安装子目录catlog包含了所有的catalog,那它到底代表什么?
一个catalog包含schemas,并且通过connector引用数据源,简单的来说,配置一个hive catalog就相当于引用hive connector,一个完全限定符表名hive.test_data.test表示在hive catalog中引用了test_data schema中的test表。
第三个概念是Schema,它用于组织表,相当于数据库(此时理解catalog就明白了),通过catalog和schem定义了一组能查询的表。
最后一个概念Table理解起来就非常简单了,表通过各种类型的列组织成很多无序的行,和关系型数据库中的表非常类似,那如果是一个kafka connector呢?不同的connector从源数据中map出表结构。
2:如何配置Data Sources
我使用比较多的数据源就是MySQL、Hive、Kudu,简单说明下。
如果是MySQL,创建mysql.properties文件:
connector.name=mysql
connection-url=jdbc:mysql://test:3306
connection-user=test
connection-password=test
connector.name表示了数据源类型,其他参数很好理解。
如果是Hive,则配置hive.properties文件:
connector.name=hive-hadoop2
hive.metastore.uri=thrift://test:9083
hive.config.resources=/opt/hadoop/etc/hadoop/core-site.xml,/opt/hadoop/etc/hadoop/hdfs-site.xml
hive.config.resources也可以不配置,如果想使用操作hadoop,则可以引用hadoop集群的配置文件。
最后一个配置是kudu,kudu.properties文件:
connector.name=kudu
kudu.client.master-addresses=127.0.0.1
配置kudu的master监听地址即可。
各种数据源的配置是不是非常简单?如果想配置高阶功能,可在官方文档中查看。
3:如何链接数据源
配置好数据源后,如何链接,如何将数据源的四大核心概念串起来呢?
可以安装一个presto命令行包:
$ wget https://repo1.maven.org/maven2/com/facebook/presto/presto-cli/0.283/presto-cli-0.283-executable.jar
$ mv presto-cli-0.283-executable.jar /usr/local/bin/prosto
$ chmod +x /usr/local/bin/prosto
如果想链接MySQL:
$ presto --server 127.0.0.1:8850
--catalog mysql
--schema test;
明白catalog、schema、table的概念了吧?catalog相当于链接mysql数据源(mysql.properties),schema相当于MySQL中的test数据库。
如何链接Hive:
$ presto --server 127.0.0.1:8850
--catalog hive
--schema default;
不用多解释了吧,理解下四大核心概念。
如何链接kudu,其实kudu是没有数据库概念的,不过impala一般会帮kudu组织数据库:
$ presto --server 127.0.0.1:8850
--catalog kudu
--schema default;
kudu的输出很奇怪,这个暂且不表,后续给大家介绍下,通过这篇文章,可以大概理解prosto数据源的概念了。




