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

Posted YZHL

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了presto-mysqlpresto-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" "$@"

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();
    }
}

 

 

 

以上是关于presto-mysqlpresto-elasticsearch关联查询java-presto-jdbc入门实战.的主要内容,如果未能解决你的问题,请参考以下文章