presto安裝

一、服务端安装

官网地址:Presto | Distributed SQL Query Engine for Big Data

1、下载包

2、解压缩

tar -zxvf presto-server-0.265.1.tar.gz 

mv presto-server-0.265.1 /usr/local/presto

3、 创建data、etc文件夹:

mkdir data

mkdir etc

 plugin下存放各种数据源的连接

data:后期会存储我们计算过程当中的临时数据。

4、在etc下添加jvm.config

vi jvm.config

添加如下内容:

-server
-Xmx16G
-XX:+UseG1GC
-XX:G1HeapRegionSize=32M
-XX:+UseGCOverheadLimit
-XX:+ExplicitGCInvokesConcurrent
-XX:+HeapDumpOnOutOfMemoryError
-XX:+ExitOnOutOfMemoryError

 5、presto支持多个数据源,在presto中叫catalog,这里我们配置支持hive的数据源,配置一个hive的catalog。

cd /usr/local/presto/etc

mkdir catalog

vi hive.properties

connector.name=hive-hadoop2
hive.metastore.uri=thrift://master:9083

此处的hive-hadoop2中的Hadoop2指的是Hadoop的版本。

6、配置好后分发给其他服务器。

7、分发完成后,在etc下创建node.properties

node.id的值可以为数据、字母、运算符。只要保证每台机器不一样即可。

node.data-dir:存储临时数据的路径 

 8、presto是由一个corrdinator节点和多个worker节点组成。在master节点上配置成coordinator,在master-backup和node1上配置成worker。

master:

coordinator=true
node-scheduler.include-coordinator=false
http-server.http.port=8881
query.max-memory=50GB
query.max-memory-per-node=1GB
query.max-total-memory-per-node=2GB
discovery-server.enabled=true
discovery.uri=http://master:8881

master-backup和node1

coordinator=false
http-server.http.port=8881
query.max-memory=50GB
query.max-memory-per-node=1GB
query.max-total-memory-per-node=2GB
discovery.uri=http://master:8881

query.max-memory为查询的最大内存。测试环境没那么大的数据量,随便配。生产上要根据服务器内存,其他组件使用的内存等综合考虑。

discovery-server是coordinator内置的一个服务,共用8881端口。

discovery-server用来跟workder进行通讯。服务启动后worker会向discovery-server进行注册并保持监听,实时汇报任务状态和健康状态,并与coordinator保持通讯,这样coordinator就可以知道每个worker的状态,可以更好的分配任务。

9、配置完成后,就可以启动服务了,启动前需要先启动hive。

启动hive

cd /usr/local/hive

bin/hive --service metastore

启动presto

前台启动: bin/launcher run

后台启动:bin/launcher start

 二、客户端安装

Command Line Interface — Presto 0.266 Documentation

mv presto-cli-0.265.1-executable.jar prestocli

chmod +x prestocli

./prestocli

./prestocli  --server master:8881 --catalog hive --schema default

show schemas;

use db_hive;

show tables;

 

三、可视化客户端安装

下载 yanagishima-17.0.tar.gz 最新包

跨库查询

Presto整合MySQL和Hive,实现跨引擎查询_逆天骚年的博客-CSDN博客

/usr/local/presto/etc/catalog 

java API实现mysql和hive跨库查询 

<dependency>
			<groupId>com.facebook.presto</groupId>
			<artifactId>presto-jdbc</artifactId>
			<version>0.234.1</version>
		</dependency>
package com.example.demo;

import org.apache.commons.lang.StringUtils;
import org.codehaus.jettison.json.JSONArray;
import org.codehaus.jettison.json.JSONObject;

import java.sql.*;
import java.util.Properties;

public class PrestoTest {

    public static void main(String[] args) {
        String sql = "select * from mysql.company.dept as d join hive.default.stu as e on d.id = e.sid";
        //String sql = "select * from staff";
        try {
            new PrestoTest().getDataAll(sql);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    private String server ="192.168.3.*";


    private String port="8881";


    private String username="root";


    private String password="***empty***";

    private Connection getConnection() throws Exception {

        /**
         * 功能:presto 通过 jdbc 连接
         * 示例:jdbc:presto://host:port/
         **/
        String jdbcurl = "jdbc:presto://192.168.3.*:8881/mysql/company";
        Connection conn ;
        Properties props = new Properties();
        Class.forName("com.facebook.presto.jdbc.PrestoDriver");
        props.setProperty("user", username);
        if (StringUtils.isNotBlank(password)) {
            props.setProperty("password", password);
            props.setProperty("SSL", "false");
            //props.setProperty("SSLTrustStorePath", SSLTrustStorePath);
            //props.setProperty("SSLTrustStorePassword", SSLTrustStorePassword);
            jdbcurl = String.format("jdbc:presto://%s:%s/", server, port);
        }
        conn = DriverManager.getConnection(jdbcurl, props);
        //conn = DriverManager.getConnection(jdbcurl, "root","***empty***");

        /*设置连接的数据源类型
         * 示例:mysql、hive
         */
        conn.setCatalog("mysql");
        return conn;
    }

    public JSONArray getDataAll(String sql)
            throws Exception {
        JSONArray array = new JSONArray();
        Statement ps = null;
        ResultSet rs = null;
        Connection con = null;

        try {
            con = getConnection();
            ps = con.createStatement();
            rs = ps.executeQuery(sql);
            // 获取列数
            ResultSetMetaData metaData = rs.getMetaData();
            int columnCount = metaData.getColumnCount();
            // 遍历ResultSet中的每条数据
            while (rs.next()) {
                JSONObject jsonObj = new JSONObject();
                // 遍历每一列
                for (int i = 1; i <= columnCount; i++) {
                    String columnName = metaData.getColumnLabel(i);
                    String value = StringUtils.isBlank(rs.getString(columnName)) ? "" : rs.getString(columnName);
                    jsonObj.put(columnName, value);
                }
                System.out.println(jsonObj.toString());
            }

        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            rs.close();
            ps.close();
            con.close();
        }
        return array;
    }
}
package com.example.demo;

import org.apache.commons.lang.StringUtils;
import org.codehaus.jettison.json.JSONArray;
import org.codehaus.jettison.json.JSONObject;

import java.sql.*;
import java.util.Properties;

public class PrestoTest {

    public static void main(String[] args) {
        String sql = "select * from mysql.company.dept as d join hive.default.stu as e on d.id = e.sid";
        //String sql = "select * from staff";
        try {
            new PrestoTest().getDataAll(sql);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    private String server ="192.168.3.*";


    private String port="8881";


    private String username="root";


    private String password="***empty***";//没有密码时用***empty***

    private Connection getConnection() throws Exception {

        /**
         * 功能:presto 通过 jdbc 连接
         * 示例:jdbc:presto://host:port/
         **/
        String jdbcurl = "jdbc:presto://192.168.3.*:8881/";
        Connection conn ;
        Properties props = new Properties();
        Class.forName("com.facebook.presto.jdbc.PrestoDriver");
        props.setProperty("user", username);
        if (StringUtils.isNotBlank(password)) {
            props.setProperty("password", password);
            props.setProperty("SSL", "false");
            //props.setProperty("SSLTrustStorePath", SSLTrustStorePath);
            //props.setProperty("SSLTrustStorePassword", SSLTrustStorePassword);
            jdbcurl = String.format("jdbc:presto://%s:%s/", server, port);
        }
        conn = DriverManager.getConnection(jdbcurl, props);
        //conn = DriverManager.getConnection(jdbcurl, "root","***empty***");

        /*设置连接的数据源类型
         * 示例:mysql、hive
         */
        conn.setCatalog("hive");//这里既可以为mysql,也可以为hive
        return conn;
    }

    public JSONArray getDataAll(String sql)
            throws Exception {
        JSONArray array = new JSONArray();
        Statement ps = null;
        ResultSet rs = null;
        Connection con = null;

        try {
            con = getConnection();
            ps = con.createStatement();
            rs = ps.executeQuery(sql);
            // 获取列数
            ResultSetMetaData metaData = rs.getMetaData();
            int columnCount = metaData.getColumnCount();
            // 遍历ResultSet中的每条数据
            while (rs.next()) {
                JSONObject jsonObj = new JSONObject();
                // 遍历每一列
                for (int i = 1; i <= columnCount; i++) {
                    String columnName = metaData.getColumnLabel(i);
                    String value = StringUtils.isBlank(rs.getString(columnName)) ? "" : rs.getString(columnName);
                    jsonObj.put(columnName, value);
                }
                System.out.println(jsonObj.toString());
            }

        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            rs.close();
            ps.close();
            con.close();
        }
        return array;
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值