글루텐 가속 스파크 엔진 소개

글루텐 가속 스파크 엔진은 watsonx.data 에서 최적화된 고성능 엔진입니다. Spark 엔진은 오픈 소스 실행 엔진(C++로 구현)인 Velox에 SQL 실행을 오프로드하기 위해 Gluten을 사용하여 SparkSQL 의 계산을 가속화하여 워크로드 실행에 드는 비용을 절감합니다.

Gluten은 Spark SQL 프레임워크의 높은 확장성과 기본 엔진의 우수한 성능을 활용하여 기본 엔진을 SparkSQL, 과 통합함으로써 Spark SQL 및 DataFrame 워크로드를 가속화하도록 설계된 기본 엔진 플러그인 역할을 합니다. Apache Spark API와 완벽하게 호환되므로 코드를 변경할 필요가 없습니다.

글루텐 가속 스파크 엔진의 특징

  • 파일 형식 지원 Apache Parquet 및 Apache Avro.

  • 테이블 스캔 성능이 향상되었습니다.

  • 조인 및 집계를 통해 대규모 SQL 쿼리를 가속화합니다.

  • 델타, 후디, 아이스버그 및 Hive 카탈로그를 지원합니다.

  • 수천 개의 열이 포함된 와이드 테이블을 포함하여 업데이트, 삭제, 병합, 삽입, CREATE TABLE AS SELECT를 사용하여 델타 및 쪽모이 세공을 더 빠르게 작성할 수 있습니다.

  • 기본적으로 정렬 병합 조인을 해시 조인으로 대체합니다.

제한사항

  • Amazon S3 개체 저장소는 애플리케이션 제출을 위해 DAS를 지원하지만 ADLS 및 GCS와 같은 다른 개체 저장소는 명시적인 자격 증명을 전달해야 합니다.

  • 더 작은 쿼리는 가속되지 않습니다.

  • 카탈로그 연결은 s3 개체 저장소에 대해서만 지원됩니다.

  • JVM으로의 폴백

    • ANSI: 글루텐은 현재 ANSI 모드를 지원하지 않습니다. ANSI를 활성화하면 스파크 플랜의 실행은 항상 바닐라 스패크로 돌아갑니다.

    • FileSource 형식을 지원합니다: 현재 글루텐은 마루 파일 형식만 지원하며 ORC는 부분적으로 지원합니다. 다른 형식을 사용하면 스캔 연산자는 바닐라 스파크가 됩니다.

  • 호환되지 않는 동작

    • JSON 함수: Velox는 JSON 데이터에서 작은따옴표가 아닌 큰따옴표로 묶인 문자열만 지원합니다. 작은따옴표를 사용하면 글루텐이 잘못된 결과를 제공합니다.

    • 쪽모이 세공 읽기 구성: 글루텐은 spark.files.ignoreCorruptFiles 기본값은 false이며, true인 경우 동작은 config false와 동일합니다. 글루텐은 spark.sql.parquet.datetimeRebaseModeInRead 을 무시하고 마루 파일에 쓰여진 내용만 반환합니다. 기존 하이브리드(율리우스력) 달력과 양력 그레고리력의 차이를 고려하지 않습니다. 바닐라 스파크에서는 결과가 달라질 수 있습니다.

    • 쪽모이 세공 쓰기 구성: 날짜/타임스탬프에 대한 마루 쓰기 시 레거시 하이브리드(율리우스력 + 그레고리력) 달력을 사용할지, 아니면 프롤렙 양력을 사용할지 결정하는 spark.sql.parquet.datetimeRebaseModeInWrite 구성이 스파크에 있습니다. 이 설정이 true로 설정된 상태에서 Spark가 읽을 Parquet을 작성하면 Velox의 TableScan 에서 다시 읽을 때 다른 결과가 출력됩니다.

  • 유출(Spill)

    OutOfMemoryException 는 셔플 파티션이 많은 수로 설정된 경우 현재 구현된 스필 투 디스크 기능 내에서 여전히 트리거될 수 있습니다. 이 경우 파티션 번호를 줄여 OOM을 제거해 보세요.

  • CSV 읽기

    • 헤더 옵션은 true여야 합니다. 이제 DatasourceV1 만 지원합니다. 즉, 사용자는 spark.sql.sources.useV1SourceList=csv 으로 설정해야 합니다. 사용자 정의 읽기 옵션은 지원되지 않으므로 대부분의 경우 CSV 읽기가 바닐라 스파크에서 다시 시작됩니다. 사용자가 파일 스키마와 다른 스키마를 지정하면 CSV 읽기 역시 바닐라 Spark로 돌아가서 경고를 기록합니다.

    • 글루텐 제한에 대한 자세한 내용은 제한을 참조하세요.

  • 글루텐은 FIPS가 활성화된 환경에서는 지원되지 않습니다.

글루텐 모범 사례

  • Gluten은 기본 백엔드, 즉 Apache Arrow 의 OffHeap 열 형식을 사용하는 Velox와 통합되므로 대용량 OffHeap 메모리가 필요하며, 이는 JVM 힙 한도를 초과하지 않고 대규모 데이터를 처리하는 데 필수적입니다.

  • 충분한 offHeap 메모리가 제공되지 않으면 잠재적인 OOM이 발생할 수 있습니다( 제한 사항 참조). 따라서 기본적으로 실행기 메모리의 75%는 offHeap 로 설정됩니다.

  • 사용자는 설정( ae.spark.offHeap.factor)을 사용하여 offHeap, 에 설정된 메모리 비율을 조정할 수 있으며, 이 설정은 값(0-1)만 허용합니다(예: 0.75 ).

  • 워크로드가 Java 기반 스파크에 대한 폴백이 많은 경우 이 값을 더 낮은 값(예: < 0.5 )으로 설정하는 것이 좋습니다. ( 제한 참조) Java 기반 스파크 실행으로 폴백하는 동안 OOM이 발생하지 않도록 합니다.

  • 이 값을 더 높게 설정하는 것이 좋습니다. 즉, 워크로드가 폴백 없이 Gluten에서 기본적으로 실행되는 경우 0.75 이상으로 설정하는 것이 좋습니다.

기본적으로 설정된 값은 0.75 입니다.