Posts

  • Trino 느린 쿼리 분석과 성능 최적화

    Trino 클러스터를 운영하다 보면 예상보다 느린 쿼리들을 마주하게 된다. 단순히 “쿼리가 느리다”는 것만으로는 문제를 해결할 수 없다. 정확한 원인을 파악하고 체계적으로 접근해야 한다.

  • 정렬된 Parquet는 어떻게 Row Group을 스킵하는가

    “정렬된 Parquet 파일이 성능이 좋다”는 말을 자주 들었다. Spark에서 orderBy() 후 저장하면 쿼리가 빨라진다는 건 알았지만, 도대체 어떻게 그게 가능한 건지 궁금했다.

  • Trino 메모리 누수: Hadoop FileSystem Cache의 함정

    Presto에서 Trino로 전환한 후 얼마 지나지 않아 예상치 못한 문제가 발생했다. 쿼리 요청이 증가하면서 워커 노드들이 메모리 부족(OOM)으로 인해 하나둘씩 셧다운되기 시작했고, 클러스터 전체가 불안정해지는 상황이 벌어진 것이다. 단순한 설정 문제일 것이라고 생각했지만, 문제의 근본 원인은 생각보다 훨씬 깊은 곳에 숨어있었다.

  • PySpark에서 Polars로의 마이그레이션

    데이터 웨어하우스를 운영하면서 매일 수십 개의 Spark 배치 작업을 실행하고 있다. 그런데 작은 규모의 집계 작업에도 소규모 EMR 클러스터를 매번 생성하고 종료하는 과정이 비효율적이라는 생각이 들었다. “분산 처리가 정말 필요한가?”라는 질문에서 시작된 여정이 85%의 성능 향상과 71%의 비용 절감이라는 결과로 이어졌다.

  • Spark saveAsTable() 동작 원리

    Apache Spark에서 saveAsTable() 메소드는 DataFrame을 Hive 테이블로 저장하는 가장 일반적인 방법 중 하나다. 하지만 이 간단해 보이는 API 뒤에는 복잡한 메타데이터 관리와 파일 시스템 연산이 숨어있다. 특히 관리형 테이블(Managed Table)과 외부 테이블(External Table) 간의 변환 과정에서 예상치 못한 문제가 발생할 수 있다.

subscribe via RSS