

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

# Considerazioni e limitazioni per l'utilizzo di Hudi su Amazon EMR
<a name="emr-hudi-considerations"></a>
+ **Il campo della chiave di registro non può essere null o vuoto**: il campo specificato come chiave di registro non può avere valori `null` o vuoti.
+ **Schema aggiornato per impostazione predefinita su upsert e insert**: Hudi fornisce un'interfaccia `HoodieRecordPayload` che determina in che modo l'input DataFrame e il set di dati Hudi esistente vengono uniti per produrre un nuovo set di dati aggiornato. Hudi fornisce un'implementazione predefinita di questa classe`OverwriteWithLatestAvroPayload`, che sovrascrive i record esistenti e aggiorna lo schema come specificato nell'input. DataFrame Per personalizzare questa logica per l'implementazione di aggiornamenti di unione e parziali, è possibile fornire un'implementazione dell'interfaccia `HoodieRecordPayload` utilizzando il parametro `DataSourceWriteOptions.PAYLOAD_CLASS_OPT_KEY`.
+ **L'eliminazione richiede lo schema**: durante l'eliminazione, è necessario specificare la chiave di registro, la chiave di partizione e i campi chiave pre-combinati. Altre colonne possono essere rese `null` o vuote, ma è necessario lo schema completo.
+ **Limitazioni delle tabelle MoR**: le tabelle MoR non supportano il savepointing. È possibile interrogare le tabelle MoR utilizzando la vista ottimizzata per la lettura o la vista in tempo reale (`tableName_rt`) da Spark SQL, Presto o Hive. L'utilizzo della visualizzazione ottimizzata per la lettura espone solo i dati del file di base e non espone una vista unita dei dati di base e di log.
+ **Hive**
  + Per la registrazione delle tabelle nel metastore Hive, Hudi si aspetta che il server Hive Thrift sia in esecuzione sulla porta predefinita `10000`. Se si esegue l'override di questa porta con una porta personalizzata, passa l'opzione `HIVE_URL_OPT_KEY` come illustrato nell'esempio seguente.

    ```
    .option(DataSourceWriteOptions.HIVE_URL_OPT_KEY, "jdbc:hive2://localhost:override-port-number
    ```
  + Il tipo di dati `timestamp` in Spark è registrato come tipo di dati `long` in Hive e non come tipo `timestamp` di Hive.
+ **Presto**
  + Presto non supporta la lettura di tabelle MoR in tempo reale nelle versioni Hudi precedenti alla 0.6.0. 
  + Presto supporta solo le query degli snapshot.
  + Affinché Presto interpreti correttamente le colonne Hudi del set di dati, imposta il valore `hive.parquet_use_column_names` su `true`.
    + Per impostare il valore di una sessione, nella shell Presto, eseguire il comando seguente:

      ```
      set session hive.parquet_use_column_names=true
      ```
    + Per impostare il valore a livello di cluster, utilizzare la classificazione di configurazione `presto-connector-hive` per impostare `hive.parquet.use_column_names` su `true`, come illustrato nell'esempio seguente. Per ulteriori informazioni, consulta [Configurazione delle applicazioni](emr-configure-apps.md).

      ```
      [
        {
          "Classification": "presto-connector-hive",
          "Properties": {
            "hive.parquet.use-column-names": "true"
          }
        }
      ]
      ```
+ **HBase Indice**
  + La HBase versione usata per *creare* Hudi potrebbe essere diversa da quella elencata nella EMR Release Guide. Per inserire le dipendenze corrette per la sessione Spark, esegui il comando seguente.

    ```
    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"
    ```
+ **Impostazioni per prestazioni ottimali**: per EMR 7.3\$1/Hudi 0.15\$1, si consiglia ai clienti di impostare questa configurazione per ridurre il sovraccarico di serializzazione Kryo: 

  ```
  --conf 'spark.kryo.registrator=org.apache.spark.HoodieKryoRegistrar'
  ```
**Nota**  
Se si utilizza il controllo di accesso granulare (FGAC) su EMR Serverless, questa configurazione non è necessaria, poiché gli utenti devono utilizzare anziché. JavaSerializer KryoSerializer