플랫폼을 운영하면서 실제로 플랫폼 환경을 구축해보고 싶어 쿠버네티스 상에서 데이터 파이프라인을 구축하려고 합니다.
[GKE] Trino를 사용하여 MinIO에 저장된 데이터 쿼리하기(1) - Hive Metastore MySQL로 구성
[GKE] Trino를 사용하여 MinIO에 저장된 데이터 쿼리하기(2) - Hive Metastore 배포
[GKE] Trino를 사용하여 MinIO에 저장된 데이터 쿼리하기(3) - Trino 설치 및 연동
Trino와 MinIO 설정
MinIO 설정
MinIO 클라이언트 초기 설정
- MinIO 클라이언트(mc)를 사용해 MinIO 서비스에 접속합니다.
kubectl port-forward pod/minio 9000 9090 -n minio-dev
./mc alias set k8s-minio-dev http://127.0.0.1:9000 minioadmin minioadmin
./mc ls k8s-minio-dev/trino
trino 버킷에 있는 nyc_data.csv 파일을 trino에서 읽어드리려고 합니다.
MinIO 네트워크 정책 설정
- MinIO 서비스가 Trino 서비스에 접근할 수 있도록 네트워크 정책을 설정합니다. 즉 minio-dev 네임스페이스의 MinIO 서비스가 hive 네임스페이스의 Trino 서비스에 접근할 수 있도록 하는 네트워크 정책입니다.(minio-to-trino-networkpolicy.yaml)
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: allow-minio-to-trino
namespace: minio-dev
spec:
podSelector:
matchLabels:
app: minio
policyTypes:
- Ingress
- Egress
ingress:
- from:
- namespaceSelector:
matchLabels:
name: hive
egress:
- to:
- namespaceSelector:
matchLabels:
name: hive
네트워크 정책 적용
- 위에서 작성한 네트워크 정책 파일을 적용합니다.
kubectl apply -f minio-to-trino-networkpolicy.yaml
네트워크 정책 확인
- 새로운 네트워크 정책이 정상적으로 적용되었는지 확인합니다.
kubectl get networkpolicies --namespace minio-dev
NAME POD-SELECTOR AGE
allow-minio-to-trino app=minio 23s
- minio-dev 네임스페이스의 MinIO 서비스와 hive 네임스페이스의 Trino 서비스 간의 네트워크 통신이 가능해집니다.
Trino 설치 및 설정
Trino Helm 차트 리포지토리를 추가합니다.
helm repo add trino https://trinodb.github.io/charts
Trino 차트를 다운로드합니다.
mkdir trino-minio
helm repo add trino https://trinodb.github.io/charts
helm pull trino/trino
tar xvf trino-0.13.0.tgz
cd trino/
values.yaml 파일을 수정하여 Trino의 설정을 조정합니다. MinIO와의 연동을 위해 additionalCatalogs 섹션에서 MinIO 카탈로그를 정의합니다.
additionalCatalogs:
minio: |-
connector.name=hive
hive.metastore.uri=thrift://metastore:9083
hive.s3.endpoint=http://minio-service.minio-dev.svc.cluster.local:9000
hive.s3.aws-access-key=minioadmin
hive.s3.aws-secret-key=minioadmin
hive.s3.path-style-access=true
Trino 리소스 할당량을 조정합니다.
coordinator:
resources:
requests:
memory: "2Gi"
cpu: "500m"
limits:
memory: "4Gi"
cpu: "1000m"
worker:
resources:
requests:
memory: "2Gi"
cpu: "500m"
limits:
memory: "4Gi"
cpu: "1000m"
Helm을 사용하여 Trino를 설치합니다.
helm install trino . -f values.yaml -n hive
Trino로 MinIO 데이터 쿼리하기
Trino CLI에 접속하여 MinIO 카탈로그를 확인합니다.
export POD_NAME=$(kubectl get pods --namespace hive -l "app=trino,release=trino,component=coordinator" -o jsonpath="{.items[0].metadata.name}")
kubectl exec -it $POD_NAME -n hive -- trino
trino> SHOW CATALOGS;
Catalog
---------
minio
system
tpcds
tpch
(4 rows)
Query 20231219_071108_00000_7zusv, FINISHED, 2 nodes
Splits: 8 total, 8 done (100.00%)
11.91 [0 rows, 0B] [0 rows/s, 0B/s]
MinIO의 스키마를 확인합니다.
trino> SHOW SCHEMAS FROM minio;
Schema
--------------------
default
information_schema
(2 rows)
l0 스키마를 만듭니다.
trino> CREATE SCHEMA minio.l0
-> WITH (
-> location = 's3a://trino/'
-> );
->
CREATE SCHEMA
trino 버킷 주소를 가져와서 테이블을 만듭니다.
trino> CREATE TABLE IF NOT EXISTS minio.l0.nyc_data (
-> VendorID varchar,
-> passenger_count varchar,
-> trip_distance varchar
-> )
-> WITH (
-> external_location = 's3a://trino/',
-> format = 'CSV'
-> );
CREATE TABLE
minio의 버킷에서 불러온 데이터를 질의합니다.
trino> SELECT * FROM minio.test.nyc_data;
trino UI 실행되는 각 쿼리에 대한 세부 정보도 제공합니다. 리소스 활용도, 타임라인, 단계, 작업자가 수행한 작업 등의 세부 정보를 확인할 수 있습니다.
kubectl port-forward $POD_NAME 8080:8080 -n hive
'Cloud' 카테고리의 다른 글
AWS Certified Solutions Architect - Professional (SAP-C02) 합격 후기 (0) | 2024.03.25 |
---|---|
AWS Certified Solutions Architect - Associate (SAA-C03) 합격 후기 (3) | 2024.02.12 |
[GKE] Trino를 사용하여 MinIO에 저장된 데이터 쿼리하기(2) - Hive Metastore 배포 (1) | 2024.01.07 |
[GKE] Trino를 사용하여 MinIO에 저장된 데이터 쿼리하기(1) - Hive Metastore MySQL로 구성 (1) | 2023.12.31 |
[GCP] GKE의 Apache Airflow에 minio 연동하기 (1) | 2023.11.19 |