Trino(PrestoDB) 설치

Trino(PrestoDB)는 분산 SQL 쿼리 엔진으로, 하나 이상의 혼성 데이터 소스에 분산된 대규모 데이터 세트를 쿼리하기 위해 설계된 오픈 소스 소프트웨어이다. Trino는 Hive 및 Iceberg 테이블 형식을 사용하여 HDFS, AWS S3, Google Cloud Storage 또는 Azure Blob Storage 같은 다양한 스토리지 시스템에 존재하는 ORC 또는 Parquet 와 같은 개방형 열 지향 데이터 파일 형식을 포함하는 데이터레이크를 쿼리할 수 있다. 또한 Trino는 MySQL, PostgreSQL, Cassandra, Kafka, MongoDB, 그리고 Elasticsearch 와 같은 다양한 데이터 소스의 테이블을 쿼리하는 페더레이션 쿼리를 실행할 수 있다. Trino는 Apache 라이선스 에 따라 배포된다.

AWS의 Athena가 Presto 기반, NHN cloud의 DataQuery의 경우 Trino 기반이다.

 

Trino 바이너리 다운로드 및 설치, 기본 설정

  • RPM, DEB 등 패키지 설치가 아닌 바이너리 다운로드 및 구동 기준 변수 설정 등.

 

Trino 구동을 위한 설정, (LDAP 인증, TLS 적용 설정)

  • LDAP을 통한 인증 설정이 된 Trino 클러스터 설정.
  • 인증 기능을 활성화 하기 위해서는 TLS설정이 필요하므로, TLS 설정을 포함한다.
    자체 서명 인증서 생성과 관련된 내용은 “사설 인증서 생성” 에서 확인할 수 있다.

 

Trino FileDB 기반 인증 설정

  • LDAP이 아닌 FileDB를 통한 인증 설정.

 

Trino Data Catalog 설정

  • Trino를 통해 접근할 타겟 데이터 베이스 카탈로그 설정.
  • Iceberg 활용을 위한 메타스토어 등록 등.
  • HDFS(Hadoop Distributed File system), 오브젝트 스토리지(minio) 등.

minio object storage 구축

MinIO는 GNU Affero General Public License v3.0에 따라 출시 된 고성능 개체 스토리지이며 Amazon S3 클라우드 스토리지 서비스와 API와 완벽하게 호환된다.

자세한 정보는 minio 홈페이지에서 확인할 수 있다.

설치
yum 등을 이용해서 설치도 가능하지만 quick-guide 페이지를 참조해 바이너리를 다운 받아 구동해본다.

haedong@haedong:~:]$ wget --no-check-certificate https://dl.min.io/server/minio/release/linux-amd64/minio
--2021-08-18 16:10:33--  https://dl.min.io/server/minio/release/linux-amd64/minio
...중략...
Proxy request sent, awaiting response... 200 OK
Length: 91971584 (88M) [application/octet-stream]
Saving to: ‘minio’
100%[==========================================================================================>] 91,971,584  17.4MB/s   in 5.3s
2021-08-18 16:10:39 (16.6 MB/s) - ‘minio’ saved [91971584/91971584]

구동

구동이 먼저 나온 이유는, 배포되는 minio 파일이 바로 실행파일이기 때문이다. 기본 옵션 플래그만 붙여서 실행하면 싱글노드 구동은 즉시 가능하다. 데이터가 저장될 디렉토리를 생성하고 서비스를 실행해보자. 딱히 설정파일 등을 만들 필요 없이 명령 한줄로 실행된다.

haedong@haedong:~:]$ mkdir data
haedong@haedong:~:]$ chmod 700 minio
#755 등을 줘도 무방하다.
haedong@haedong:~:]$ ./minio server --address :9000 --console-address :9090 /home/haedong/data
API: http://192.168.192.168:9000  http://127.0.0.1:9000
RootUser: minioadmin
RootPass: minioadmin

Console: http://192.168.192.168:9090 http://127.0.0.1:9090
RootUser: minioadmin
RootPass: minioadmin

Command-line: https://docs.min.io/docs/minio-client-quickstart-guide
   $ mc alias set myminio http://172.17.172.110:9000 minioadmin minioadmin

Documentation: https://docs.min.io
WARNING: Detected default credentials 'minioadmin:minioadmin', we recommend that you change these values with 'MINIO_ROOT_USER' and 'MINIO_ROOT_PASSWORD' environment variables

갤러리 추가

표준 출력으로 출력된 RootUser 는 username, RootPass는 password로 하여 서비스 콘솔에 접속할 수 있다. 로그인 이후 접속을 위한 endpoint access key를 생성하거나 Bucket을 생성하고 웹 UI를 통해 데이터를 업로드할 수 있다.

멀티 노드 구성
싱글노드와 달리 몇가지 정보를 추가해 주는 것이 관리에 용이하다.
minio 디렉토리를 생성하고 관리를 위한 정보들을 추가한 구동 스크립트를 생성하자.
vi ~/minio/start.sh

#!/bin/bash

MINIO_HOME=$HOME/minio
MINIO_BIN_DIR=$MINIO_HOME/bin
MINIO_DATA_DIR=$MINIO_HOME/data
MINIO_LOG_DIR=$MINIO_HOME/logs
export MINIO_ROOT_USER=haedonggang
export MINIO_ROOT_PASSWORD=haedonggang
LOG_FILE=$MINIO_LOG_DIR/minio.log
# 꼭 위와 같은 변수를 사용할 필요는 없지만 변수들을 이용해 설정을 해 두면 관리가 용이하다.

# host01 부터 host04까지 4개의 노드를 활용하는 경우
nohup $MINIO_BIN_DIR/minio server --address :9000 --console-address :9090 http://host01$MINIO_DATA_DIR http://host02$MINIO_DATA_DIR http://host03$MINIO_DATA_DIR http://host04$MINIO_DATA_DIR >> $LOG_FILE &


MINIO_PID=$!
if [ ! -z $MINIO_PID ] ; then
echo "$MINIO_PID" > minio.pid
fi

이후 각 노드에서 start.sh 스크립트를 이용해 서비스를 구동하면 된다. 딱히 마스터의 개념은 없으므로 각각 노드에서 스크립트를 한 번씩 실행하자.

이후 싱글노드 구성에서와 같이 9090포트를 이용해 접속하면 된다. 다만 노드가 4개이므로 어느 노드에 접속해도 동일한 화면을 확인할 수 있다.