presto-mysql、presto-elasticsearch、关联查询、java-presto-jdbc入门实战.

本文简单记录一次实践使用过程,涉及presto-mysql,presto-elasticsearch,及关联查询

1 下载安装 presto-0.228

<1>下载

服务端

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

客户端

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

相关jar

https://repo1.maven.org/maven2/com/facebook/presto/presto-base-jdbc/0.228/presto-base-jdbc-0.228.jar

https://repo1.maven.org/maven2/com/facebook/presto/presto-spi/0.228/presto-spi-0.228.jar

官方文档:

http://prestodb.github.io/docs/current/connector/elasticsearch.html

<2>安装:

1> 解压

tar -zxvf presto-server-0.228.tar.gz

2>创建配置目录 etc  etc/catalog

cd presto-server-0.228/

mk dir etc

mkdir etc

mkdir data

cd etc

mkdir catalog

3>创建config.properties 集群配置

在新建的etc目录下vim config.properties

文件内容:

#是否为Coordinator调度节点

coordinator=true

#是否也作为work。对于大型集群来说,在coordinator里做worker的工作会影响查询性能

node-scheduler.include-coordinator=true

#指定HTTP端口。Presto使用HTTP来与外部和内部进行交流

http-server.http.port=9080

#查询能用到的最大总内存

query.max-memory=8GB

#查询能用到的最大单结点内存

query.max-memory-per-node=1GB

query.max-total-memory-per-node=2GB

#Presto使用Discovery服务去找到集群中的所有结点。每个Presto实例在启动时都会在Discovery服务里注册。这样可以简化部署, 不需要额外的服务,Presto的coordinator内置一个Discovery服务。也是使用HTTP端口

discovery-server.enabled=true

#Coordinator节点的域名或者IP,Presto使用Discovery服务去找到集群中的所有结点。每个Presto实例在启动时都会在Discovery服务里注册。这样可以简化部署, 不需要额外的服务,Presto的coordinator内置一个Discovery服务。也是使用HTTP端口

discovery.uri=http://xinyi:9080

4>创建jvm.config 运行环境配置

在新建的etc目录下

vim jvm.config

-server

-Xmx16G

-XX:+UseG1GC

-XX:G1HeapRegionSize=32M

-XX:+UseGCOverheadLimit

-XX:+ExplicitGCInvokesConcurrent

-XX:+HeapDumpOnOutOfMemoryError

-XX:+ExitOnOutOfMemoryError

5>创建log.properties 日志配置

在新建的etc目录下

vim log.properties

com.facebook.presto=INFO

6>创建node.properties ,节点配置

在新建的etc目录下vim log.properties

文件内容:

#自定义环境名字,Presto集群中的结点的环境名字都必须是一样的。

node.environment=production

#唯一标识,每个结点的标识都必须是为一的。就算重启或升级Presto都必须还保持原来的标识。

node.id=ffffffff-ffff-ffff-ffff-fffffffffff1

#数据目录,Presto用它来保存log和其他数据

node.data-dir=/opt/presto-server-0.228/data

7>启动

cd /安装目录/bin

./launcher start 后台启动

./launcher stop停止

./launcher run 前台启动,输出日志

./launcher restart 重启

8> JDK配置

通过修改presto安装目录如: /presto/bin/launther

修改launther,引入jdk1.8。

vim launther

PATH=/jdk安装目录/bin:$PATH

exec "$(dirname "$0)/launcher.py" "[email protected]"

9>/安装目录/var/log以下位置找到日志文件

launcher.log

server.log

http-request.log

10>查看web界面 http://serverIp:9080/ui/

<3> 安装客户端

重命名客户端jar包presto-cli-0.228-executable.jar为presto 可执行文件

mv presto-cli-0.228-executable.jar presto

使用命令:

./presto --server locahost:9080 --catalog mysql--schema test

2 presto-mysql

<1>在 /etc/catalog/目录下创建mysql.properties

connector.name=mysql

connection-url=jdbc:mysql://localhost:3306

connection-user=root

connection-password=root

<2>重启presto-server

/launcher restart

<3>测试

在客户端安装目录执行

./presto --server locahost:9080 --catalog mysql--schema test

presto:es> select * from mysql.test.test;

3 presto-elasticsearch

<1>在 /安装目录/etc/catalog/目录下创建elasticsearch.properties

connector.name=elasticsearch

#elasticsearch.default-schema=default

#指定表定义文件所在目录

elasticsearch.table-description-directory=etc/elasticsearch/

elasticsearch.scroll-size=1000

elasticsearch.scroll-timeout=2s

elasticsearch.request-timeout=2s

elasticsearch.max-request-retries=5

elasticsearch.max-request-retry-time=10s

<2>创建elasticsearch目录

cd /安装目录/etc/

mkdir elasticsearch

cd elasticsearch

<3>定义表的描述文件(自定义表名.json)

每个表对应建立json映射文件,定义表名,es地址,索引名,类型,字段对应格式

cd elasticsearch

vim test.json

{"tableName": "es_test",

"schemaName": "es",

"host": "es-ip地址",

"port": 9300,

"clusterName": "my-application",

"index": "test",

"indexExactMatch": false,

"type": "test",

"columns": [

{

"name": "name",

"type": "varchar",

"jsonPath":"name",

"jsonType":"varchar"

},

{

"name": "age",

"type": "integer",

"jsonPath":"age",

"jsonType":"integer"

}

]

}

<4>重启presto-server

/launcher restart

<5>测试

./presto --server locahost:9080 --catalog elasticsearch --schema es

presto:es> select * from elasticsearch.es.es_test;

name | age

------+-----

HL   |  12

HLl  |  18

(2 rows)

4 多数据源查询

./presto --server locahost:9080 --catalog elasticsearch --schema es

presto:es> select * from mysql.test.user t left join elasticsearch.es.es_test t1 on t.age=t1.age;

5 JDBC-JAVA

<dependency>

<groupId>com.facebook.presto</groupId>

<artifactId>presto-jdbc</artifactId>

<version>0.228</version>

</dependency>

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;

public class PrestoJdbcDemo {
    public static void main(String[] args) throws  Exception{
        Class.forName("com.facebook.presto.jdbc.PrestoDriver");
        Connection connection = DriverManager.getConnection("jdbc:presto://localhost:9080/mysql/test","root",null);  ;
        Statement stmt = connection.createStatement();
        ResultSet rs = stmt.executeQuery("select * from mysql.test.user t left join elasticsearch.es.es_test t1 on t.age=t1.age");
        while (rs.next()) {
            System.out.println(rs.getString(1));
        }
        rs.close();
        connection.close();
    }
}

原文地址:https://www.cnblogs.com/yzlsthl/p/11805102.html

时间: 2024-08-09 10:58:30

presto-mysql、presto-elasticsearch、关联查询、java-presto-jdbc入门实战.的相关文章

MySQL多表关联查询效率高点还是多次单表查询效率高,为什么?

MySQL多表关联查询效率高点还是多次单表查询效率高,为什么? <阿里巴巴JAVA开发手册>里面写超过三张表禁止join 这是为什么?这样的话那sql要怎么写? 原文地址:https://www.cnblogs.com/gotodsp/p/10090382.html

MySQL如何执行关联查询

MySQL中‘关联(join)’ 一词包含的意义比一般意义上理解的要更广泛.总的来说,MySQL认为任何一个查询都是一次‘关联’ --并不仅仅是一个查询需要到两个表的匹配才叫关联,索引在MySQL中,每一个查询,每一个片段(包括子查询,设置基于表单的select)都可能是关联. 所以,理解MySQL如何执行关联查询至关重要.我们先来看一个union 查询的例子.对于union查询,MySQL先将一系列的单个查询结果放到一个临时表中,然后再重新读出临时表数据来完成union查询.在MySQL的概念

Mysql中的关联查询(内连接,外连接,自连接)

Mysql中的关联查询(内连接,外连接,自连接) 在使用数据库查询语句时,单表的查询有时候不能满足项目的业务需求,在项目开发过程中,有很多需求都是要涉及到多表的连接查询,总结一下mysql中的多表关联查询 一,内连接查询 是指所有查询出的结果都是能够在连接的表中有对应记录的. 以t_employee(员工表)和t_dept(部门表)为例: t_employee表中的记录如下:dept代表该员工所在的部门 t_dept表中记录如下: 可以发现,其中人力资源部里没有员工(这里只是举例,可能与实际不符

MySQL多表关联查询与存储过程

1.多表关联查询 --  **************关联查询(多表查询)**************** -- 需求:查询员工及其所在部门(显示员工姓名,部门名称) -- 1.1 交叉连接查询(不推荐.产生笛卡尔乘积现象:4 * 4=16,有些是重复记录) SELECT empName,deptName FROM employee,dept; -- 需求:查询员工及其所在部门(显示员工姓名,部门名称) -- 多表查询规则:1)确定查询哪些表   2)确定查询哪些字段   3)表与表之间连接条件

JDBC MySQL 多表关联查询查询

public static void main(String[] args) throws Exception{ Class.forName("com.mysql.jdbc.Driver"); Connection conn = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/mydb","root",""); String sql ="select

MySQL数据库学习笔记(八)----JDBC入门及简单增删改查数据库的操作

[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4050825.html 联系方式:[email protected] [正文]                                                                                                               

Mysql多表关联查询,有索引和没索引的差距

下面简单的用个实例来介绍,索引在多表查询中有多关键! 一.没有索引时同步数据: 1.查询代码如下(关联了九次): 2.运行耗时(2分多钟,数据大概只有一万条): 1 Start sync MysqlData:---------------------------时间:2016-12-01 08:50:00 2 Success sync MysqlData:-------------------------同步数据成功!:2016-12-01 08:52:37 二:有索引时同步数据 1.给数据库脚

[MySQL]多表关联查询技巧

示例表A: author_id author_name 1 Kimmy 2 Abel 3 Bill 4 Berton 示例表B: book_id author_id start_date end_date 9 1 2017-09-25 21:16:04 2017-09-25 21:16:06 10 3     11 2 2017-09-25 21:21:46 2017-09-25 21:21:47 12 1     13 8     示例表C: order_id book_id price or

175. Combine Two Tables【LeetCode】-LEFT JON 和RIGHT JOIN,两张表关联查询-java -sql入门

Table: Person +-------------+---------+ | Column Name | Type | +-------------+---------+ | PersonId | int | | FirstName | varchar | | LastName | varchar | +-------------+---------+ PersonId is the primary key column for this table. Table: Address +--

elasticsearch 关联查询对比

两种方式 嵌套和父子关联 Nested Nested docs are stored in the same Lucene block as each other, which helps read/query performance. Reading a nested doc is faster than the equivalent parent/child. Updating a single field in a nested document (parent or nested chi