Trino

[Trino] 설치/구성/실행

비번변경 2023. 3. 2. 19:05

개요

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/

https://trino.io/docs/current/connector/jmx.html