본문 바로가기
[kubernetes] Hive metastore 설치 및 설정 (hive-s3 connector for trino) 이번 글에서는 VM 기반의 kubernetes 클러스터에서 hive-s3 connector를 사용하기 위해 설치되어야 할 Hive Metastore 설치를 진행 할 예정입니다. 이전 Trino - S3 연결 및 데이터(schema, table) 생성/조회 설정 글에서, Trino를 통해 hive-s3 catalog를 생성 해 S3에 올라온 CSV 데이터를 읽어오는 내용을 진행 했었습니다. 해당 글은 hive-s3 catalog를 생성하기 위한 table-schema인 Hive Metastore를 설치하는 과정과 내용을 설명할 예정입니다. 현재 구축되어 있는 클러스터는 Hadoop(HDFS)를 Storage로 사용하지 않기 때문에 hdfs는 설치되어 있지 않으며, Storage는 S3(Object stor.. 2024. 2. 4.
[kubernetes] Trino - S3 연결 및 데이터(schema, table) 생성/조회 설정 이번 글에서는 VM 기반의 kubernetes 클러스터에서 이미 설치한 Trino를 활용해 S3에 올라온 데이터를 읽어, 조회를 진행해 보겠습니다. 이를 진행하기 위해선 아래의 3가지의 환경이 이미 구성되어 있어야 합니다. (다른 글에서 다룰 예정) 1) ingress가 설정되는 환경이어야 합니다. (참고 - ingress-nginx-controller 설치) 2) Trino가 설치되어 있어야 합니다. 3) Hivemetastore가 설치되어 있어야 합니다. (참고 - Hivemetastore 설치) Trino - S3 연결을 위해선 위의 3가지 환경이 사전에 구성되어 있어야 하며, 그 이유는 아래의 글에서 함께 설명을 진행하겠습니다. 우선, Trino를 좀 더 편한 환경에서 사용하기 위해선 Databa.. 2024. 1. 29.
[kubernetes] ingress-nginx-controller (helm) 설치 및 ingress 리소스 설정 이번 글에서는 VM 기반의 kubernetes 클러스터에서 ingress-nginx-controller를 설치해, external-ip를 설정하고 이를 기반으로 ingress 리소스를 설정해 외부에서의 접속을 진행해보겠습니다. 우선, ingress-nginx-controller를 설치하기 전에, kubernetes 클러스터에서 ingress를 설장하는 이유에 대해서 간단히 설명하고 넘어가겠습니다. kubernetes 클러스터에서 Pod은 MasterPlain의 Controller에 의해 관리가 됩니다. 따라서, Pod의 IP는 고정되어 관리되지 않고 Pod이 delete/create 시 마다 변경되어 관리됩니다. 즉, Pod의 IP address를 확인해보면 초기 설정한 대역폭에 따라 랜덤하게 할당/설정.. 2024. 1. 21.
[SPARK] spark(pyspark)-shell 환경 변수 변경하기 이번 글에서는 spark(pyspark)-shell 환경에서 spark-shell 어플리케이션의 환경 변수(conf)를 변경하는 방법에 대해서 알아 볼 예정입니다. spark-shell 환경을 사용하다 보면, 사용 와중에 spark-context의 환경 변수(conf)를 변경해야 하는 경우가 생깁니다. 예를 들어, dynamicAllocation 설정을 추가한다 던지, executor의 instance 수를 조정하고 싶은 경우가 그런 경우입니다. 하지만 spark(pyspark)-shell 환경에서 작업을 하다보면, spark-session을 다시 설정한다고 해도 원하는대로 적용이 안되는 경우를 경험하신 분들이 많으실 겁니다. 이러한 경우, 처음에 올라온 spark-shell의 session을 다시 구성.. 2024. 1. 10.
[SPARK] java.io.FileNotFoundException: {file_name}.conf ERROR 해결 방법 이번 글에서는 spark-submit으로 Application을 제출하는 과정에서 java.io.FileNotFoundException 에러가 발생하는 경우의 해결 방법을 정리할 예정입니다. 우선, java.io.FileNotFoundException 에러가 발생한 spark-submit의 제출 코드를 확인할 필요가 있습니다. 아래는 실제 에러가 발생시켰던 spark-submit 제출 코드입니다. spark-submit \ --class com.example.MySparkApp \ --master yarn \ --deploy-mode cluster \ --driver-cores 1 --driver-memory 5G --num-executors 60 --executorcores 5 --executor-me.. 2024. 1. 8.
[Trino] Trino의 Trino web UI와 성능 비교 이번 글에서는 저번 글에 이어, Trino의 Trino web UI에 대한 설명과 다른 쿼리 엔진들과의 성능을 간단하게 비교해 볼 예정입니다. 해당 글에서는 Trino web UI와 Trino의 성능 비교 및 간단 튜닝을 목표로 합니다. QUERY DETAILS Trino web UI → Query details (실행된 쿼리들을 확인 가능합니다.) Completed splits : 쿼리에 대한 Completed splits의 수를 나타냅니다. 쿼리 실행 시, 0으로 시작하며 쿼리 실행 중에 Split가 완료되면 증가합니다. Running splits : 쿼리에 대한 Running 중인 splits의 수를 나타내며, 모두 완료가 되면 0이 됩니다. Queued splits : Queued 상태와 runn.. 2024. 1. 7.
[Trino] Trino의 구조 및 설정 이번 글에서는 저번 글에 이어, Trino의 구조와 설정에 대해서 알아볼 예정입니다. 해당 글에서는 Trino의 구조 및 설정 튜닝의 이해를 목표로 합니다. Trino 구조 Server types Trino는 두 가지의 서버 타입이 있습니다. 하나는 Coordinator, 다른 하나는 Worker입니다. Coordinator Coordinator는 구문 분석, 쿼리 계획, Worker 노드 관리와 같은 일을 합니다. 즉, Client로 부터 쿼리문을 수신하여 구문을 분석하고 쿼리를 계획합니다. 추가적으로 Worker 노드를 관리하는 역할을 하는 서버입니다. Coordinator는 REST API를 통해 클러이언트 및 Worker와 통신합니다. Worker Worker는 실제 Task을 실행하고, 데이터 .. 2024. 1. 7.
[Trino] Trino 기본 개념 및 이해하기 이번 글에서는 Trino라는 분산 SQL 쿼리 엔진을 실제 사용하며, 알게된 점 그리고 궁금했던 점들을 정리해 게시할 예정입니다. 해당 글에서는 Trino의 기본적 개념 정리와 동작 방식의 이해를 목표로 합니다. Trino란 Trino는 하나 이상의 heterogeneous (서로 다른 종류의 개별) data sources에 분산된 대규모 데이터 세트를 쿼리하도록 설계된 오픈소스 분산 SQL 쿼리 엔진입니다. 우선, Trino는 관계형 데이터베이스가 아닙니다. 즉, Mysql, Oracle SQL과 같은 데이터베이스를 대체하지 않습니다. 여담으로 Trino는 기존 Facebook의 Presto 초기 멤버들이 페이스북을 나와 만든 PrestoSQL 프로젝트가 Trino 라는 이름으로 리브랜딩 되었습니다. .. 2024. 1. 7.
[SPARK] spark job과 partition의 개념 이전 글에서는 spark의 executor memory 구조와 튜닝 포인트에 대해서 살펴 보았습니다. 이번 글에서는 Spark의 배포 방식과 partition의 구조에 대해서 살펴 볼 예정입니다. Spark 배포 방식 (spark - deploy mode) Spark의 배포 방식(deploy-mode)은 spark driver를 누가 관리하냐에 따라 client-mode와 cluster-mode로 나누어 집니다. Client-mode Client mode는 Driver가 spark job을 제출한 node에서 JVM을 띄워 할당됩니다. 즉, 해당 노드에서 Driver의 리소스를 확보해야 합니다. 예를 들어, User가 spark-app들을 제출한 노드에서 spark 프로세스들을 검색해보면 여러 drive.. 2024. 1. 6.
[SPARK] Spark의 Execuotr memory 구조 이전 글에서는 spark의 세부 동작 개념인 Transformation과 Action을 살펴 보았습니다. 이번 글에서는 Spark의 Executor memory 구조에 대해서 살펴 볼 예정입니다. Executor memory 구조 Executor는 우선, 워커노드에 컨테이너 형태로 Memory를 할당 받게됩니다. 각 executor의 memory(JVM)는 크게 3가지 독립 영역으로 나뉘게 됩니다. On-heap memory (JVM) 영역 spark.executor.memory를 통해 설정할 수 있습니다.(ex 1g, 20g 등) Off-heap memory 영역 off-heap memory는 JVM(on heap memory) 영역과는 별도로 존재하며, Spark container(Executor) .. 2024. 1. 6.