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

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM