본문 바로가기
[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.
[SPARK] Spark 세부 동작(Transformation, Action) 이전 글에서는 spark의 기본적인 개념과 아키텍쳐, 대략적인 동작 과정을 살펴 보았습니다. 이번 글에서는 Spark의 세부 동작 과정의 중요 개념인 Transformation, Action과 Executor memory 구조에 대해서 살펴 볼 예정입니다. Spark 동작 과정 RDD(Resilient Distributed Datasets) Spark의 Transformation, Action 과정을 설명하기 전에 Spark의 기본적인 데이터구조인, RDD(Resilient Distributed Datasets)에 대해 간단한 설명이 필요합니다. RDD는 spark에서의 데이터구조이고, 쉽게 말해 데이터들의 집합이라고 생각하면 편할 것 같습니다. RDD라는 데이터 집합은 partition이라는 논리적 분.. 2024. 1. 6.
[SPARK] Spark 개념 정리 및 Architecture 해당 글에서는 spark를 관리/운영해보면서 자세히 알지 못했던 부분, 그리고 경험적으로 알게된 내용들을 정리하고 공유하는데 목적이 있습니다. 따라서, spark의 기본적인 개념들을 보다 쉬운 언어로 설명하고, 동작 원리를 직관적으로 정리할 예정입니다. Spark 개념 및 아키텍쳐 Spark 배경 우선, spark가 왜 탄생하게 되었는지를 한마디로 설명하면, "Hadoop의 mapreduce의 한계를 극복하기 위해"입니다. hadoop의 M/R(MapReduce)는 대량의 데이터를 처리할 수 있게 한다는 것에서 큰 의미가 있지만, 실제 execute engine으로 M/R을 사용해보신 분 들은 아시겠지만 Map과 Reduce 사이의 중간 데이터를 HDFS에 Write 후에 Reduce 과정에서 다시 Re.. 2024. 1. 6.