

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

# Amazon EMR 기반 Hudi 사용 시 고려 사항 및 제한 사항
<a name="emr-hudi-considerations"></a>
+ **레코드 키 필드의 경우 null이거나 비워둘 수 없음** - 레코드 키 필드로 지정하는 필드는 `null`이거나 빈 값일 수 없습니다.
+ **업서트 및 삽입 시 기본적으로 업데이트되는 스키마** - Hudi는 입력 DataFrame과 기존 Hudi 데이터 세트를 병합하여 업데이트된 새 데이터 세트를 생성하는 방법을 결정하는 인터페이스 `HoodieRecordPayload`를 제공합니다. Hudi는 입력 DataFrame에 지정된 대로 기존 레코드를 덮어쓰고 스키마를 업데이트하는 이 클래스의 기본 구현(`OverwriteWithLatestAvroPayload`)을 제공합니다. 병합 및 부분 업데이트 구현을 위해 이 논리를 사용자 지정하려면 `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`로 설정합니다. 자세한 내용은 [애플리케이션 구성](emr-configure-apps.md) 단원을 참조하십시오.

      ```
      [
        {
          "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"
    ```
+ **최상의 성능을 위한 설정** - EMR 7.3\+/Hudi 0.15\+의 경우 Kryo 직렬화 오버헤드를 줄이기 위해이 구성을 설정하는 것이 좋습니다.

  ```
  --conf 'spark.kryo.registrator=org.apache.spark.HoodieSparkKryoRegistrar'
  ```
**참고**  
EMR Serverless에서 세분화된 액세스 제어(FGAC)를 사용하는 경우 사용자가 KryoSerializer 대신 JavaSerializer를 사용해야 하므로 이 구성은 필요하지 않습니다.