Amazon에서 Hudi를 사용하기 위한 고려 사항 및 제한 사항 EMR - Amazon EMR

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

Amazon에서 Hudi를 사용하기 위한 고려 사항 및 제한 사항 EMR

  • 레코드 키 필드의 경우 null이거나 비워둘 수 없음 - 레코드 키 필드로 지정하는 필드는 null이거나 빈 값일 수 없습니다.

  • 업서트 및 삽입에서 스키마가 기본적으로 업데이트됨 - Hudi는 입력 DataFrame 및 기존 Hudi 데이터 세트가 병합HoodieRecordPayload되어 업데이트된 새 데이터 세트를 생성하는 방법을 결정하는 인터페이스를 제공합니다. Hudi는 입력 에 지정된 대로 기존 레코드를 덮어쓰고 스키마를 업데이트OverwriteWithLatestAvroPayload하는 이 클래스 의 기본 구현을 제공합니다 DataFrame. 병합 및 부분 업데이트 구현을 위해 이 논리를 사용자 지정하려면 DataSourceWriteOptions.PAYLOAD_CLASS_OPT_KEY 파라미터를 사용하여 HoodieRecordPayload 인터페이스 구현을 제공할 수 있습니다.

  • 삭제 시 스키마 필요 - 삭제할 때는 레코드 키, 파티션 키 및 사전 결합 키 필드를 지정해야 합니다. 다른 열은 null이거나 비워둘 수 있지만 전체 스키마가 필요합니다.

  • MoR 테이블 제한 - MoR 테이블은 세이브 포인트 기능을 지원하지 않습니다. Spark SQL, Presto 또는 Hive의 읽기 최적화 뷰 또는 실시간 뷰(tableName_rt)를 사용하여 MoR 테이블을 쿼리할 수 있습니다. 읽기 최적화 보기를 사용하면 기본 파일 데이터만 노출되고 기본 및 로그 데이터의 병합된 보기는 노출되지 않습니다.

  • Hive

    • 테이블을 Hive 메타스토어에 등록하는 경우 Hudi는 Hive Thrift 서버가 기본 포트인 10000에서 실행될 것으로 예상합니다. 이 포트를 사용자 지정 포트로 재정의하는 경우 다음 예와 같이 HIVE_URL_OPT_KEY 옵션을 전달합니다.

      .option(DataSourceWriteOptions.HIVE_URL_OPT_KEY, "jdbc:hive2://localhost:override-port-number
    • Spark의 timestamp 데이터 유형은 Hive의 long 유형이 아닌 Hive의 timestamp 데이터 유형으로 등록됩니다.

  • Presto

    • Presto는 0.6.0 미만의 Hudi 버전에서 MoR 실시간 테이블 읽기를 지원하지 않습니다.

    • Presto는 스냅샷 쿼리만 지원합니다.

    • Presto에서 Hudi 데이터 세트 열을 올바르게 해석하려면 hive.parquet_use_column_names 값을 true로 설정합니다.

      • 세션의 값을 설정하려면 Presto 셸에서 다음 명령을 실행합니다.

        set session hive.parquet_use_column_names=true
      • 클러스터 수준에서 값을 설정하려면 다음 예와 같이 presto-connector-hive 구성 분류를 사용하여 hive.parquet.use_column_names을(를) true로 설정합니다. 자세한 내용은 애플리케이션 구성 단원을 참조하십시오.

        [ { "Classification": "presto-connector-hive", "Properties": { "hive.parquet.use-column-names": "true" } } ]
  • HBase 인덱스

    • Hudi를 빌드하는 데 사용되는 HBase 버전은 EMR 릴리스 가이드에 나열된 버전과 다를 수 있습니다. Spark 세션에 올바른 종속 항목을 가져오려면 다음 명령을 실행합니다.

      spark-shell \ --jars /usr/lib/spark/external/lib/spark-avro.jar,/usr/lib/hudi/cli/lib/*.jar \ --conf "spark.serializer=org.apache.spark.serializer.KryoSerializer" \ --conf "spark.sql.hive.convertMetastoreParquet=false"