0. 背景

      在了解到公司已经使用多数据源的情况下,同时要满足bi报表(web 报表展示平台)的后台数据库的连接支持 ,所以 准备调研并搭建presto 服务框架

1.简介

     一.  Presto是一个facebook开源的分布式SQL查询引擎,适用于交互式分析查询,数据量支持GB到PB字节。presto的架构由关系型数据库的架构演化而来。 其本身并不存储数据,但是可以接入多种数据源,并且支持跨数据源的级联查询。Presto是一个OLAP的工具,擅长对海量数据进行复杂的分析;但是对于OLTP场景,并不是Presto所擅长,所以不要把Presto当做数据库来使用。 和大家熟悉的Mysql相比:首先Mysql是一个数据库,具有存储和计算分析能力,而Presto只有计算分析能力;其次数据量方面,Mysql作为传统单点关系型数据库不能满足当前大数据量的需求,于是有各种大数据的存储和分析工具产生,Presto就是这样一个可以满足大数据量分析计算需求的一个工具。

    二 .   presto需要从其他数据源获取数据来进行运算分析,它可以连接多种数据源,包括Hive、RDBMS(Mysql、Oracle、Tidb等)、Kafka、MongoDB、Redis等 ; 一条Presto查询可以将多个数据源的数据进行合并分析 .

    三.  .....

想具体了解presto相关的 特点和优势,请参考官网:  https://prestodb.io

2.部署搭建

   2.1  引用的参考: 

                   官网:  Deploying Presto — Presto 0.272 Documentation

                  安装博客:   Presto 安装部署 - 大数据小码农 

    2.2   presto server 的安装  

                  这里的安装,我主要是参照上面的 安装博客来操作,使用的版本是 同博客中的版本一致,但是使用博客过程中一定要注意一些细节,不然服务启动可能不会成功

       2.2.1  下载安装相关的包

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

         注意: 我这里是的安装操作都是在 /usr/opt 目录下    

      2.2.2  安装  coordinator  server 

#coordinator server 192.168.40.182tar -zxvf presto-server-0.233.1.tar.gz -C /usr/opt/cd /usr/optmv presto-server-0.233.1 /usr/opt/presto-server-0.233cd presto-0.233#配置 presto 外部存储目录mkidr -p /apps/storage_data/presto_data/

    2.2.3  创建 配置文件

mkdir /usr/opt/presto-server-0.233/etc#2.在 /usr/opt/presto-server-0.233/etc 下创建 config.properties,jvm.properties,node.properties,log.properties 文件vim config.propertiescoordinator=true #work节点需要填写falsenode-scheduler.include-coordinator=false #是否允许在coordinator上调度节点只负责调度时node-scheduler.include-coordinator设置为false,调度节点也作为worker时node-scheduler.include-coordinator设置为truehttp-server.http.port=18085query.max-memory=2GBquery.max-memory-per-node=512MBquery.max-total-memory-per-node=1GBdiscovery-server.enabled=true #Presto 通过Discovery 服务来找到集群中所有的节点,每一个Presto实例都会在启动的时候将自己注册到discovery服务; 注意:worker 节点不需要配discovery-server.enabled discovery.uri=http://192.168.40.182:18085 #Discovery server的URI。由于启用了Presto coordinator内嵌的Discovery 服务,因此这个uri就是Presto coordinator的urivim jvm.config (Presto集群coordinator和worker的JVM配置是一致的)-server -Xmx2G-XX:+UseG1GC-XX:G1HeapRegionSize=32M-XX:+UseGCOverheadLimit-XX:+ExplicitGCInvokesConcurrent-XX:+HeapDumpOnOutOfMemoryError-XX:+ExitOnOutOfMemoryError-DHADOOP_USER_NAME=hivevim node.propertiesnode.environment=productionnode.id=sm001 #每个节点需要不同node.data-dir=/apps/storage_data/presto_datavim log.propertiescom.facebook.presto=DEBUG

     2.2.4    配置 connector 

#1.在 /usr/opt/presto-server-0.233/etc 创建 catalog 目录mkdir /usr/opt/presto-server-0.233/etc/catalog#2.在 catalog 目录下 创建 hive connectorvim hive.propertiesconnector.name=hive-hadoop2 #注意 connector.name 只能是 hive-hadoop2hive.metastore.uri=thrift://192.168.40.184:9083hive.config.resources=/usr/hdp/3.0.1.0-187/hadoop/conf/core-site.xml,/usr/hdp/3.0.1.0-187/hadoop/conf/hdfs-site.xml#3.在 catalog 目录下 创建 mysql connectorvim mysql.propertiesconnector.name=mysqlconnection-url=jdbc:mysql://192.168.40.182:3306connection-user=rootconnection-password=root

 2.2.5  启动 presto  coordinator  server   

#调试启动/usr/opt/presto-server-0.233/bin/launcher --verbose run

结果: 

sql server分布式数据库部署 分布式sql引擎_大数据

以上就是 presto coordinator server 的 安装就完成了     ,下面就是安装  presto worker  server    ,也就是  上面的截图 红框中显示的  

2.2.6   安装  presto worker server  

     2.2.6 .1   将  /usr/opt/presto-server-0.233 /  文件目录拷贝到其他两台机器上的相应的目录下     

scp    -r  /usr/opt/presto-server-0.233/      root@192.168.40.183:`pwd`  scp    -r  /usr/opt/presto-server-0.233/      root@192.168.40.184:`pwd`

    2.2.6.2   修改 183 和  184 机器上的 关于 presto-server-0.233 目录的 etc/ 目录下的 配置文件  config.properties,node.properties

vim config.propertiescoordinator=falsehttp-server.http.port=18085query.max-memory=2GBquery.max-memory-per-node=512MBquery.max-total-memory-per-node=1GBdiscovery-server.enabled discovery.uri=http://192.168.40.182:18085vim node.propertiesnode.environment=productionnode.id=sm002 # 另一个节点为 sm003node.data-dir=/apps/storage_data/presto_data

2.2.6.3   并在 另外两台机器上(183.,184)配置 presto worker server 的 数据存储目录, 命令   :

mkdir -p /apps/storage_data/ presto_data

  2.2.6. 4   启动 presto  worker  server   

#调试启动/usr/opt/presto-server-0.233/bin/launcher --verbose run

若 能看见上面截图中红框中的数字,那么说明 presto  server 的安装基本上是 已经完成了 ,下面就将 presto  server  转换为 后台启动 .

在后台命令行终止调试 启动的进程 , 然后 在presto 集群的每台机器上 还行下面的命令:#后台启动 (日志在 数据目录 /apps/storage_data/presto_data)/usr/opt/presto-server-0.233/bin/launcher start

启动之后,也会看到上面截图中的状态   

2.3  安装 presto client 

    注意 :这里只讲解 presto  的命令行客户端的安装 ,其他的安装,请参考官方文档  

  2.3.1   进入到 presto 安装目录的bin 目录下面 ,然后执行命令

      wget  https://repo1.maven.org/maven2/com/facebook/presto/presto-cli/0.233.1/presto-cli-0.233.1-executable.jar

2.3.2   下载完成后 进行重命名   ,并附上可执行权限: 

#注意 官方建议将 presto-cli-0.233.1-executable.jar 改名为 presto ,但是我 为了更好区分 ,这里改为 presto-climv presto-cli-0.233.1-executable.jar presto-clichmod +x presto-cli

2.3.3    执行命令进入命令行客户端:  

./presto-cli  --server  192.168.40.182:18085

便会进入 presto 的命令行客户端了 

注意 :   

presto 是一个分布式 SQL 查询引擎,所以支持连接多个数据源,各种不同类型的数据仓库。所以对比于单纯的数据库就多了一些概念, 下面就列举常用的概念和数据库的概念映射:

   1.  catalogs  -> 配置的数据数据名称,不同的数据源连接

   2.  schemas ->  数据库 (database)

    3.   tables ->  数据库的表( tables) 

 在命令行里就能输入 相关的命令 了  ,  presto 的sql 命令  大部分和  关系型数据库的sql 和hive sql 都比较相似, 但有一部分也是不一样的 ,所以这里附上  ,一个关于  presto 的sql 的常用命令链接: 

     

presto 语法攻略:  presto 语法攻略_猴子饲养员的博客-presto语法

3.相关问题以及解决办法

       关于 presto 的服务的搭建是相对比较简单的,但是有一点必须要注意的是  ,一定要仔细和小心 ;

4. 其他

     虽然 presto  能进行多 数据源 的数据关联join ,但对于其join 的结果也会受到 集群自身的限制,同时 考虑到 presto 的语法跟  hive 语法有一些不是很相同,所以没有继续研究相关的其性能以及语法上的差别.