有多种设置Presto的办法。在本章的第一部分,您将看到怎么手动装置Presto。咱们不会过多评论手动装置,由于本章的真正目标是在本地构建一个小集群,模拟一个真实的出产环境。 接下来,您将了解怎么在Docker上装置Presto以及怎么在Kubernetes中设置本地集群。最终,您将学习怎么在Presto中运转您的第一个查询,重点是怎么列出目录和形式,并查询表。

本章假定您对Docker、Kubernetes和运用指令行有一些了解。即使您不了解,您仍然应该能够依照阐明一步步进行,并成功运转一个作业的布置。

Presto 手动装置

要在本地核算机上设置Presto,您能够依照Presto官方文档中描绘的进程进行操作。由于Presto是用Java编写的,您应该注意Presto支撑的Java具体版别。Presto需求Java 8。Oracle JDK和OpenJDK都得到支撑。

在Docker上运转Presto

本地Presto实例十分合适开发和毛病扫除。您能够运用裸机或虚拟机设置具有多个节点的完好出产集群。然而,您将需求自己办理这些节点的监控、可用性、可扩展性和布置。这便是容器和Kubernetes发挥作用的地方。

在本节中,咱们将在Docker上装置和运转Presto,在下一节中,咱们将运用相同的容器二进制文件和完好集群的Kubernetes布置装备来设置一个几乎能够用于出产的集群。

在Docker上运转Presto在作为独立节点运转Presto时很有用,不衔接到其他外部组件,比方用于拜访操控的Apache Ranger。相反,假如您需求更杂乱的网络,您有必要装备更杂乱的场景,例如根据Kubernetes。在本书中,咱们将运用Presto Docker作为基本容器,并运用Kubernetes来设置一个容器网络。

装置Docker

要运转容器,您需求装置Docker的一个版别。咱们现已测验了本书中描绘的代码,适用于Docker 4.2.0版别,但最新版别也应该能够作业。Docker需求至少4 GB的RAM。但是,咱们主张至少8 GB的RAM以进步Presto的性能。您能够在Windows或Mac上运用Docker Desktop,也能够在Linux上运用Docker Engine。确保经过docker login登录到Docker注册表或其他注册表(如ECR),以便能够发布您创立的镜像供运用。

Presto Docker 镜像

首要,假如您没有克隆仓库,请履行以下操作:

git clone https://github.com/alod83/Learning-and-Operating-Presto.git

本节中运用的代码坐落目录02/presto-docker中,该目录包括以下文件以及README.md文件:

  • Dockerfile

    • Docker的装备文件
  • etc/

    • 包括Presto装备文件的目录

在本节的其他部分,咱们将描绘Dockerfile和etc/目录的内容,这将答应您自界说Presto装置。假如您想运用默许装备装置Presto,能够直接跳到“在Docker上构建和运转Presto”。

Dockerfile

Dockerfile根据CentOS 7,装置了Presto服务器和Presto客户端以及其他依靠和工具。Dockerfile的组织结构如下。 首要,界说基本镜像、参数(包括要下载的Presto版别)和Presto服务器和客户端二进制文件的URL:

FROM centos:7
ARG PRESTO_VERSION
ARG PRESTO_BIN=https://repo1.maven.org/maven2/com/
  facebook/presto/presto-server/${PRESTO_VERSION}/
  presto-server-${PRESTO_VERSION}.tar.gz
ARG PRESTO_CLI_BIN=https://repo1.maven.org/maven2/com/
  facebook/presto/presto-cli/${PRESTO_VERSION}/
  presto-cli-${PRESTO_VERSION}-executable.jar

接下来,装置装置Presto所需的软件:

RUN yum update -y &&
    yum install -y wget ca-certificates tar less
    yum install -y java-1.8.0-openjdk
    yum clean all

创立/opt目录,您将在其间装置Presto。然后,下载Presto服务器和客户端二进制文件,并将它们移动到/opt目录:

RUN mkdir -p /opt
RUN wget --quiet ${PRESTO_BIN}
RUN tar -xf presto-server-${PRESTO_VERSION}.tar.gz -C /opt
RUN rm presto-server-${PRESTO_VERSION}.tar.gz
RUN ln -s /opt/presto-server-${PRESTO_VERSION} /opt/presto
RUN wget --quiet "${PRESTO_CLI_BIN}"
RUN mv presto-cli-${PRESTO_VERSION}-executable.jar /usr/local/bin/presto
RUN chmod  x /usr/local/bin/presto
RUN mkdir /opt/presto/data
RUN mkdir /opt/presto/log

现在,将您本地文件体系中etc/目录的内容复制到Docker镜像中的etc/目录:

COPY etc /opt/presto/etc

最终,指定运转Presto的指令:

CMD ["/opt/presto/bin/launcher", "run"]

etc/ 目录

etc/ 目录包括Presto的装备文件。在本节中,咱们将看到怎么设置一个在本地运转Presto的基本装备。该场景运用一个和谐器和一个作业节点。在“在Docker上构建和运转Presto”中,您将学习怎么为相似出产环境的装备Presto。目前,所描绘的装备足以开始并了解Presto。 etc/ 目录包括以下基本文件和目录:

  • node.properties
  • jvm.config
  • config.properties
  • log.properties
  • catalog/

您能够依照描绘运用装备文件,或测验修正它们以根据需求自界说Presto装备。咱们将在本书的后续章节中具体分析装备文件。

node.properties

一个节点是Presto的一个实例,而这个文件是特定于该节点的装备。以下代码片段显现了您有必要在 node.properties 中界说的最小特点:

node.environment=presto_local
node.id=1a674699-500c-414c-b480-9ac0df416403
node.data-dir=data

最少需求的特点包括:

  • node.environment 此装备指定环境的称号。Presto集群中的一切节点有必要具有相同的环境称号。
  • node.id Presto装置的仅有标识符。同一Presto装置中的一切节点有必要共享相同的node.id值,它在重新发动和晋级之间有必要保持一致。您能够将此ID生成为通用仅有标识符(UUID)。
  • node.data-dir 此装备指定Presto将存储日志和其他数据的数据目录。

jvm.config

Presto是用Java编写的,因而您能够运用此装备文件来存储传递给Java虚拟机(JVM)的指令行选项。要开始运用Presto,咱们将运用以下选项:

-server
-Xms3G
-Xmx3G
-Djdk.attach.allowAttachSelf=true

-server选项挑选Java HotSpot Server VM。-Xms3G -Xmx3G选项为JVM预分配3 GB的内存(最小值和最大值设置为相同的值)。-Djdk.attach.allowAttachSelf=true选项是为了防止发动错误,答应进程附加到JVM以从受仪器化的目标中获取信息。 咱们将在第6章更具体地评论这个装备文件。

config.properties

运用此文件指定Presto服务器的装备。一个节点能够装备为和谐器、作业节点或两者兼而有之。咱们将运用以下装备布置Presto和谐器的本地Presto:

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

以下是各特点的解说:

  • coordinator:将值设置为true将答应此Presto节点承受客户端请求并办理客户端衔接。
  • node-scheduler.include-coordinator:将值设置为true将答应在和谐器上调度作业。一般,在出产环境中不希望将其设置为true,由于和谐和查询执即将竞赛相同的资源。咱们将在第3章具体评论调度的细节。
  • http-server.http.port:这是用于节点间和外部通信的HTTP端口。
  • query.max-memory:这是查询在整个Presto集群上能够利用的用户内存的最很多。假如查询超越此内存约束,Presto将主动终止其履行。
  • query.max-memory-per-node:这是查询在作业节点上能够运用的用户内存的最很多。假如查询在任何节点上超越此内存约束,Presto将主动终止其履行。
  • query.max-total-memory-per-node:这是查询在作业节点上能够运用的用户和体系内存总和的最很多。假如查询在任何节点上超越此内存约束,Presto将主动终止其履行。咱们将在第6章中了解体系和用户内存的概念。
  • discovery-server.enabled:Presto集群中的一切节点在发动时将主动向发现服务注册。为了防止运转额外的服务,Presto和谐器能够运转嵌入式版别的发现服务。这将答应您为一切Presto机器设置单个端口,使布置更简略。
  • discovery.uri:这是发现服务器的URI。由于咱们在Presto和谐器中启用了嵌入式版别的发现,所以这应该是Presto和谐器的URI。URI有必要与Presto和谐器的主机和端口匹配。此URI不能以斜杠结尾。

log.properties

日志记载关于了解服务器正在履行的操作和解决问题至关重要。有四个等级:DEBUG、INFO、WARN和ERROR。根据需求,您能够指定其他包以恰当的日志等级。要开始运用,您能够运用以下装备:

com.facebook.presto=INFO

经过将com.facebook.presto包的等级设置为INFO,您能够在发动时查看节点的一切设置,以及进行毛病扫除所需的任何相关信息。咱们将在第6章中包括更多有关这些设置的内容。

catalog/<connector>.properties

此目录包括您的Presto装备中每个衔接器的装备。正如在第1章中简要介绍的那样,Presto运用衔接器从不同的数据源拜访数据。衔接器是使最终用户的SQL on Anything典范成为可能的因素。 Presto运用数据源的本机接口来查询和处理数据;例如,关于联系数据库,衔接器将运用JDBC从源拜访数据,而关于非联系源,如S3、Elastic等,衔接器将运用恰当的SDK/API。

因而,衔接器能够运用SQL、RESTful API、HTTP或任何其他专有通信机制与底层数据源进行交互 – 一切这些都发生在暗地。衔接器将底层数据拜访为您笼统成数据库、形式、表和SQL结构,即使底层源没有数据库、形式或表的概念。作为经过Presto查询数据的用户,您只需求知道怎么编写SQL查询;衔接器担任其他的作业。咱们将在第3章中更具体地评论衔接器。

衔接器在Presto和目录之间树立衔接。您能够运用SQL查询目录。衔接器笼统了与数据源进行交互的底层杂乱性 – 这不重要,无论它是平面文件、NoSQL数据库、API还是联系数据库。

经过在etc/catalog目录中创立一个目录特点文件,您能够注册一个目录。例如,要挂载TPC-H目录,能够创立一个tpch.properties文件,其间包括以下内容以将tpch衔接器挂载为tpch目录:

connector.name=tpch

构建并在Docker上运转Presto

现在您现已准备好经过在终端中运转以下指令来构建Docker镜像:

bashCopy code
docker build --build-arg PRESTO_VERSION=0.276.1 . -t prestodb:latest

您需求将要装置的PRESTO_VERSION作为参数传递给Docker指令。在编写本文时,Presto的最新版别是0.276.1。 然后,运转构建的镜像:

bashCopy code
docker run --name presto prestodb:latest

Presto服务器将发动。您应该在规范输入和规范错误中看到许多日志和信息。假如在这些日志和信息之后,您看到以下消息,就表明服务器正在运转:

bashCopy code
INFO    main    com.facebook.presto.server.PrestoServer
======== SERVER STARTED ========

要测验Presto服务器是否正常运转,您能够打开一个新的终端,并衔接到Docker容器中的Presto客户端:

bashCopy code
docker exec -it presto presto

现在您已衔接到Presto客户端,能够运转查询,例如,显现目录列表:

sqlCopy code
presto> show catalogs;

查询将生成以下输出:

sqlCopy code
Catalog
-------
 system
 tpch
(2 rows)
Query 20220919_085038_00001_j5vrm, FINISHED, 1 node
Splits: 19 total, 19 done (100.00%)
0:22 [0 rows, 0B] [0 rows/s, 0B/s]

查询的输出显现有两个目录,system和tpch。这证明Presto已正确加载tpch目录。

Presto沙盒

到目前为止,咱们现已介绍了怎么从头开始构建基本的Presto Docker容器。假如您需求为您的场景装置更多的包或库,您能够运用Docker Presto沙盒容器。 Presto沙盒现已装备了装备许多场景所需的一切库,例如咱们将在第5章中看到的数据湖仓库。要运用Presto沙盒运转Presto容器,请参阅文档。

在Kubernetes上布置Presto

图2-1展现了咱们将在本地机器上布置的集群。咱们将运用两个数据源,TPC-H和一个MySQL数据库。咱们将布置一个单独的和谐器和两个作业者,每个作业者代表Kubernetes中的一个Pod。这个场景每个节点至少需求4GB的RAM,所以假如你的机器内存或存储能力不足,你能够将作业者的数量削减到一个。你也能够创立一个包括Presto客户端的新Pod,但这会耗费很多资源。在本章中,为了削减在本地核算机上运用的资源数量,咱们将运用和谐器中供给的Presto客户端。

《Learning and Operating Presto 》第二章:开始运用Presto

Kubernetes简介

在本章中,咱们将运用在整个章节中运用的本地集群,因而您需求在本地核算机上装置Kubernetes。有各种各样的Kubernetes版别;运用哪种版别的Kubernetes并不重要。一切与Kubernetes的交互都经过kubectl进行,因而请确保您现已装置了Kubernetes客户端。您能够在此处找到有关您的操作体系的阐明。

在本书中,咱们将运用由Docker Desktop供给的Kubernetes版别。要装置它,首要有必要装置Docker Desktop,如前一节所述,然后能够依照以下步骤启用Kubernetes:

  1. 发动Docker Desktop并拜访仪表板。
  2. 单击窗口右上角的设置按钮
  3. 从左侧边栏菜单中挑选Kubernetes,然后挑选“启用Kubernetes”,最终单击“应用并重新发动”按钮。