【大数据】通过 docker-compose 快速部署 Presto(Trino)保姆级教程

news2025/1/19 23:28:04

文章目录

    • 一、概述
    • 二、前期准备
      • 1)部署 docker
      • 2)部署 docker-compose
    • 三、创建网络
    • 四、Trino 编排部署
      • 1)下载 trino
      • 2)配置
        • 1、coordinator 配置
        • 2、worker 配置
      • 3)启动脚本 bootstrap.sh
      • 4)构建镜像 Dockerfile
      • 5)编排 docker-compose.yaml
      • 6)开始部署
    • 五、简单测试验证
      • 1)mysql 数据源
      • 2)hive 数据源

一、概述

Presto是一个快速的分布式查询引擎,最初由Facebook开发,目前归属于 Presto Software Foundation(由 Facebook、Teradata 和其他公司共同支持)。Presto的核心特点是支持远程数据访问,可以查询包括Hadoop、Cassandra、Relational databases、NoSQL databases在内的多个数据源。Presto支持标准的SQL语法,同时提供了一些扩展功能,如分布式查询、动态分区、自定义聚合和分析函数等。

但是Presto目前有两大分支:PrestoDB(背靠Facebook)PrestoSQL现在改名为Trino(Presto的创始团队),虽然PrestoDB背靠Facebook,但是社区活跃度和使用群体还是远不如Trino。所以这里以Trino为主展开讲解。

关于更多的Presto介绍可以参考我这篇文章:大数据Hadoop之——基于内存型SQL查询引擎Presto(Presto-Trino环境部署)

在这里插入图片描述

二、前期准备

1)部署 docker

# 安装yum-config-manager配置工具
yum -y install yum-utils

# 建议使用阿里云yum源:(推荐)
#yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

# 安装docker-ce版本
yum install -y docker-ce
# 启动并开机启动
systemctl enable --now docker
docker --version

2)部署 docker-compose

curl -SL https://github.com/docker/compose/releases/download/v2.16.0/docker-compose-linux-x86_64 -o /usr/local/bin/docker-compose

chmod +x /usr/local/bin/docker-compose
docker-compose --version

三、创建网络

# 创建,注意不能使用hadoop_network,要不然启动hs2服务的时候会有问题!!!
docker network create hadoop-network

# 查看
docker network ls

四、Trino 编排部署

1)下载 trino

官方下载地址:https://trino.io/download.html

# trino server
wget https://repo1.maven.org/maven2/io/trino/trino-server/416/trino-server-416.tar.gz

# trino Command line client
wget https://repo1.maven.org/maven2/io/trino/trino-cli/416/trino-cli-416-executable.jar

# jdk
wget https://cdn.azul.com/zulu/bin/zulu20.30.11-ca-jdk20.0.1-linux_x64.tar.gz

2)配置

首先创建etc和data目录,后面配置文件需要用到

mkdir -p etc/{coordinator,worker} etc/catalog/ images

1、coordinator 配置

  • node.properties
cat << EOF > etc/coordinator/node.properties
# 环境的名字。集群中所有的Trino节点必须具有相同的环境名称。
node.environment=test
# 此Trino安装的唯一标识符。这对于每个节点都必须是唯一的。
node.id=trino-coordinator
# 数据目录的位置(文件系统路径)。Trino在这里存储日志和其他数据。
node.data-dir=/opt/apache/trino/data
EOF
  • jvm.config
cat << EOF > etc/coordinator/jvm.config
-server
-Xmx2G
-XX:InitialRAMPercentage=80
-XX:MaxRAMPercentage=80
-XX:G1HeapRegionSize=32M
-XX:+ExplicitGCInvokesConcurrent
-XX:+ExitOnOutOfMemoryError
-XX:+HeapDumpOnOutOfMemoryError
-XX:-OmitStackTraceInFastThrow
-XX:ReservedCodeCacheSize=512M
-XX:PerMethodRecompilationCutoff=10000
-XX:PerBytecodeRecompilationCutoff=10000
-Djdk.attach.allowAttachSelf=true
-Djdk.nio.maxCachedBufferSize=2000000
-XX:+UnlockDiagnosticVMOptions
-XX:+UseAESCTRIntrinsics
# Disable Preventive GC for performance reasons (JDK-8293861)
-XX:-G1UsePreventiveGC
EOF
  • config.properties
cat << EOF > etc/coordinator/config.properties
# 设置该节点为coordinator节点
coordinator=true
# 允许在协调器上调度工作,也就是coordinator节点又充当worker节点用
node-scheduler.include-coordinator=false
# 指定HTTP服务器的端口。Trino使用HTTP进行内部和外部web的所有通信。
http-server.http.port=8080
# 查询可以使用的最大分布式内存。【注意】不能配置超过jvm配置的最大堆栈内存大小
query.max-memory=1GB
# 查询可以在任何一台机器上使用的最大用户内存。【注意】也是不能配置超过jvm配置的最大堆栈内存大小
query.max-memory-per-node=1GB
# hadoop-node1也可以是IP
discovery.uri=http://localhost:8080
EOF
  • log.properties
cat << EOF > etc/coordinator/log.properties
# 设置日志级别,有四个级别:DEBUG, INFO, WARN and ERROR
io.trino=INFO
EOF

2、worker 配置

  • node.properties
cat << EOF > etc/worker/node.properties
# 环境的名字。集群中所有的Trino节点必须具有相同的环境名称。
node.environment=test
# 此Trino安装的唯一标识符。这对于每个节点都必须是唯一的。
# node.id=trino-worker
# 数据目录的位置(文件系统路径)。Trino在这里存储日志和其他数据。
node.data-dir=/opt/apache/trino/data
EOF
  • jvm.config
cat << EOF > etc/worker/jvm.config
-server
-Xmx2G
-XX:InitialRAMPercentage=80
-XX:MaxRAMPercentage=80
-XX:G1HeapRegionSize=32M
-XX:+ExplicitGCInvokesConcurrent
-XX:+ExitOnOutOfMemoryError
-XX:+HeapDumpOnOutOfMemoryError
-XX:-OmitStackTraceInFastThrow
-XX:ReservedCodeCacheSize=512M
-XX:PerMethodRecompilationCutoff=10000
-XX:PerBytecodeRecompilationCutoff=10000
-Djdk.attach.allowAttachSelf=true
-Djdk.nio.maxCachedBufferSize=2000000
-XX:+UnlockDiagnosticVMOptions
-XX:+UseAESCTRIntrinsics
# Disable Preventive GC for performance reasons (JDK-8293861)
-XX:-G1UsePreventiveGC
EOF
  • config.properties
cat << EOF > etc/worker/config.properties
# 设置该节点为worker节点
coordinator=false
# 指定HTTP服务器的端口。Trino使用HTTP进行内部和外部web的所有通信。
http-server.http.port=8080
# 查询可以使用的最大分布式内存。【注意】不能配置超过jvm配置的最大堆栈内存大小
query.max-memory=1GB
# 查询可以在任何一台机器上使用的最大用户内存。【注意】也是不能配置超过jvm配置的最大堆栈内存大小
query.max-memory-per-node=1GB
# hadoop-node1也可以是IP
discovery.uri=http://trino-coordinator:8080
EOF
  • log.properties
cat << EOF > etc/worker/log.properties
# 设置日志级别,有四个级别:DEBUG, INFO, WARN and ERROR
io.trino=INFO
EOF

3)启动脚本 bootstrap.sh

#!/usr/bin/env sh

wait_for() {
    echo Waiting for $1 to listen on $2...
    while ! nc -z $1 $2; do echo waiting...; sleep 1s; done
}


start_trino() {

   node_type=$1

   if [ "$node_type" = "worker" ];then
      wait_for trino-coordinator 8080
   fi

   ${TRINO_HOME}/bin/launcher run --verbose

}

case $1 in
        trino-coordinator)
                start_trino coordinator
                ;;
        trino-worker)
                start_trino worker
                ;;
        *)
                echo "请输入正确的服务启动命令~"
        ;;
esac

4)构建镜像 Dockerfile

FROM registry.cn-hangzhou.aliyuncs.com/bigdata_cloudnative/centos:7.7.1908

RUN rm -f /etc/localtime && ln -sv /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo "Asia/Shanghai" > /etc/timezone

RUN export LANG=zh_CN.UTF-8

# 创建用户和用户组,跟yaml编排里的user: 10000:10000
RUN groupadd --system --gid=10000 hadoop && useradd --system --home-dir /home/hadoop --uid=10000 --gid=hadoop hadoop -m

# 安装sudo
RUN yum -y install sudo ; chmod 640 /etc/sudoers

# 给hadoop添加sudo权限
RUN echo "hadoop ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers

RUN yum -y install install net-tools telnet wget nc

RUN mkdir /opt/apache/

# 添加配置 JDK
ADD zulu20.30.11-ca-jdk20.0.1-linux_x64.tar.gz /opt/apache/
ENV JAVA_HOME /opt/apache/zulu20.30.11-ca-jdk20.0.1-linux_x64
ENV PATH $JAVA_HOME/bin:$PATH

# 添加配置 trino server
ENV TRINO_VERSION 416
ADD trino-server-${TRINO_VERSION}.tar.gz /opt/apache/
ENV TRINO_HOME /opt/apache/trino
RUN ln -s /opt/apache/trino-server-${TRINO_VERSION} $TRINO_HOME

# 创建配置目录和数据源catalog目录
RUN mkdir -p ${TRINO_HOME}/etc/catalog

# 添加配置 trino cli
COPY trino-cli-416-executable.jar $TRINO_HOME/bin/trino-cli

# copy bootstrap.sh
COPY bootstrap.sh /opt/apache/
RUN chmod +x /opt/apache/bootstrap.sh ${TRINO_HOME}/bin/trino-cli

RUN chown -R hadoop:hadoop /opt/apache

WORKDIR $TRINO_HOME

开始构建镜像

docker build -t registry.cn-hangzhou.aliyuncs.com/bigdata_cloudnative/trino:416 . --no-cache

# 为了方便小伙伴下载即可使用,我这里将镜像文件推送到阿里云的镜像仓库
docker push registry.cn-hangzhou.aliyuncs.com/bigdata_cloudnative/trino:416

### 参数解释
# -t:指定镜像名称
# . :当前目录Dockerfile
# -f:指定Dockerfile路径
#  --no-cache:不缓存

5)编排 docker-compose.yaml

version: '3'
services:
  trino-coordinator:
    image: registry.cn-hangzhou.aliyuncs.com/bigdata_cloudnative/trino:416
    user: "hadoop:hadoop"
    container_name: trino-coordinator
    hostname: trino-coordinator
    restart: always
    privileged: true
    env_file:
      - .env
    volumes:
      - ./etc/coordinator/config.properties:${TRINO_HOME}/etc/config.properties
      - ./etc/coordinator/jvm.config:${TRINO_HOME}/etc/jvm.config
      - ./etc/coordinator/log.properties:${TRINO_HOME}/etc/log.properties
      - ./etc/coordinator/node.properties:${TRINO_HOME}/etc/node.properties
      - ./etc/catalog/:${TRINO_HOME}/etc/catalog/
    ports:
      - "30080:${TRINO_SERVER_PORT}"
    command: ["sh","-c","/opt/apache/bootstrap.sh trino-coordinator"]
    networks:
      - hadoop-network
    healthcheck:
      test: ["CMD-SHELL", "curl --fail http://localhost:${TRINO_SERVER_PORT}/v1/info || exit 1"]
      interval: 10s
      timeout: 20s
      retries: 3
  trino-worker:
    image: registry.cn-hangzhou.aliyuncs.com/bigdata_cloudnative/trino:416
    user: "hadoop:hadoop"
    restart: always
    privileged: true
    deploy:
      replicas: 3
    env_file:
      - .env
    volumes:
      - ./etc/worker/config.properties:${TRINO_HOME}/etc/config.properties
      - ./etc/worker/jvm.config:${TRINO_HOME}/etc/jvm.config
      - ./etc/worker/log.properties:${TRINO_HOME}/etc/log.properties
      - ./etc/worker/node.properties:${TRINO_HOME}/etc/node.properties
      - ./etc/catalog/:${TRINO_HOME}/etc/catalog/
    expose:
      - "${TRINO_SERVER_PORT}"
    command: ["sh","-c","/opt/apache/bootstrap.sh trino-worker"]
    networks:
      - hadoop-network
    healthcheck:
      test: ["CMD-SHELL", "curl --fail http://localhost:${TRINO_SERVER_PORT}/v1/info || exit 1"]
      interval: 10s
      timeout: 10s
      retries: 3

# 连接外部网络
networks:
  hadoop-network:
    external: true

.env 文件内容如下:

cat << EOF > .env
TRINO_SERVER_PORT=8080
HADOOP_HDFS_DN_PORT=/opt/apache/trino
EOF

6)开始部署

docker-compose -f docker-compose.yaml up -d

# 查看
docker-compose -f docker-compose.yaml ps

在这里插入图片描述
web 地址:http://ip:30080

在这里插入图片描述

五、简单测试验证

hive和mysql快熟部署文档可参考我这篇文章:通过 docker-compose 快速部署 Hive 详细教程

1)mysql 数据源

添加 mysql 数据源,在宿主机上配置即可,因已经挂载了

cat << EOF > ./etc/catalog/mysql.properties
connector.name=mysql
connection-url=jdbc:mysql://mysql:3306
connection-user=root
connection-password=123456
EOF

重启 trino

docker-compose -f docker-compose.yaml restart

测试验证

# 登录容器
docker exec -it trino-coordinator bash
${TRINO_HOME}/bin/trino-cli --server http://trino-coordinator:8080 --user=hadoop 

# 查看数据源
show catalogs;
# 查看mysql库
show schemas from mysql;
# 查看表
show tables from mysql.hive_metastore;
# 查看表数据
select * from mysql.hive_metastore.version;

在这里插入图片描述

2)hive 数据源

添加 hive 数据源,在宿主机上配置即可,因已经挂载了

cat << EOF > etc/catalog/hive.properties
connector.name=hive
hive.metastore.uri=thrift://hive-metastore:9083
EOF

重启 trino

docker-compose -f docker-compose.yaml restart

测试验证

# 登录容器
docker exec -it trino-coordinator bash
${TRINO_HOME}/bin/trino-cli --server http://trino-coordinator:8080 --user=hadoop 

# 查看数据源
show catalogs;
# 查看mysql库
show schemas from hive;
# 查看表
show tables from hive.default;
# 查看表数据
select * from hive.default.student;

在这里插入图片描述
docker-compose 快速部署 Presto(Trino)保姆级教程就先到这里了,有任何疑问可关注我的公众号【大数据与云原生技术分享】加群交流或私信咨询问题,如这篇文章对你有所帮助,麻烦帮忙一键三连(点赞、转发、加关注)哦~~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/523222.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

多尺度深度特征(下):多尺度特征学习才是目标检测精髓(论文免费下载)...

计算机视觉研究院专栏 作者&#xff1a;Edison_G 深度特征学习方案将重点从具有细节的具体特征转移到具有语义信息的抽象特征。它通过构建多尺度深度特征学习网络 (MDFN) 不仅考虑单个对象和局部上下文&#xff0c;还考虑它们之间的关系。 公众号ID&#xff5c;ComputerVisionG…

MySQL- 存储引擎

MySQL体系结构 连接层 最上层是一些客户端和链接服务&#xff0c;包含本地sock 通信和大多数基于客户端/服务端工具实现的类似于 TCP/IP的通信。主要完成一些类似于连接处理、授权认证、及相关的安全方案。在该层上引入了线程 池的概念&#xff0c;为通过认证安全接入的客户端…

通过自动装箱和拆箱解释所定义基础数据类型和其对应封装类的区别

文章目录 前言一、拆装箱的实质二、拓展1.数值超过128的Integer装箱2.Java内存分配 前言 在刷软中的时候涉及到了值传递和地址传递传参的区别&#xff0c;其中提到不管是将基础数据类型的变量传值给对象数据类型的变量还是反过来都属于值传递&#xff0c;究其原因就是期间发生了…

【本地模式】第一个Mapreduce程序-wordcount

【本地模式】&#xff1a;也就是在windows环境下通过hadoop-client相关jar包进行开发的&#xff0c;我们只需要通过本地自己写好MapReduce程序即可在本地运行。 一个Maprduce程序主要包括三部分&#xff1a;Mapper类、Reducer类、执行类。 map阶段&#xff1a;将每一行单词提…

XShell远程连接

xshell 是一个强大的安全终端模拟软件&#xff0c;它支持SSH1,SSH2以及microsoft windows 平台的TELNET协议。xshell通过互联网到远程主机的安全连接。 xshell可以在windows界面下来访问远程终端不同系统下的服务器&#xff0c;从而比较好的达到远程控制终端的目的。 步骤一 …

MySQL- 索引

索引是帮助MySQL高效获取数据的数据结构(有序)。在数据之外, 数据库系统还维护着满足特定查找算法的数据结构, 这些数据结构以某种方式引用数据, 这样就可以在这些数据结构上实现高级查找算法, 这种数据结构就是索引。 索引结构 MySQL的索引是在存储层实现的, 不同的存储引擎有…

网友总结:面试超过一个小时,通过概率更低;面试时长在半小时以内,通过概率更高!...

面试时长跟通过概率有关系吗&#xff1f; 一位网友分享了自己的求职感想&#xff1a; 面试过程越长&#xff0c;差不多一个小时或者超过一个小时&#xff0c;问得越详细&#xff0c;通过的可能性越低。因为问得越细&#xff0c;说明这个公司越挑&#xff0c;需要候选人匹配度越…

【C++ 入坑指南】(05)数据类型

文章目录 一、整型sizeof 关键字 二、实型&#xff08;浮点型&#xff09;三、字符型四、字符串型4.1 C 风格字符串4.2 C 引入的 string 类类型 五、布尔类型&#xff08;bool&#xff09;六、类型转换6.1 静态转换&#xff08;Static Cast&#xff09;6.2 动态转换&#xff08…

软考A计划-真题-分类精讲汇总-第六章(软件工程)

点击跳转专栏>Unity3D特效百例点击跳转专栏>案例项目实战源码点击跳转专栏>游戏脚本-辅助自动化点击跳转专栏>Android控件全解手册点击跳转专栏>Scratch编程案例 &#x1f449;关于作者 专注于Android/Unity和各种游戏开发技巧&#xff0c;以及各种资源分享&am…

阿里云服务器安装宝塔Linux面板教程图解

使用阿里云服务器安装宝塔面板教程&#xff0c;阿里云服务器网以CentOS操作系统为例&#xff0c;安装宝塔Linux面板&#xff0c;先远程连接到云服务器&#xff0c;然后执行宝塔面板安装命令&#xff0c;系统会自动安装宝塔面板&#xff0c;安装完成后会返回面板地址、账号和密码…

【mongoDB】mongodb权限验证 || mongodb重启 || mongodb常用命令

mongodb版本号 6.0 前言 mongoDB刚开始无需密码登录mongoDB有3默认数据库&#xff0c;分别为&#xff1a; admin 超级用户&#xff0c;能对所有数据库操作&#xff0c;执行管理员命令config 分片集群配置的数据库local 分片集群锁信息的集合test 这个数据库一般是隐式创建的&…

新书出版了(文末送书)

大家好&#xff0c;我是麦哥。 最近一位好友的新书出版了&#xff0c;由衷的替他开心&#xff0c;赶紧来支持一波。 新书长这样 这本书的作者是前中兴高级工程师&#xff0c;某知名培训机构的教学总监&#xff0c;现于某研究所担任重要的研发工作&#xff0c;我喜欢叫他彭老师。…

路径规划算法:基于蚁狮优化的路径规划算法- 附代码

路径规划算法&#xff1a;基于蚁狮优化的路径规划算法- 附代码 文章目录 路径规划算法&#xff1a;基于蚁狮优化的路径规划算法- 附代码1.算法原理1.1 环境设定1.2 约束条件1.3 适应度函数 2.算法结果3.MATLAB代码4.参考文献 摘要&#xff1a;本文主要介绍利用智能优化算法蚁狮…

路径规划算法:基于蝗虫优化的路径规划算法- 附代码

路径规划算法&#xff1a;基于蝗虫优化的路径规划算法- 附代码 文章目录 路径规划算法&#xff1a;基于蝗虫优化的路径规划算法- 附代码1.算法原理1.1 环境设定1.2 约束条件1.3 适应度函数 2.算法结果3.MATLAB代码4.参考文献 摘要&#xff1a;本文主要介绍利用智能优化算法蝗虫…

Python爬虫之美丽的汤——BeautifulSoup

本文概要 本篇文章主要介绍利用Python爬虫之美丽的汤——BeautifulSoup&#xff0c;适合练习爬虫基础同学&#xff0c;文中描述和代码示例很详细&#xff0c;干货满满&#xff0c;感兴趣的小伙伴快来一起学习吧&#xff01; 是不是以为今天要教大家怎么做饭&#xff1f;确实&…

MATLAB图像处理:图像分割、特征提取和目标识别的应用和优化

MATLAB图像处理&#xff1a;图像分割、特征提取和目标识别的应用和优化 作为一种常用的图像处理工具&#xff0c;MATLAB在图像分割、特征提取和目标识别等方面具有广泛的应用。本文将详细介绍这三个方面的应用和优化。 第一章&#xff1a;图像分割 图像分割是将一幅图像划分成…

阿里云服务器安装宝塔面板教程图解(超详细)

使用阿里云服务器安装宝塔面板教程&#xff0c;阿里云服务器网以CentOS操作系统为例&#xff0c;安装宝塔Linux面板&#xff0c;先远程连接到云服务器&#xff0c;然后执行宝塔面板安装命令&#xff0c;系统会自动安装宝塔面板&#xff0c;安装完成后会返回面板地址、账号和密码…

Django如何把SQLite数据库转换为Mysql数据库

大部分新手刚学Django开发的时候默认用的都是SQLite数据库&#xff0c;上线部署的时候&#xff0c;大多用的却是Mysql。那么我们应该如何把数据库从SQLite迁移转换成Mysql呢&#xff1f; 之前我们默认使用的是SQLite数据库&#xff0c;我们开发完成之后&#xff0c;里面有许多数…

『python爬虫』20. 用协程爬取一本小说(保姆级图文)

目录 1. 分析目标网站1.1 寻找所有章节信息1.2 寻找章节内容 2. 爬虫思路获取得到的信息首先要同步协程获取所有章节标题和cid写入异步任务然后根据章节标题和cid获取章节内容 3. 完整实现代码总结 欢迎关注 『python爬虫』 专栏&#xff0c;持续更新中 欢迎关注 『python爬虫』…

linux命令文本命令之~~~ sort ~~ tr ~~cut ~~ uniq ~~split~~~paste~~eval

目录 一. sort命令二. uniq 命令三. tr命令四. cut命令五 . split六. paste 合并文件内容的列七. eval命令 一. sort命令 以行为单位对文件内容进行排序&#xff0c;也将他根据不同的数据类型来排序 比较原则是从首字符向后&#xff0c;依次按ASCII码进行比较&#xff0c;最后…