개요
2023.03.01 - Trino 란? 에서 Trino에 대해서 간단히 소개해봤는데, 이 글에서는 Trino를 설치하고 실행하는 방법을 정리한다. https://trino.io/docs/current/installation/deployment.html를 참고하여 host에 직접 설치해 보도록 한다. 2023년 2월 19일 기준 최신 버전으로 보이는 trino-server-407을 설치한다.
설치 환경
- AWS EC2
- Ubuntu 20.04.5 LTS
- Python 3.8.10
설치
Trino는 공식 문서에서 압축 파일을 다운로드하는 방식으로 설치할 수 있다.
1. ulimit 설정
Trino는 아래와 같은 리소스 제한 설정이 필요하다. 값의 trino는 Trino를 실행하는 사용자명을 기재한다. 이 글에서는 trino user가 Trino를 실행하는 것으로 가정한다.
vi /etc/security/limits.conf
# 값
trino soft nofile 131072
trino hard nofile 131072
2. Java 설치
최소 Java 17.03 이상의 Java 17이 필요하다. Java 8 또는 Java 11에서는 동작하지 않으며, Java 18이나 Java 19는 지원하지 않는다.
apt install openjdk-17-jdk
3. Python 설치
launcher 스크립트 실행을 위해 2.6, 2.7 또는 Python 3이 필요하다. 설치되어 있지 않으면 설치하도록 한다. 이 글에서는 따로 설치하지 않았다.
apt install python3
4. Trino 압축파일 다운로드 및 압축해제
공식 홈페이지에서 trino-server-407을 다운로드하고 압축을 해제한다.
wget https://repo1.maven.org/maven2/io/trino/trino-server/407/trino-server-407.tar.gz
tar -xzvf trino-server-407.tar.gz
필요시 적당한 설치 경로로 옮긴다. 이 글에서는 /usr/local/trino에 설치하려고 한다.
mv trino-server-407 /usr/local/trino
Trino를 실행시킬 사용자가 설치 경로에 접근할 수 있도록 디렉터리 소유자를 변경한다.
chown trino:trino /usr/local/trino
Trino 구성
Trino 설치 경로 아래 etc 디렉터리를 생성하여 다음과 같은 구성 설정을 해야 한다.
1. 설치 경로에 etc 디렉터리 생성
cd /usr/local/trino/
mkdir etc
2. etc/node.properties 작성
컴퓨터에 설치된 Trino 인스턴스에 해당하는 node를 구성한다.
vi etc/node.properties
# 값
node.environment=production # 환경 이름
node.id=ffffffff-ffff-ffff-ffff-ffffffffffff # 고유식별자. 모든 노드에 대해 고유해야 함
node.data-dir=/var/trino/data # 데이터 디렉터리. 로그 및 기타 데이터 저장
3. etc/jvm.config 작성
JVM을 시작할 때 사용할 명령줄 옵션을 설정한다. 서버 스펙에 맞게 조정이 필요하다. 이 글의 경우, 테스트 서버가 2GB 메모리이기 때문에 Xmx16G를 Xmx1G로 변경했다.
vi etc/jvm.config
# 값
-server
-Xmx16G
-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
4. etc/config.properties
Trino 클러스터 내 서버 구성을 설정한다. 클러스터는 하나의 coordinator을 가져야 하며, 여러 개의 worker를 가질 수 있다. 이 글에서는 coordinator와 worker가 같은 시스템에서 동작하도록 구성한다.
vi etc/config.properties
# coordinator/worker를 단일 시스템으로 설정하는 경우
coordinator=true # Trino 인스턴스가 coordinator로 작동하도록 허용
node-scheduler.include-coordinator=true # coordinator에서 작업 스케쥴링 허용. worker로도 사용
http-server.http.port=8080 # HTTP 서버 포트
discovery.uri=http://localhost:8080 # node 검색 서비스 URI
Coordinator와 Worker를 각각 구성할 때는 아래의 설정을 참고한다.
Coordinator 구성
coordinator=true
node-scheduler.include-coordinator=false
http-server.http.port=8080
discovery.uri=http://example.net:8080
Worker 구성
coordinator=false
http-server.http.port=8080
discovery.uri=http://example.net:8080
5. etc/log.properties
출력할 로그 레벨을 설정한다.
vi etc/log.properties
# 값
io.trino=INFO
6. etc/catalog
Trino는 Calalog에 마운트된 Connector를 이용해 데이터에 접근하고, Connector는 Catalog 내 스키마와 테이블을 제공한다. 이 글에서는 예시로 Trino 클러스터의 모든 노드에서 JMX(Java Management Extensions) 정보를 쿼리하는 기능을 제공하는 JMX 커넥터를 설정해본다.
Catalog는 etc/catalog 디렉터리에 .properties 파일을 작성하여 설정한다.
vi etc/catalog/jmx.properties
# 값
connector.name=jmx
Trino 실행
설치 시 제공되는 bin/launcher 스크립트를 이용해 Trino를 실행시킬 수 있다.
# 포그라운드 실행
bin/launcher run
# 데몬으로 실행
bin/launcher start
Trino 중지
중지 명령은 다음과 같다.
bin/launcher stop
참고 문서
https://janakiev.com/blog/presto-cluster/
https://blogs.ashrithgn.com/installing-trino-presto-in-ubuntu-20-04-lts/