제퍼넷 로고

Amazon EMR 2.7을 사용하면 Trino 쿼리를 6.15.0배 더 빠르게 실행할 수 있습니다 | 아마존 웹 서비스

시간

떨리는 소리 대화형 분석 워크로드를 위해 설계된 오픈 소스 분산 SQL 쿼리 엔진입니다. AWS에서는 다음에서 Trino를 실행할 수 있습니다. 아마존 EMR, 원하는 버전의 오픈 소스 Trino를 유연하게 실행할 수 있습니다. 아마존 엘라스틱 컴퓨트 클라우드 (Amazon EC2) 귀하가 관리하는 인스턴스 아마존 아테나 서버리스 경험을 위해. Amazon EMR 또는 Athena에서 Trino를 사용하면 독점적인 AWS 개발 최적화와 함께 최신 오픈 소스 커뮤니티 혁신을 얻을 수 있습니다.

Amazon EMR 6.8.0 및 Athena 엔진 버전 2부터 AWS는 Trino의 쿼리 성능을 향상시키는 쿼리 계획 및 엔진 동작 최적화를 개발해 왔습니다. 이 게시물에서는 Amazon EMR 6.15.0을 오픈 소스 Trino 426과 비교하고 Amazon EMR 2.7 Trino 6.15.0에서 TPC-DS 쿼리가 최대 426배 더 빠르게 실행되었음을 보여줍니다. 오픈 소스 Trino 426. 나중에 이러한 결과에 기여하는 몇 가지 AWS 개발 성능 최적화에 대해 설명합니다.

벤치마크 설정

테스트에서는 압축된 Parquet 형식으로 Amazon S3에 저장된 3TB 데이터 세트를 사용했으며 데이터베이스 및 테이블에 대한 메타데이터는 AWS 접착제 데이터 카탈로그. 이 벤치마크는 수정되지 않은 TPC-DS 데이터 스키마와 테이블 관계를 사용합니다. 팩트 테이블은 날짜 열을 기준으로 분할되어 있으며 200~2100개의 파티션을 포함합니다. 어떤 테이블에도 테이블 및 열 통계가 없습니다. 오픈 소스 Trino의 TPC-DS 쿼리를 사용했습니다. Github 저장소 수정하지 않고. 벤치마크 쿼리는 두 개의 서로 다른 Amazon EMR 6.15.0 클러스터에서 순차적으로 실행되었습니다. 하나는 Amazon EMR Trino 426이고 다른 하나는 오픈 소스 Trino 426입니다. 두 클러스터 모두 1개의 r5.4xlarge 코디네이터와 20개의 r5.4xlarge 작업자 인스턴스를 사용했습니다.

관찰된 결과

벤치마크에서는 오픈 소스 Trino에 비해 Amazon EMR 6.15.0에서 Trino를 사용할 때 지속적으로 더 나은 성능을 보여줍니다. Amazon EMR에서 Trino의 총 쿼리 런타임은 오픈 소스에 비해 2.7배 더 빨랐습니다. 다음 그래프는 벤치마크 쿼리에 대한 총 쿼리 런타임(초)으로 측정된 성능 향상을 보여줍니다.

많은 TPC-DS 쿼리는 오픈 소스 Trino에 비해 72배 이상 빠른 성능 향상을 보여주었습니다. 일부 쿼리는 160배 향상된 쿼리 10와 같이 훨씬 더 뛰어난 성능을 보여주었습니다. 다음 그래프는 런타임이 가장 많이 개선된 상위 72개 TPC-DS 쿼리를 보여줍니다. 간결하게 표현하고 그래프에서 성능 향상의 왜곡을 방지하기 위해 qXNUMX를 제외했습니다.

성능 향상

이제 Amazon EMR에서 Trino를 사용하여 성능이 향상되는 것을 이해했으므로 이러한 개선에 기여하기 위해 AWS 엔지니어링에서 개발한 몇 가지 주요 혁신에 대해 자세히 살펴보겠습니다.

더 나은 조인 순서와 조인 유형을 선택하는 것은 특정 테이블에서 읽는 데이터의 양, 네트워크를 통해 중간 단계로 전송되는 데이터의 양, 구축하는 데 필요한 메모리의 양에 영향을 미칠 수 있으므로 더 나은 쿼리 성능을 위해 중요합니다. 조인을 용이하게 하는 해시 테이블. 조인 순서 및 조인 알고리즘 결정은 일반적으로 비용 기반 최적화 프로그램에서 수행되는 기능입니다. 이 최적화 프로그램은 통계를 사용하여 테이블과 하위 쿼리가 조인되는 방법을 결정하여 쿼리 계획을 개선합니다.

그러나 테이블 통계는 사용할 수 없거나, 오래되었거나, 대규모 테이블에서 수집하기에는 비용이 너무 많이 드는 경우가 많습니다. 통계를 사용할 수 없는 경우 Amazon EMR과 Athena는 S3 파일 메타데이터를 사용하여 쿼리 계획을 최적화합니다. S3 파일 메타데이터는 조인 순서나 조인 유형을 결정하는 동안 쿼리의 작은 하위 쿼리와 테이블을 유추하는 데 사용됩니다. 예를 들어 다음 쿼리를 고려해 보세요.

SELECT ss_promo_sk FROM store_sales ss, store_returns sr, call_center cc WHERE 
ss.ss_cdemo_sk = sr.sr_cdemo_sk AND ss.ss_customer_sk = cc.cc_call_center_sk 
AND cc_sq_ft > 0

구문적 조인 순서는 다음과 같습니다. store_sales 조인 store_returns 조인 call_center. Amazon EMR 조인 유형 및 순서 선택 최적화 규칙을 사용하면 이러한 테이블에 통계가 없더라도 최적의 조인 순서가 결정됩니다. 이전 쿼리의 경우 call_center S3 파일 메타데이터를 통해 대략적인 크기를 추정한 후 작은 테이블로 간주되면 EMR의 조인 최적화 규칙에 따라 조인됩니다. store_salescall_center 먼저 조인을 브로드캐스트 조인으로 변환하여 쿼리 속도를 높이고 메모리 소비를 줄입니다. 조인 재정렬은 중간 결과 크기를 최소화하여 전체 쿼리 런타임을 더욱 줄이는 데 도움이 됩니다.

Amazon EMR 6.10.0 이상에서는 S3 파일 메타데이터 기반 조인 최적화가 기본적으로 활성화됩니다. Amazon EMR 6.8.0 또는 6.9.0을 사용하는 경우 Trino 클라이언트에서 세션 속성을 설정하거나 클러스터 생성 시 trino-config 분류에 다음 속성을 추가하여 이러한 최적화를 활성화할 수 있습니다. 인용하다 애플리케이션 구성 애플리케이션의 기본 구성을 재정의하는 방법에 대한 자세한 내용을 참조하세요.

조인 유형 선택을 위한 구성:

session property: rule_based_join_type_selection=true
config property: rule-based-join-type-selection=true

조인 재정렬 구성:

session property: rule_based_join_reorder=true
config property: rule-based-join-reorder=true

결론

Amazon EMR 6.8.0 이상을 사용하면 오픈 소스 Trino보다 훨씬 빠르게 Trino에서 쿼리를 실행할 수 있습니다. 이 블로그 게시물에 표시된 것처럼 TPC-DS 벤치마크에서는 Amazon EMR 2.7에서 Trino를 사용하여 전체 쿼리 런타임이 6.15.0배 향상된 것으로 나타났습니다. 이 게시물과 다른 많은 최적화에서 논의된 최적화는 비슷한 성능 향상이 관찰되는 Athena에서 Trino 쿼리를 실행할 때도 사용할 수 있습니다. 자세한 내용은 다음을 참조하세요. 최신 Amazon Athena 엔진을 통해 최대 3%의 비용 절감으로 쿼리를 70배 더 빠르게 실행하세요..

고객을 대신하여 혁신하겠다는 사명으로 Amazon EMR과 Athena는 최신 버전의 성능 및 안정성 향상 기능을 자주 출시합니다. 을 체크 해봐 아마존 EMR아마존 아테나 새로운 기능과 향상된 기능에 대해 알아보려면 릴리스 페이지를 참조하세요.


저자에 관하여

바르가비 사기 Amazon Athena의 소프트웨어 개발 엔지니어입니다. 그녀는 2020년에 AWS에 합류했으며 엔진 업그레이드, 엔진 안정성, 엔진 성능을 포함하여 Amazon EMR 및 Athena 엔진 V3의 다양한 영역에서 작업해 왔습니다.

수실 쿠마르 시바샨카르 EMR Trino 및 Athena 쿼리 엔진 팀의 엔지니어링 관리자입니다. 그는 2014년부터 빅데이터 분석 분야에 주력해 왔습니다.

spot_img

최신 인텔리전스

spot_img