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 下载安装相关的包
注意: 我这里是的安装操作都是在 /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
结果:
以上就是 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 目录下面 ,然后执行命令
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 语法有一些不是很相同,所以没有继续研究相关的其性能以及语法上的差别.