大数据规整-4-presto由Facebook开源的分布式SQL交互式查询引擎单机安装

    技术2022-07-11  90

    Facebook的数据仓库存储在少量大型Hadoop/HDFS集群。Hive是Facebook在几年前专为Hadoop打造的一款数据仓库工具。在以前,Facebook的科学家和分析师一直依靠Hive来做数据分析。但Hive使用MapReduce作为底层计算框架,是专为批处理设计的。但随着数据越来越多,使用Hive进行一个简单的数据查询可能要花费几分到几小时,显然不能满足交互式查询的需求。Facebook也调研了其他比Hive更快的工具,但它们要么在功能有所限制要么就太简单,以至于无法操作Facebook庞大的数据仓库。

    2012年开始试用的一些外部项目都不合适,他们决定自己开发,这就是Presto。2012年秋季开始开发,目前该项目已经在超过 1000名Facebook雇员中使用,运行超过30000个查询,每日数据在1PB级别。Facebook称Presto的性能比Hive要好上10倍多。2013年Facebook正式宣布开源Presto。

    注意:hadoop的命令,在2.8.0中推荐是以hadoop开头,而不是hdfs,后者是一个向下兼容的措施。#hadoop fs -mkdir /test

    注意:hive.metastore.uris,表示Hive连接到该URI请求远程元存储的元数据。默认值为空。

    1 环境准备

    (1)环境准备 操作系统centos7 jdk:1.8.0_181【#java -version】 hadoop:2.8.5【#hadoop version】 mysql:5.7.32【#mysql --version】 hive:1.2.2【#hive --version】

    presto需要用到metastore,所以必须安装hive,这个从最新的官方结构图可以看出。采用的是服务端配置,即配置文件中不添加hive.metastore.uris。

    2 下载安装

    (1)网址 https://prestodb.github.io/docs/current/installation/deployment.html (2)解压安装 #tar -xzvf presto-server-0.219.tar.gz -C /usr/local/ #vi /root/.bashrc

    export PRESTO_HOME=/usr/local/presto-server-0.219 export PATH=$PATH:$PRESTO_HOME/bin

    #source /root/.bashrc

    3 配置presto

    (1)数据目录 Presto needs a data directory for storing logs, etc. We recommend creating a data directory outside of the installation directory, which allows it to be easily preserved when upgrading Presto. (2)配置目录 #mkdir -p /usr/local/presto-server-0.219/etc配置目录 #mkdir -p /usr/local/data_presto/data数据目录 修改各个配置文件(这些文件都需要自己创建,和hadoop不同,presto没有模板)。

    3.1 Node Properties

    节点属性文件,etc/node.properties属性,包含每个节点的配置。一个节点是计算机上安装的单个Presto实例。此文件通常是在第一次安装Presto时由部署系统创建。 #cd /usr/local/presto-server-0.219/etc/ #vi node.properties

    node.environment=prestoquery node.id=presto123 node.data-dir=/usr/local/data_presto/data

    (1)node.environment:环境的名称。群集中的所有Presto节点必须具有相同的环境名称。 (2)node.id:此Presto安装的唯一标识符。这对于每个节点都必须是唯一的。在重新启动或升级Presto时,此标识符应保持一致。如果在一台机器上运行多个Presto安装(即在同一台机器上运行多个节点),则每个安装必须具有唯一的标识符。 (3)node.data-dir:数据目录的位置(文件系统路径)。Presto将在这里存储日志和其他数据。

    3.2 JVM Config

    JVM配置文件,etc/jvm.config,包含用于启动Java虚拟机的命令行选项列表。文件的格式是选项列表,每行一个。shell不会解释这些选项,因此不应引用包含空格或其他特殊字符的选项。 #cd /usr/local/presto-server-0.219/etc/ #vi jvm.config

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

    3.3 Config Properties

    配置属性文件,etc/config.properties,包含Presto服务器的配置。每个Presto服务器都可以同时充当协调器和工作器,但是将一台机器专用于只执行协调工作可以在更大的集群上提供最佳性能。

    如果presto只是安装一台机器上(既是coordinator又是worker),那么按照以下方式配置:注意端口不要和hadoop,hive的冲突,配置之前可以使用netstat观察下,在部署之前,至少应该有一份文档列出机器,ip,端口等等信息,包括路径,系统版本。 #cd /usr/local/presto-server-0.219/etc/ #vi config.properties

    coordinator=true node-scheduler.include-coordinator=true http-server.http.port=8080 query.max-memory=5GB query.max-memory-per-node=1GB query.max-total-memory-per-node=2GB discovery-server.enabled=true discovery.uri=http://pda1:8080

    (1)coordinator:允许这个Presto实例充当协调器(接受来自客户端的查询并管理查询执行)。 (2)node-scheduler.include-coordinator:允许在协调器上安排工作。对于较大的集群,协调器上的处理工作可能会影响查询性能,因为机器的资源不足以用于调度、管理和监视查询执行的关键任务。 (3)http-server.http.port:指定HTTP服务器的端口。Presto使用HTTP进行所有内部和外部通信。 (4)query.max-memory:查询可以使用的最大分布式内存量。 (5)query.max-memory-per-node:查询可以在任何一台计算机上使用的最大用户内存量。 (6)query.max-total-memory-per-node:一个查询可以在任何一台机器上使用的最大用户和系统内存量,其中系统内存是读卡器、写卡器和网络缓冲区等在执行过程中使用的内存。 (7)discovery-server.enabled:Presto使用发现服务查找群集中的所有节点。每个Presto实例都将在启动时向发现服务注册自己。为了简化部署并避免运行附加服务,Presto协调器可以运行发现服务的嵌入式版本。它与Presto共享HTTP服务器,因此使用相同的端口。 (8)discovery.uri:发现服务器的URI。因为我们已经在Presto协调器中启用了发现的嵌入式版本,所以这应该是Presto协调器的URI。此URI不能以斜杠结尾。

    3.4 Log Levels

    可选的日志级别文件,etc/log.properties,允许设置命名记录器层次结构的最低日志级别。每个记录器都有一个名称,通常是使用记录器的类的完全限定名。记录器有一个基于名称中点的层次结构(如Java包)。 #cd /usr/local/presto-server-0.219/etc/ #vi log.properties

    com.facebook.presto=DEBUG

    正常之后,可以把DEBUG设置为其它数值: DEBUG,INFO,WARN,ERROR

    3.5 Catalog Properties

    Presto通过安装在catalogs中的连接器访问数据。连接器提供catalogs中的所有模式和表。例如,Hive连接器将每个Hive数据库映射到一个模式,因此,如果Hive连接器作为Hive catalog接入,并且Hive包含一个表(在数据库web中单击),则该表将作为一个表在Presto中访问hive.web.clicks.

    通过在etc/catalog目录中创建catalog属性文件来注册。 #mkdir -p /usr/local/presto-server-0.219/etc/catalog #cd /usr/local/presto-server-0.219/etc/catalog

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

    3.6 安装presto-cli

    https://repo1.maven.org/maven2/com/facebook/presto/presto-cli/0.186/ 下载presto-cli 的jar包,放在$PRESTO_HOME/bin下,并重命名为presto-cli。 #mv presto-cli-0.186-executable.jar presto-cli #chmod a+x presto-cli

    4 使用

    #launcher start后台启动prestoserver #hive --service metastore >> /tmp/meta.log 2>&1 &后台运行hive的metastore #presto-cli --server pda1:8080 --catalog hive --schema dbtest presto:dbtest> select * from pl; presto:dbtest> select count(*) from pl; presto:dbtest> exit

    #launcher stop关闭prestoserver

    Processed: 0.023, SQL: 9