大数据之Presto:安装部署

记录过程

文章目录

  • 概述
  • 环境
  • 安装Presto服务
  • 服务启停
  • 安装Presto客户端
  • 本地JMX连接查询
  • 配置连接Hive查询
  • 文档

概述

这里就不复制粘贴了,描述自己理解的。具体详细的使用和介绍需要去官网学习更好

  • 2014年由FaceBook开源,为了解决自身规模的商业数据仓库的交互式分析和处理速度的问题
  • OLAP大数据查询引擎,适用于交互式分析查询,数据量支持GB到PB字节
  • 设计为秒至分钟级别的响应
  • master-slave架构(Coordinator-Worker)
  • 不是数据库只是个查询引擎(计算引擎),不存数据,不支持OLTP
  • 支持在线查询,可跨多个数据源如hive、mysql、hbase整合查询,跨组织分析
  • 内存计算,影响查询性能的除了自身计算速度,还限制于数据源读取数据速度以及网络IO,如mysql一张千万记录的表去读取数据就很慢
  • 京东对社区版本进行二次开发并且开源,性能有很大提升

大数据之Presto:安装部署_第1张图片

环境

  • Centos7
  • Hive
  • Mysql
  • Hadoop的HDFS相关服务(namenode、datanode)
  • JDK

安装Presto服务

选择安装服务端版本并下载:https://repo1.maven.org/maven2/com/facebook/presto/presto-server/

选择安装客户端版本并下载:https://repo1.maven.org/maven2/com/facebook/presto/presto-cli/

这里使用presto-server-0.196.tar.gz包来叙述

  • 解压

    tar -zxvf presto-server-0.196.tar.gz -C /opt/module/
    
  • 配置(Presto配置文件需要自己创建)

    • 在安装目录下创建etc目录然后进去etc目录
    mkdir etc
    cd etc
    
    • 配置节点属性配置文件vim node.properties

      • node.environment: 集群名称。所有在同一个集群中的Presto节点必须拥有相同的集群名称。
      • node.id: 每个Presto节点的唯一标示。每个节点的node.id都必须是唯一的。在Presto进行重启或者升级过程中每个节点的node.id必须保持不变。如果在一个节点上安装多个Presto实例(例如:在同一台机器上安装多个Presto节点),那么每个Presto节点必须拥有唯一的node.id。
      • node.data-dir: 数据存储目录的位置(操作系统上的路径)。Presto将会把日期和数据存储在这个目录下。
      node.environment=production
      node.id=ffffffff-ffff-ffff-ffff-ffffffffffff
      node.data-dir=/var/presto/data
      
    • 配置JVM配置 vim jvm.config

      -server
      -Xmx2G
      -XX:+UseG1GC
      -XX:G1HeapRegionSize=32M
      -XX:+UseGCOverheadLimit
      -XX:+ExplicitGCInvokesConcurrent
      -XX:+HeapDumpOnOutOfMemoryError
      -XX:+ExitOnOutOfMemoryError
      
    • 配置Presto的配置文件vim config.properties

      一个coordinator的etc/config.properties应该至少包含以下信息

      coordinator=true
      node-scheduler.include-coordinator=false
      http-server.http.port=8080
      task.max-memory=1GB
      discovery-server.enabled=true
      discovery.uri=http://example.net:8080
      

      最基本的worker配置

      coordinator=false
      http-server.http.port=8080
      task.max-memory=1GB
      discovery.uri=http://example.net:8080
      

      如果单机配置(一台机器做测试的情况,coordinator和worker同时部署在一台机器上)

      如下配置

      coordinator=true
      node-scheduler.include-coordinator=true
      http-server.http.port=8080
      task.max-memory=1GB
      discovery-server.enabled=true
      discovery.uri=http://example.net:8080
      

      对配置项解释如下:

      • coordinator:指定是否运维Presto实例作为一个coordinator(接收来自客户端的查询情切管理每个查询的执行过程)。
      • node-scheduler.include-coordinator:是否允许在coordinator服务中进行调度工作。对于大型的集群,在一个节点上的Presto server即作为coordinator又作为worke将会降低查询性能。因为如果一个服务器作为worker使用,那么大部分的资源都不会被worker占用,那么就不会有足够的资源进行关键任务调度、管理和监控查询执行。
      • http-server.http.port:指定HTTP server的端口。Presto 使用 HTTP进行内部和外部的所有通讯。
      • task.max-memory=1GB:一个单独的任务使用的最大内存 (一个查询计划的某个执行部分会在一个特定的节点上执行)。 这个配置参数限制的GROUP BY语句中的Group的数目、JOIN关联中的右关联表的大小、ORDER BY语句中的行数和一个窗口函数中处理的行数。 该参数应该根据并发查询的数量和查询的复杂度进行调整。如果该参数设置的太低,很多查询将不能执行;但是如果设置的太高将会导致JVM把内存耗光。
      • discovery-server.enabled:Presto 通过Discovery 服务来找到集群中所有的节点。为了能够找到集群中所有的节点,每一个Presto实例都会在启动的时候将自己注册到discovery服务。Presto为了简化部署,并且也不想再增加一个新的服务进程,Presto coordinator 可以运行一个内嵌在coordinator 里面的Discovery 服务。这个内嵌的Discovery 服务和Presto共享HTTP server并且使用同样的端口。
      • discovery.uri:Discovery server的URI。由于启用了Presto coordinator内嵌的Discovery 服务,因此这个uri就是Presto coordinator的uri。修改example.net:8080,根据你的实际环境设置该URI。注意:这个URI一定不能以“/“结尾。
    • 配置日志 vim log.properties

      在这个配置文件中允许你根据不同的日志结构设置不同的日志级别。每个logger都有一个名字(通常是使用logger的类的全标示类名). Loggers通过名字中的“.“来表示层级和集成关系。 (像java里面的包). 如下面的log配置信息:

      com.facebook.presto=INFO
      
    • 配置Catalog(Presto的组件,可理解为数据源配置)

      先创建在etc目录下创建一个catalog目录,并进入

      mkdir catalog
      cd catalog
      

      先来个jmx的connector对应的catalog配置文件

      vim jmx.properties

      connector.name=jmx
      

      此时就已经可以进行测试了,不过数据和文件将都落盘在本地文件系统

服务启停

  • 后台启动(日志打印在日志文件)

    bin/launcher start
    
  • 前台启动(日志打印在控制台)

    bin/launcher run
    
  • 日志目录:data/var/log

    • launcher.log:这个日志文件由launcher创建,并且server的stdout和stderr都被重定向到了这个日志文件中。这份日志文件中只会有很少的信息,包括:

    在server日志系统初始化的时候产生的日志和JVM产生的诊断和测试信息。

    • server.log:这个是Presto使用的主要日志文件。一般情况下,该文件中将会包括server初始化失败时产生的相关信息。这份文件会被自动轮转和压缩。

    • http-request.log: 这是HTTP请求的日志文件,包括server收到的每个HTTP请求信息,这份文件会被自动轮转和压缩。

安装Presto客户端

  • 下载客户端

    https://repo1.maven.org/maven2/com/facebook/presto/presto-cli/0.196/presto-cli-0.196-executable.jar

  • 重命名为presto

    下载的是个jar包,因为Presto本身就是java开发,所以客户端也是个java程序。可以考虑放到/usr/bin/目录下就可以不用配置环境变量直接敲presto进行使用

    mv presto-cli-0.196-executable.jar presto
    chmod a+x presto
    

本地JMX连接查询

前提是配置了catalog,也就是jmx.properties.

注意端口号我自己配置的是38080

  • 不指定数据库(Presto世界观里也叫做是schema)
./presto --server localhost:38080 --catalog jmx
  • 进入后查看所有当前连接器的schema

    presto> show schemas;
           Schema       
    --------------------
     current            
     history            
     information_schema 
    (3 rows)
    
    Query 20200502_155129_00011_gdck8, FINISHED, 1 node
    Splits: 18 total, 18 done (100.00%)
    0:00 [3 rows, 47B] [30 rows/s, 485B/s]
    
  • 选择一个schema,进行查看所有table

    presto> use current;
    USE
    presto:current> show tables;
                                                                          Table                                                                       
    --------------------------------------------------------------------------------------------------------------------------------------------------
     com.facebook.presto.execution.executor:name=multilevelsplitqueue                                                                                 
     com.facebook.presto.execution.executor:name=taskexecutor                                                                                         
     com.facebook.presto.execution.resourcegroups:name=internalresourcegroupmanager                                                                   
     com.facebook.presto.execution.scheduler:name=nodescheduler                                                                                       
     com.facebook.presto.execution.scheduler:name=splitschedulerstats                                                                                 
     com.facebook.presto.execution:name=queryexecution  
    
  • 退出 exit

  • 指定数据库连接

    ./presto --server localhost:38080 --catalog jmx --schema current
    

配置连接Hive查询

  • 配置hive的配置文件hive-site.xml,需要配置HiveServer2、MetaStore服务连接信息

    vim /opt/module/hive-1.2.1/conf/hive-site.xml

    <property>
      <name>hive.metastore.urisname>
      <value>thrift://bigdata01:39083value>
     property>
    
  • 启动HiveServer2和MetaStore服务

    bin/hive --service hiveserver2 &
    bin/hive --service metastore &
    

    可先前台启动即不用加&符号,看是否启动成功

  • 配置Presto的Hive的catalog配置文件:去Presto安装目录下vim etc/catalog/hive.properties

    # 这个连接器的选择要根据自身集群情况结合插件包的名字来写
    connector.name=hive-hadoop2
    # 修改为 hive-metastore 服务所在的主机名称
    hive.metastore.uri=thrift://bigdata01:39083
    # 如果hive metastore的引用文件存放在一个存在联邦的HDFS上,或者你是通过其他非标准的客户端来访问HDFS集群的,请添加以下配置信息来指向你的HDFS配置文件
    hive.config.resources=/opt/module/single-hadoop-2.7.2/etc/hadoop/conf/core-site.xml,/opt/module/single-hadoop-2.7.2/etc/hadoop/conf/hdfs-site.xml
    

    大多数情况下,Presto会在安装过程中自动完成HDFS客户端的配置。 如果确实需要特殊配置,只需要添加一些额外的配置文件,并且需要指定这些新加的配置文件。 建议将配置文件中的配置属性最小化。尽量少添加一些配置属性,因为过多的添加配置属性会引起其他问题

    其他更多配置可以去官网查询

  • 客户端连接

    • 不指定schema连接
    ./presto --server localhost:38080 --catalog hive
    

    一些简单查询

    presto> show schemas;
           Schema       
    --------------------
     default            
     information_schema 
    (2 rows)
    
    Query 20200502_160615_00017_gdck8, FINISHED, 1 node
    Splits: 18 total, 18 done (100.00%)
    0:00 [2 rows, 35B] [10 rows/s, 186B/s]
    
    presto> use default;
    USE
    presto:default> show tables;
     Table 
    -------
     a     
    (1 row)
    
    Query 20200502_160639_00019_gdck8, FINISHED, 1 node
    Splits: 18 total, 18 done (100.00%)
    0:00 [1 rows, 18B] [5 rows/s, 93B/s]
    
    presto:default> insert into a values(3);
    INSERT: 1 row
    
    Query 20200502_160806_00026_gdck8, FINISHED, 1 node
    Splits: 35 total, 35 done (100.00%)
    0:01 [0 rows, 0B] [0 rows/s, 0B/s]
    
    presto:default> select * from a;
     a 
    ---
     1 
     3 
     2 
    (3 rows)
    
    Query 20200502_160816_00027_gdck8, FINISHED, 1 node
    Splits: 19 total, 19 done (100.00%)
    0:00 [3 rows, 66B] [17 rows/s, 375B/s]
    
    • 指定schema连接就是增加 --schema schema名称

文档

http://prestodb.jd.com/docs/current/index.html

你可能感兴趣的:(大数据,大数据系列)