trino_base

Trino

  • 2012년 Martin Traverso , David Phillips, Dain Sundstrom 및 Eric Hwang은 Facebook 및Facebook이 분석하려고 했던 수백 페타바이트를 더 잘 처리하기 위해 Apache Hive를 대체할 Presto를 개발하였습니다.

    • Presto의 원래 제작자는 Presto 오픈 소스를 유지하기로 결정하고 Presto 오픈 소스 커뮤니티 구축을 풀타임으로 추구했습니다. 새로운 이름인 PrestoSQL로 이 작업을 수행하였고 Facebook은 Presto®에 상표를 신청했습니다. 이로 인해 결국 Presto를 개발한 원래 그룹이 브랜드를 변경해야 하는 소송 및 기타 문제가 발생하여 PrestoSQL은 Trino로 리브랜딩했습니다.

  • Trino는 SQL 엔진, 여러 유형의 데이터 소스에 대한 임시 및 배치 ETL 쿼리를 위한 오픈 소스 분산 SQL 쿼리 엔진입니다.

  • Trino는 기가바이트에서 페타바이트에 이르는 다양한 데이터 소스에 대해 빠른 분석 쿼리를 실행하기 위한 오픈 소스 분산 SQL 엔진입니다.

  • Trino는 하나 이상의 이기종 데이터 소스에 분산된 대규모 데이터 세트를 쿼리하도록 설계된 분산 SQL 쿼리 엔진입니다.

  • Trino는 대화형 분석을 위해 처음부터 설계 및 제작되었습니다. 매우 큰 조직의 규모로 확장하면서 상용 데이터 웨어하우스의 속도에 접근합니다.

  • JSON, 배열 및 맵과 같은 표준 및 반구조화된 데이터 유형의 전체 호스트를 관리할 수 있습니다.

동작

  • Trino는 대규모 병렬 처리(MPP) 데이터베이스와 유사한 아키텍처를 활용하는 분산 시스템

  • 다른 많은 빅 데이터 엔진과 마찬가지로 수행해야 할 모든 작업을 처리하기 위해 여러 작업자 노드를 관리하는 코디네이터 노드의 형태가 있습니다. 즉, Trino는 여러 대의 서버에 병렬로 데이터를 처리하는 분산 쿼리 엔진으로, 단일 코디네이터와 여러 개의 워커로 구성됩니다

  • 분석가 또는 일반 사용자는 코디네이터에게 푸시되는 SQL을 실행합니다. 그런 다음 코디네이터는 분산 쿼리를 구문 분석, 계획 및 예약합니다.

  • 표준 ANSI SQL 을 지원하고 사용자가 JSON 및 MAP 변환 및 구문 분석과 같은 보다 복잡한 변환을 실행할 수 있습니다.

  • 쿼리 상태

    • BLOCKED– 쿼리가 차단되고 리소스(버퍼 공간, 메모리, 분할 등)를 기다리고 있습니다.(상태 BLOCKED는 정상이지만 지속적이라면 조사가 필요합니다.)

    • 메모리 부족 또는 분할, 디스크 또는 네트워크 I/O 병목 현상, 데이터 왜곡(모든 데이터가 소수의 작업자에게 전달됨), 병렬 처리 부족(몇 명의 작업자만 사용 가능) 또는 지정된 단계를 따르는 쿼리의 계산 비용이 많이 드는 단계 등 많은 잠재적 원인이 있습니다

트리노를 사용하는 이유

  • 독립적인 데이터 소스 연결

    • 데이터를 쿼리할 수 있는 방법과 관련하여 많은 옵션이 있습니다.(Athena, Hive 및 Apache Drill과 같은 도구가 있음)

    • Trino의 가장 큰 장점은 바로 SQL 엔진이라는 것입니다. 즉, MySQL, HDFS 및 SQL Server와 같은 다양한 데이터 소스 위에 불가지론적으로 위치

  • 클라우드 중심

    • 스토리지와 컴퓨팅을 별도로 실행하는 Presto의 기본 설계는 클라우드 환경에서 운영하는 데 매우 편리합니다.

    • Presto 클러스터는 데이터를 저장하지 않기 때문에 데이터 손실 없이 로드에 따라 자동 확장될 수 있습니다.

아키텍처

  • 아키텍처

    • 클러스터: Trino 클러스터는 코디네이터와 여러 개의 워커로 구성됩니다. 코디네이터는 쿼리 실행을 관리하고, 워커는 카탈로그에 구성된 데이터 소스에 액세스하고 각 쿼리를 병렬로 처리합니다.

    • 코디네이터: 코디네이터는 SQL 문을 파싱하고 쿼리를 계획하며 Trino 워커 노드를 관리합니다. 쿼리의 논리적 및 물리적인 계획을 생성하며 Trino 워커 클러스터에서 실행되는 일련의 단계와 작업으로 구성됩니다.

    • 워커: Trino 워커는 작업을 실행하고 데이터를 처리하며, 커넥터를 통해 데이터 저장소에서 데이터를 가져오고 다른 워커와 중간 데이터를 교환합니다. 코디네이터는 워커로부터 결과를 수집하여 최종 결과를 클라이언트에 반환합니다.

      • 외부 저장소에서 데이터를 읽고 SQL 연산을 사용하여 데이터를 처리하며, 다른 Trino 워커와 데이터를 교환하고 데이터를 집계하여 최종 쿼리 결과를 생성하는 역할을 담당합니다.

      • 컴퓨팅 파워를 제공하며, Trino 클러스터를 위해 데이터를 로드하는 역할을 담당합니다. 대부분의 경우, 각 워커에 더 많고 강력한 CPU를 장착하면 쿼리를 빠르게 실행할 수 있습니다.

      • Trino는 중간 연산 결과를 디스크 대신 메모리에 저장합니다. 일상적인 운영과 유지보수에서는 모든 워커의 메모리를 분산 메모리 자원 풀로 간주할 수 있습니다. 쿼리의 메모리 사용량이 총 메모리 풀을 초과하면 쿼리가 실패하거나 무기한으로 차단될 수 있습니다.

    • 커넥터: 커넥터는 Trino를 데이터 소스에 맞게 적용하는 역할을 합니다. Hive 데이터 웨어하우스, 데이터 레이크, 관계형 데이터베이스 등과 같은 데이터 소스에 Trino가 표준 API를 사용하여 상호 작용할 수 있도록 합니다. Trino에는 여러 내장 커넥터가 포함되어 있습니다.

    • 카탈로그: Trino는 각 데이터 소스를 카탈로그로 구성하여 데이터에 액세스합니다. SQL 조인을 사용하여 하나의 쿼리 내에서 여러 카탈로그를 쿼리할 수 있습니다. 카탈로그는 Trino 구성 디렉토리에 저장된 속성 파일을 사용하여 구성됩니다.

  • 여러 작업자 노드와 동기화되어 작동하는 하나의 코디네이터 노드가 있습니다.

  • 사용자는 사용자 지정 쿼리 및 실행 엔진을 사용하여 작업자 노드에서 분산 쿼리 계획을 구문 분석, 계획 및 예약하는 코디네이터에 SQL 쿼리를 제출할 수 있습니다.

  • Presto는 복잡한 쿼리, 집계, 조인, 왼쪽/오른쪽 외부 조인, 하위 쿼리, 창 함수, 개별 카운트 및 대략적인 백분위수를 포함하여 표준 ANSI SQL 의미 체계를 지원하도록 설계되었습니다.

  • 쿼리가 컴파일된 후 Presto는 작업자 노드에서 요청을 여러 단계로 처리합니다.

  • 불필요한 I/O 오버헤드를 피하기 위해 모든 처리는 메모리 내에서 이루어지며 단계 간에 네트워크를 통해 파이프라인됩니다.

Presto 쿼리 엔진 사용

  • Presto를 사용하여 모든 크기의 데이터에 대해 빠른 분석 쿼리를 실행합니다. 이는 Presto가 대기 시간에 최적화되어 있기 때문에 가능합니다.

Hive와 비교

  • hive : 오픈 소스 Hadoop 플랫폼에서 대규모 데이터 시스템을 쿼리하도록 설계되었습니다. Hive 2019.1은 SQL과 유사한 쿼리를 MapReduce 작업으로 변환하여 대량의 데이터를 쉽게 실행하고 처리합니다. Hive는 쿼리 처리량에 최적화되어 있으며 풀 모델로 설명됩니다.

  • presto : HDFS 등의 데이터에 대한 빠른 대화형 쿼리를 위해 설계되었습니다. Presto 는 대기 시간에 최적화되어 있으며 종종 풀 모델로 설명됩니다.

Spark와 비교

  • Trino는 애드혹 SQL 분석으로 사용되는 반면 Spark는 ETL/ML 파이프라인용으로 사용됩니다

  • 활용

    • Trino: 주로 OLAP(Online Analytical Processing) 작업에 사용되며 대용량 데이터셋에 대한 빠른 SQL 질의를 제공하는 데 최적화되어 있습니다.

    • Spark: OLAP뿐만 아니라 ETL 작업, 스트리밍 처리, 그래프 처리 및 머신러닝 등의 다양한 작업에 사용됩니다.

  • 커넥터

    • Trino: 다양한 데이터 소스 (RDBMS, NoSQL, HDFS, S3 등)에 대한 커넥터를 제공하여 사용자가 하나의 SQL 쿼리로 여러 데이터 소스에 질의할 수 있게 합니다.

    • Spark: Spark도 다양한 데이터 소스를 지원하지만, Trino만큼 다양한 데이터 저장소에 대한 커넥터를 갖추지는 않습니다.

  • 내결함성

    • Trino: 대부분의 SQL 쿼리를 대화식으로 실행하기 때문에 속도가 중요하며 작업자 노드 중 하나에 장애(예: 종료)가 발생하면 진행 중인 쿼리가 중단되고 다시 시작해야 합니다.

    • Spark: 대부분의 쿼리가 실패하지 않음에도 결함 허용성을 제공해야합니다. 디스크에 데이터를 저장하면 장애 발생 시 복구가 용이하지만, 스파크와 같은 메모리 기반 시스템에서는 복구 작업이 복잡할 수 있습니다. 스파크는 장애 발생 시 이전 작업을 재실행하여 복구를 시도합니다.

  • 쿼리 스케줄링

    • Trino: 항상 실행 중인 코디네이터를 갖고 있어 쿼리의 스케줄링에 큰 오버헤드가 없습니다.

    • Spark: Spark는 지연된 접근 방식을 사용하여 리소스를 협상하고 JAR 파일을 복사한 다음 처리를 시작하는 데 시간이 걸립니다.

  • 실행 모델

    • Trino: 파이프라인 실행 모델을 사용하여 여러 쿼리 계획의 부분이 동시에 실행될 수 있습니다.

    • Spark: 연결되지 않은 단계를 가지며 하나의 단계가 처리를 완료할 때까지 다음 단계는 아무 것도 할 수 없습니다(DAG)

Reference

  • https://www.starburst.io/learn/open-source-trino/

  • https://api-docs.treasuredata.com/en/tools/presto/quickstart/

  • https://www.oreilly.com/library/view/trino-the-definitive/9781098107703/ch04.html

Last updated