zoukankan      html  css  js  c++  java
  • 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" "$@"

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

  • 相关阅读:
    腾讯QQ会员中心g_tk32算法【C#版】
    EFCore2.1中DbFirst和CodeFirst简单使用
    Asp.Net Mvc异步上传文件的方式
    Asp.Net从相对路径获取绝对路径的方法(不需要httpcontext上下文也可)
    Asp.Net分页生成页码超链接方法
    SQLServer分页查询笔记
    C#中实现对象的深拷贝
    再编写代码中报错:CS8107 C# 7.0 中不支持功能“xxxxxx”。请使用 7.1 或更高的语言版本。
    【ajax】-前台往后台传值
    [DRP]-EL表达式
  • 原文地址:https://www.cnblogs.com/yzlsthl/p/11805102.html
Copyright © 2011-2022 走看看