Presto in Action 1
Contents
[TOC]
前言
公司因为架构调整,需要进行数据的实时加载。原本的方案是直接通过客户端查询索引,同时通过索引返回的id
查询详情,整个流程比较复杂,并且其中涉及到索引压力大,无法及时加载完毕;针对大数据任务,延迟很大,无法做到实时分析。
这里,了解到Presto
是一个分布式的查询引擎,本身也是支持各种数据源:Hadoop、Elasticsearch、MySQL等。所以尝试使用Presto
进行数据加载,具体效果还得验证过后才知道,在这里作为一个记录。
安装Presto
在Presto官网可以直接下载,分为三个包:
presto-server-0.253.1.tar.gz:这个是服务端的包,使用这个进行部署及配置;
presto-cli-0.253.1-executable.jar:这个是命令行模式的客户端,可以直接连接服务端,直接进行一些操作;
presto-jdbc-0.253.1.jar:这个就是Java
的JDBC
驱动了,引入后,就可以在程序中连接Presto
了;
使用 docker 部署
-
准备
在使用
docker
部署前,我们先需要准备几个文件夹和文件:1
mkdir data etc
编辑
etc/node.properties
文件内容为:1 2 3 4 5 6
// 表示环境,可以用 TEST/production node.environment=production // 实例的唯一 ID,同一台机器不同实例的时候,必须保证不同;同一个实例重启、恢复后,需要保持不变,否则无法恢复到原有实例 node.id=ffffffff-ffff-ffff-ffff-ffffffffffff // 实例的数据目录,用来存放数据、日志等 node.data-dir=/var/presto/data
编辑
etc/config.properties
文件内容为:1 2 3 4 5 6 7 8
// 是否为协调节点 coordinator=true node-scheduler.include-coordinator=true // 实例端口 http-server.http.port=8080 discovery-server.enabled=true // 界面地址 discovery.uri=http://localhost:8080
编辑
etc/jvm.config
文件内容为:1 2 3 4 5 6 7 8 9 10
-server // 根据实际情况修改堆大小 -Xmx1G -XX:+UseG1GC -XX:G1HeapRegionSize=32M -XX:+UseGCOverheadLimit -XX:+ExplicitGCInvokesConcurrent -XX:+HeapDumpOnOutOfMemoryError -XX:+ExitOnOutOfMemoryError -Djdk.attach.allowAttachSelf=true
-
编写
docker-compose.yml
文件1 2 3 4 5 6 7 8 9 10
version: "2" services: presto: image: ahanaio/prestodb-sandbox:0.254 volumes: - ./data:/var/presto/data - ./etc:/opt/presto-server/etc ports: - 8080:8080 container_name: presto
-
启动
启动直接使用下列命令即可:
1
docker-compose up -d
-
访问界面
在启动成功后,就可以访问
http://host:8080
查看了。
简单使用
使用docker
部署后,就可以进入命令行模式进行使用了:
|
|
常用命令:
|
|
数据源接入
Presto
的一大优势就是可以接入不同的数据,并且进行联合查询、聚合及操作;
Elasticsearch 接入
-
先准备一个
es
集群,创建一个索引:1 2 3 4 5 6 7 8 9 10 11 12 13 14
PUT users/_mapping/_doc { "properties": { "key": { "type": "keyword" }, "username": { "type": "keyword" }, "email": { "type": "keyword" } } }
-
编写
$PRESTO_HOME/etc/catalog/elasticsearch.properties
文件:1 2 3 4
connector.name=elasticsearch elasticsearch.host=localhost elasticsearch.port=9200 elasticsearch.default-schema-name=my_schema
-
编写
$PRESTO_HOME/etc/elasticsearch/my_schema.users.json
文件:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
{ "tableName": "users", "schemaName": "my_schema", "clusterName": "elasticsearch", "index": "users", "type": "doc", "columns": [ { "name": "key", "type": "varchar", "jsonPath": "key", "jsonType": "varchar", "ordinalPosition": "0" } ] }
-
连接
presto
:1
docker exec -it presto presto-cli
-
查询
1
SELECT * FROM users LIMIT 1;
这样,就是Elasticsearch
的完整接入了,如果是多个集群,只需要添加对应的catalog
及schema
文件,然后重启presto
集群即可。