

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# Amazon EMR で Hudi を使用する際の考慮事項と制限事項
<a name="emr-hudi-considerations"></a>
+ **レコードキーフィールドを null または空にすることはできない** - レコードキーフィールドとして指定するフィールドには、`null` または空の値を指定できません。
+ **upsert および insert でスキーマがデフォルトで更新される** — Hudi にはインターフェイス `HoodieRecordPayload` が備わっており、これにより、入力 DataFrame と既存の Hudi データセットをマージして、新しい更新されたデータセットを生成する方法が決定されます。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 の `timestamp` 型としてではなく、Hive の `long` データ型として登録されます。
+ **Presto**
  + Presto では、Hudi バージョン 0.6.0 未満の場合、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.HoodieKryoRegistrar'
  ```
**注記**  
EMR Serverless できめ細かなアクセスコントロール (FGAC) を使用している場合、ユーザーは KryoSerializer ではなく JavaSerializer を使用する必要があるので、この設定は不要です。