Presto安装部署详细说明

一、官网教程

https://prestodb.io/docs/current/installation.html

二、环境准备

Presto需要:Linux   Java8_64

JDK自行安装,不用多说了

三、单节点部署

1.presto下载

下载安装包:https://prestodb.io/download.html

时间:2020-08-03,最新版本0.238.2,大小:800M左右

presto-server-0.238.2.tar.gz
presto-cli-0.238.2-executable.jar
presto-jdbc-0.238.2.jar

2.上传解压

1.所有应用安装到/data下(个人习惯),创建presto目录:

mkdir presto

 2.上传presto文件,并解压

tar -xzvf presto-server-0.238.2.tar.gz

3.配置Presto

 在安装目录下创建一个etc目录。在etc目录下配置以下信息:

  • 节点属性(Node Properties):每个节点的环境配置信息
  • JVM配置(JVM Config):JVM的命令行选项
  • 配置属性(Config Properties):PrestoServer的配置信息
  • 日志级别(Log Properties):日志级别配置信息
  • Catalog属性(Catalog Properties):连接器配置信息(数据源)

3.1 Node Properties

节点属性配置文件:etc/node.properties包含针对于每个节点的特定的配置信息。一个节点就是在一台机器上安装的一个实例。这个配置文件一般情况下是在Presto第一次安装的时候,由部署系统创建的,一个etc/node.properties配置文件至少包含如下配置信息:

node.environment=production
node.id=ffffffff-ffff-ffff-ffff-ffffffffffff
node.data-dir=/var/presto/data

 各配置参数描述如下:

node.enviroment:集群名称,所有在同一个集群中的Presto节点必须拥有相同的集群名称,这个名字就是控制台右上角展示的enviroment。

node.id:每个Presto节点的唯一标识,每个节点的node.id都必须是唯一的。在Presto进行重启或者升级过程中每个节点的node.id必须保持不变。如果在一个节点上安装多个Presto实例(例如:在同一台机器上安装多个Presto节点),那么每个Presto节点必须拥有唯一的node.id。

node.data-dir:数据存储目录的位置(操作系统上的路径),Presto将会把日期和数据存储在这个目录下。

具体配置:

cd ./etc
vi node.properties

#输入配置
node.environment=test_bob
node.id=bigdata_test1
node.data-dir=/data/presto/presto-server-0.238.2/data

 3.2 JVM Config

JVM配置文件:etc/jvm.config,包含一系列在启动JVM时候需要使用的命令行选项。

一个典型的etc/jvm.config配置文件如下:

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

由于OutOfMemoryError将会导致JVM处于不一致状态,一般的处理措施是将写入dump headp中的信息,然后强制终止进程。老版的可添加-XX:OnOutOfMemoryError=kill -9 %p,新版的用-XX:+ExitOnOutOfMemoryError。

具体的内存配置大小可以根据机器的内存大小设置,用命令free -g查看,不宜设置过大,也不能太小。由于测试机器内存只有32G,所以配置就用了上面的配置。

具体配置:

cd ./etc
vi jvm.config

#输入配置
-server
-Xmx16G
-XX:+UseG1GC
-XX:G1HeapRegionSize=32M
-XX:+UseGCOverheadLimit
-XX:+ExplicitGCInvokesConcurrent
-XX:+HeapDumpOnOutOfMemoryError
-XX:+ExitOnOutOfMemoryError
-XX:ReservedCodeCacheSize=256M

 3.3 Config Properties

Presto配置文件:etc/config.properties包含了Presto Server的所有配置信息。每个Presto Server即可以是一个coordinator也可以是一个worker。但是在大型集群中,处于性能考虑,建议单独用一台机器作为coordinator(调度节点)

一个coordinator的配置至少包含以下信息:

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

 一个worker的配置至少包含以下信息:

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

 作为单节点测试,这台机器既会作为coordinator,也会作为worker。配置如下:

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://example.net:8080

 各配置项解释:

coordinator:指定是否运维Presto实例作为一个coordinator(接收来自客户端的查询情切管理每个查询的执行过程)。

node-scheduler.include-coordinator:是否允许在coordinator服务中进行调度工作(即作为coordinator又作为worker。对于大型的集群,在一个节点上的Presto server即作为coordinator又作为worker将会降低查询性能。因为如果一个服务器作为worker使用,那么大部分的资源都会被worker占用,那么就不会有足够的资源进行关键任务调度、管理和监控查询执行。

http-server.http.port:指定HTTP server的端口。Presto 使用 HTTP进行内部和外部的所有通讯。

query.max-memory:可查询最大内存。

query.max-memory-per-node:可查询最大单用户内存。

query.max-total-memory-per-node:一个查询可使用的最大用户和内存。

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一定不能以“/“结尾。

具体配置:

vi config.properties

#调度节点配置
coordinator=true
node-scheduler.include-coordinator=false
http-server.http.port=9666
query.max-memory=30GB
query.max-memory-per-node=3GB
query.max-cpu-time=4h
discovery-server.enabled=true
discovery.uri=http://yy-t-bigdata1.niwodai.com:9666
#选择性配置
scheduler.http-client.request-timeout=10m
scheduler.http-client.idle-timeout=10m
node-manager.http-client.request-timeout=10m
node-manager.http-client.idle-timeout=10m
memoryManager.http-client.request-timeout=10m
memoryManager.http-client.idle-timeout=10m
task.max-worker-threads=32


#worker节点配置
coordinator=false
http-server.http.port=9666
query.max-memory=10GB
query.max-memory-per-node=1GB
discovery.uri=http://yy-t-bigdata1.niwodai.com:9666

3.4 Log Properties

日志配置文件:etc/log.properties。类似Java的日志级别,包括INFO、DEBUG、ERROR。

com.facebook.presto=INFO

3.5 Catalog Properties

Presto通过connectors访问数据。这些connectors挂载在catalogs上。 connector可以提供一个catalog中所有的schema和表。 例如: Hive connector 将每个hive的database都映射成为一个schema, 所以如果hive connector挂载到了名为hive的catalog, 并且在hive的web有一张名为clicks的表, 那么在Presto中可以通过hive.web.clicks来访问这张表。
通过在etc/catalog目录下创建catalog属性文件来完成catalogs的注册。
例如:
如果要创建jmx数据源的连接器,可以创建一个etc/catalog/jmx.properties文件,文件中的内容如下,完成在jmxcatalog上挂载一个jmxconnector:
connector.name=jmx

如果要创建hive数据源的连接器,可以创建一个etc/catalog/hive.properties文件,文件中的内容如下,完成在hivecatalog上挂载一个hiveconnector:
connector.name=hive-hadoop2
hive.metastore.uri=thrift://example.net:9083
hive.config.resources=/etc/hadoop/conf/core-site.xml,/etc/hadoop/conf/hdfs-site.xml

参数说明
connector.name为连接器名称,hive的话需要加上版本号例如hive-hadoop2
hive.metastore.uri需要与hive的metastore地址和端口对应。
一般配置在/etc/hive/conf/hive-site.xml中。

具体配置:

mkdir catalog
cd catalog
vi hive.properties

#输入配置
connector.name=hive-hadoop2
hive.metastore.uri=thrift://yy-t-bigdata2.niwodai.com:9083
hive.config.resources=/etc/hadoop/conf/core-site.xml, /etc/hadoop/conf/hdfs-site.xml
hive.allow-drop-table=true
hive.storage-format=ORC
hive.metastore-cache-ttl=1s
hive.metastore-refresh-interval=1s
hive.metastore-timeout=35m
hive.max-partitions-per-writers=1000

 配置完成,最终etc下:catalog  config.properties  jvm.config  log.properties  node.properties

3.6 启动运行presto

在安装目录的bin/launcher文件,就是启动脚本。Presto可以使用如下命令作为一个后台进程启动:

bin/launcher start

另外,也可以在前台运行, 日志和相关输出将会写入stdout/stderr

bin/launcher run

停止

bin/launcher stop 

 重启

bin/launcher restart

查看服务进程

bin/launcher status

查看进程

ps -aux|grep PrestoServer 或 jps

启动完之后,日志将会写在var/log目录下,该目录下有如下文件:

launcher.log: 这个日志文件由launcher创建,并且server的stdout和stderr都被重定向到了这个日志文件中。 这份日志文件中只会有很少的信息,包括:
在server日志系统初始化的时候产生的日志和JVM产生的诊断和测试信息。
server.log: 这个是Presto使用的主要日志文件。一般情况下,该文件中将会包括server初始化失败时产生的相关信息。这份文件会被自动轮转和压缩。
http-request.log: 这是HTTP请求的日志文件,包括server收到的每个HTTP请求信息,这份文件会被自动轮转和压缩。

3.7 连接hive测试验证

将一开始下载的包:presto-cli-0.238.2-executable.jar,重命名为presto

mv presto-cli-0.238.2-executable.jar presto

chmod +x presto

 使用beeline连接hive,show tables;

再进入presto cli,使用命令:

./presto --server http://yy-t-bigdata1.niwodai.com:9666 --catalog hive --schema default

show tables;

比较与hive查出来的是否一致。

四、集群配置

1.架构

192.168.0.141:coordinator调度节点
192.168.0.142:worker节点
192.168.0.143:worker节点
192.168.0.144:worker节点
192.168.0.145:worker节点
192.168.0.146:worker节点

2.传输(SCP)

scp -r /data/prosto user@remote_ip:/data

#如果data是root权限,先切换用户

sudo su
scp -r /data/prosto remote_ip:/data

#进入目标机器,切换presto权限
chown -R user:usergreoup presto

3.修改配置

3.1 修改node.properties

vi node.properties

#修改node.id
node.environment=test_bob
node.id=bigdata_test2
node.data-dir=/data/presto/presto-server-0.238.2/data

3.2修改config.properties

vi config.properties

#worker配置
coordinator=false
http-server.http.port=9666
query.max-memory=10GB
query.max-memory-per-node=1GB
discovery.uri=http://yy-t-bigdata1.niwodai.com:9666

4.启动

与单节点启动方式一样。

注意:先删除data下etc和plugin目录,这个是从第一个节点带过来的,不然启动会有冲突!

5.一键重启

在141机器上先配置免密:

然后写一个shell脚本,远程重启worker节点:

ssh 192.168.0.142 "ps -ef | grep presto-server  | grep -v grep | grep PrestoServer | awk '{print $2}' | xargs kill -9;/data/presto/presto-server-0.238.2/bin/launcher restart" &

五、资源组

1.何为资源组

Presto的资源组机制,是从资源分配的角度来控制集群的整体查询负载。Presto会在集群整体资源下开辟多个资源组,每一个提交的查询都会分配到一个特定的资源组执行。在特定资源组A开启一个新的查询B之前,会检查当前A的资源负载是否超过了集群给A分配的资源量;如果已经超过了,资源组机制会阻塞新到的查询B,使其处于排队状态甚至直接拒绝。

资源可以分成CPU,内存,带宽,磁盘等维度,Presto资源组主要定义了内存和CPU两个维度。

2.配置

2.1 resource-groups.properties

在Presto Coordinator节点安装目录etc下新建一个文件 resource-groups.properties,然后将resource-groups.config-file 指向资源组配置文件的路径,比如:

cd etc
vi resource-groups.properties

#输入配置
resource-groups.configuration-manager=file
resource-groups.config-file=etc/resource_groups.json

 2.2 resource_groups.json

2.2.1 资源组主要配置项
name(必须):特定资源组名称;
maxQueued(必须):排队任务的最大数量,当达到此阈值后,新的任务将被拒绝;
hardConcurrencyLimit(必须):任何时刻处于"RUNNING"状态的查询的最大数量;
softMemoryLimit(必须):这个资源组最大内存使用量,当达到此阈值后,新任务进入排队。可以指定为一个绝对值(如100GB),也可以指定对集群内存总量的百分比(如60%);
softCpuLimit(可选):一个周期里可以使用cpu的时间,hardCpuLimit也必须指定,在达到该阈值后,该资源组内占据最大CPU资源的查询的CPU资源会被减少;
hardCpuLimit(可选):一个周期里可以使用的cpu时间,在达到该阈值后,新的查询会进行排队而非直接执行;
schedulingPolicy(可选):指定查询从排队到运行状态的调度策略。
【这里解决用户问题2,参照不同的调度策略,可能会有不同的资源分配顺序】
主要有以下类型:
fair(default):当一个资源组下,有几个子资源组都同时有排队的查询,这些子资源组间按照定义的顺序,轮流获得资源,同一个子资源组的查询按照先来先执行的规则获取资源;
weighted_fair :采取这种策略的每一个资源组会配置一个属性schedulingWeight,每个子资源组会计算一个比值:
当前子资源组查询数量/schedulingWeight,比值越小的子资源组越先得到资源;
weighted:默认值为1,子资源组的schedulingWeight越大,越先得到资源;
query_priority:所有的子资源组都要配置为 query_priority ,排队的查询严格按照指定的query_priority大小顺序来进行获取资源。

2.2.2 资源组选择器
user(可选):匹配用户名;
source(可选):匹配连接源,如cli、jdbc、pyhive等;
queryType(可选):匹配任务类型;
clientTags(可选):tag列表,每个tag必须在用户提交任务的tag列表里;
group(必须):这些任务运行的组。
【这里解决用户问题3,可以对不同的查询类型queryType,比如EXPLAIN、INSERT、SELECT和DATA_DEFINITION等类型,匹配到不同的资源组,分配不同的资源,来执行查询】

具体配置:

vi resource_groups.json

{
  "rootGroups": [
    {
      "name": "global",
      "softMemoryLimit": "100%",
      "hardConcurrencyLimit": 15,
      "maxQueued": 100,
      "schedulingPolicy": "weighted",
      "subGroups": [
        {
          "name": "operation",
          "softMemoryLimit": "30%",
          "softCpuLimit": "10h",
          "hardCpuLimit": "10h",
          "hardConcurrencyLimit": 8,
          "maxQueued": 20,
          "schedulingWeight": 8,
          "runningTimeLimit": "30m",
          "queuedTimeLimit" : "10m"
        }
        {
          "name": "default",
          "softMemoryLimit": "30%",
          "softCpuLimit": "10h",
          "hardCpuLimit": "10h",
          "hardConcurrencyLimit": 15,
          "maxQueued": 20,
          "schedulingWeight": 2,
          "runningTimeLimit": "30m",
          "queuedTimeLimit" : "10m"
        }
      ]
    },
    {
      "name": "admin",
      "softMemoryLimit": "100%",
      "softCpuLimit": "8h",
      "hardCpuLimit": "8h",
      "runningTimeLimit": "60m",
      "hardConcurrencyLimit": 15,
      "maxQueued": 20,
      "schedulingPolicy": "fair"
     }
  ],
  "selectors": [
    {
      "source": "operation",
      "group": "global.operation"
    },
    {
      "source": "default",
      "group": "global.default"
    },
    {
      "user": "presto",
      "group": "global.default"
    }
   ],
  "cpuQuotaPeriod": "1m"
}



vi queue_config.json

{
  "queues": {
    "user.${USER}": {
      "maxConcurrent": 25,
      "maxQueued": 25
    },
    "datamart": {
      "maxConcurrent": 25,
      "maxQueued": 50,
      "softMemoryLimit": "50%",
      "softCpuLimit":"3h",
      "hardCpuLimit": "2h"
    },
    "admin": {
      "maxConcurrent": 10,
      "maxQueued": 35
    },
    "global": {
      "maxConcurrent": 3,
      "maxQueued": 5,
      "softMemoryLimit": "10%",
      "softCpuLimit":"45m",
      "hardCpuLimit": "35m"
    }
  },
  "rules": [
    {
      "user": "presto",
      "queues": ["admin"]
    },
    {
      "user": "datamart",
      "queues": ["datamart"]
    },
    {
       "user": "zhang",
       "queues" : ["global"]
    },
    {
        "user": "lili",
        "queues" : ["global"]
    }
  ]
}

六、参考

https://blog.youkuaiyun.com/zzq900503/article/details/79403949

https://zhuanlan.zhihu.com/p/99125164

### 如何安装 Presto 以下是关于如何安装 Presto详细说明: #### 安装步骤概述 1. **下载 Presto 二进制文件或源码** 需要从官方发布页面或者镜像站点下载最新的 Presto 版本。当前最新版本为 `0.278`[^1]。 2. **配置协调器和工作节点** - 协调器(Coordinator)负责接收查询请求并分配任务给各个工作节点(Worker)。 - 工作节点执行具体的查询操作并将结果返回给协调器。 - 编辑配置文件,指定节点角色、数据目录以及日志路径等参数[^3]。 3. **启动协调器和工作节点** 使用脚本分别启动协调器和服务端的工作节点实例。确保所有节点能够正常通信,并且网络环境稳定。 4. **设置连接器以接入目标数据源** 根据实际需求定义不同的 Connector 来对接各类外部系统比如 Hive, Mysql 等。例如对于 Hive 数据源,则需创建对应的 catalog 文件来描述其元信息存储位置及格式等内容[^4]。 5. **测试与验证** 利用 Presto 提供的命令行界面 (CLI),输入简单的 SQL 查询语句来进行功能性和性能方面的初步检验。如果一切顺利的话,应该可以看到预期的结果集展示出来。 ```bash # 启动Presto CLI 并连接至远程服务器 presto --server coordinator-host:port --catalog hive --schema default ``` --- ### 示例查询 假设我们已经成功部署了一个包含 Hive 和 MySQL 这两个不同类型的数据仓库作为 backend source 的 environment ,那么可以通过如下方式实现跨平台 join operation : ```sql SELECT h.id, m.name FROM hive.default.customers AS h INNER JOIN mysql.db.users as m ON h.user_id = m.id; ``` 此条指令将会把来自 Hadoop Distributed File System 上面存储结构化记录同关系型数据库内部存在的用户资料结合起来形成最终报表输出。 --- ### 注意事项 尽管 Presto 能够很好地支持复杂的大规模数据分析场景下的 ad-hoc querying task execution flow management etc., but it is not designed to replace traditional relational DBMS such as MYSQL or ORACLE nor support Online Transaction Processing workloads directly due to its architecture characteristics focused more on read-heavy operations rather than write-intensive ones.[^2] ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值