presto的安装与简单使用

1. presto的介绍


presto是什么:简单的说,类似外部数据源。

1.1 优势
  • 多数据源
  • 支持SQL
  • pluggable Connectors
  • across
  • pipeline
1.2 不足
  • 如果一个Sql的执行时间超过20min以上,不建议使用。

2. presto的安装


  1. 下载presto-server-0.227.tar.gz、presto-cli-0.227-executable.jar(The current Presto release version is 0.227)
    下载链接

  2. 将下载的 presto-server-0.227.tar.gz 解压到 ~/app 目录下

    [hadoop@spark000 software]$ tar -zxvf presto-server-0.227.tar.gz -C ~/app
    
  3. 将 presto-cli-0.227-executable.jar 复制到 pre-server-0.227 的 bin 目录下

    [hadoop@spark000 software]$ cp presto-cli-0.227-executable.jar ~/app/presto-server-0.227/bin
    
  4. 进入到 pre-server-0.227 的 bin 目录下

    [hadoop@spark000 bin]$ mv presto-cli-0.227-executable.jar presto
    [hadoop@spark000 bin]$ chmod +x presto
    
  5. 创建data目录

    [hadoop@spark000 ~]$ mkdir presto-directory
    [hadoop@spark000 ~]$ cd presto-directory/
    [hadoop@spark000 presto-directory]$ ll
    total 0
    [hadoop@spark000 presto-directory]$ pwd
    /home/hadoop/presto-directory
    
  6. 在 pre-server-0.227 目录下创建 etc 目录

    [hadoop@spark000 presto-server-0.227]$ mkdir etc
    [hadoop@spark000 presto-server-0.227]$ ll
    total 208
    drwxr-xr-x  3 hadoop hadoop     98 Oct 22 17:04 bin
    drwxrwxr-x  2 hadoop hadoop      6 Oct 22 17:10 etc
    drwxrwxr-x  2 hadoop hadoop   8192 Oct 22 17:00 lib
    -rw-r--r--  1 hadoop hadoop 191539 Oct 17 08:06 NOTICE
    drwxrwxr-x 30 hadoop hadoop   4096 Oct 22 17:00 plugin
    -rw-r--r--  1 hadoop hadoop    126 Oct 17 08:06 README.txt
    
  7. 在 etc 目录下创建所需文件

    [hadoop@spark000 presto-server-0.227]$ cd etc
    [hadoop@spark000 etc]$ touch node.properties
    [hadoop@spark000 etc]$ touch jvm.config
    [hadoop@spark000 etc]$ touch config.properties
    [hadoop@spark000 etc]$ touch log.properties
    [hadoop@spark000 etc]$ mkdir catalog
    [hadoop@spark000 etc]$ cd catalog/
    [hadoop@spark000 catalog]$ touch mysql.properties
    
  8. 编辑各文件内容

    # 编辑mysql.properties
    [hadoop@spark000 catalog]$ vim mysql.properties
    connector.name=mysql
    connection-url=jdbc:mysql://spark000:3306
    connection-user=root
    connection-password=123456
    
    # 编辑node.properties
    [hadoop@spark000 etc]$ vim node.properties
    node.environment=production
    node.id=ffffffff-ffff-ffff-ffff-ffffffffffff-001
    node.data-dir=/home/hadoop/presto-directory   # 指定刚才创建的data目录
    
    # 编辑jvm.config
    [hadoop@spark000 etc]$ vim jvm.config
    -server
    -Xmx4G
    -XX:+UseG1GC
    -XX:G1HeapRegionSize=32M
    -XX:+UseGCOverheadLimit
    
    # 编辑config.properties
    [hadoop@spark000 etc]$ vim config.properties
    coordinator=true
    node-scheduler.include-coordinator=true
    http-server.http.port=8080
    query.max-memory=2GB
    query.max-memory-per-node=1GB
    query.max-total-memory-per-node=2GB
    discovery-server.enabled=true
    discovery.uri=http://spark000:8080
    
    # 编辑log.properties
    [hadoop@spark000 etc]$ vim log.properties
    com.facebook.presto=INFO
    
  9. 启动

    [hadoop@spark000 presto-server-0.227]$ bin/launcher run
    

    看到如下这个页面表示启动成功 在这里插入图片描述
    这时可以访问 spark000:8080,查看能否看到 ui 页面
    presto web页面

  10. 客户端启动

    [hadoop@spark000 bin]$ ./presto --server spark000:8080 --catalog mysql
    presto>
    

    经测试:–catalog这个参数加与不加,不影响数据的查询。

3. 启动过程中遇到的错误


presto启动报错
Error: java.lang.IllegalArgumentException: Invalid memory configuration. The sum of max total query memory per node (2147483648) and heap headroom (644245094) cannot be larger than the available heap memory (2147483648)

错误分析: max total query memory per node + heap headroom > heap memory

这时我查看 config.properties的参数:

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

再查看 jvm.config中的参数

-Xmx2G

解决: 将jvm.config文件中的-Xmx参数的值改为4G即可
结论:

query.max-memory:表示单个查询在分布在所有相关节点上能用的内存之和的最大值。
query.max-memory-per-node:单个查询在单个节点上用户内存能用的最大值。
从定义上就能看出:query.max-memory-per-node 必须小于 query.max-total-memory-per-node。
同样:query.max-memory 也必须小于 query.max-total-memory。
另外:query.max-total-memory-per-node 与 memory.heap-headroom-per-node 之和必须小于 jvm max memory ,也就是 jvm.config 中配置的 -Xmx参数。

4. MySQL Connector


  • SHOW SCHEMAS FROM mysql;
  • SHOW TABLES FROM mysql.database_name;
  • DESCRIBE mysql.database_name.table_name;
  • SHOW COLUMNS FROM mysql.database_name.table_name;
  • SELECT * FROM mysql.database_name.table_name;

5. Hive Connector


  1. 在 etc/catalog 目录下新建文件 hive.properties

    [hadoop@spark000 catalog]$ vim hive.properties
    connector.name=hive-hadoop2
    hive.metastore.uri=thrift://spark000:9083
    hive.config.resources=/home/hadoop/app/hadoop/etc/hadoop/core-site.xml,/home/hadoop/app/hadoop/etc/hadoop/hdfs-site.xml
    
  2. 开启 hive metastore 服务,默认监听 9083 端口

    [hadoop@spark000 hive]$ bin/hive --service metastore

    [hadoop@spark000 catalog]$ ps -ef|grep hivehive 进程
    [hadoop@spark000 catalog]$ netstat -nlp | grep 36465监控

  3. 退出刚才开启的MySQL客户端,并杀死 PrestoServer 进程

  4. 重新开启服务

    [hadoop@spark000 presto-server-0.227]$ bin/launcher run
    [hadoop@spark000 bin]$ ./presto --server spark000:8080 --catalog hive
    presto>
    
  5. 查询操作和MySQL类似

6. 跨数据源查询


描述:部门表 dept 在MySQL中,员工表 emp 在 Hive 中,两表进行关联。

join结果

7. idea连接 presto 操作


package com.ruozedata.bigdata.spark.sql01
import java.sql.DriverManager

object PrestoApp {

  def main(args: Array[String]): Unit = {

    Class.forName("com.facebook.presto.jdbc.PrestoDriver")
    val connection = DriverManager.getConnection("jdbc:presto://spark000:8080/catalog","root",null)
    val stmt = connection.createStatement()
    val sql = "select e.empno, e.ename, e.deptno, d.dname from hive.wuji_spark.emp e join mysql.wuji_spark.dept d on e.deptno = d.deptno"
    val resultSet = stmt.executeQuery(sql)

    while (resultSet.next()){
      val empno = resultSet.getInt("empno")
      val ename = resultSet.getString("ename")
      val deptno = resultSet.getString("deptno")
      val dname = resultSet.getString("dname")
      println(empno + "\t" + ename + "\t" + deptno + "\t" + dname)
    }
    resultSet.close()
    stmt.close()
    connection.close()

  }

}

运行结果:
idea run result

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值