

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

# Consideraciones y limitaciones para usar Hudi en Amazon EMR
<a name="emr-hudi-considerations"></a>
+ **El campo de clave de registro no puede ser nulo ni estar vacío**: el campo especificado como campo de clave de registro no puede tener valores `null` ni estar vacío.
+ **Esquema actualizado de forma predeterminada al insertar y colocar**: Hudi proporciona una interfaz `HoodieRecordPayload` que determina cómo se combinan el conjunto de datos Hudi de entrada DataFrame y el existente para producir un conjunto de datos nuevo y actualizado. Hudi proporciona una implementación predeterminada de esta clase`OverwriteWithLatestAvroPayload`, que sobrescribe los registros existentes y actualiza el esquema según se especifica en la entrada. DataFrame Para personalizar esta lógica con el fin de implementar actualizaciones parciales y fusiones, puede proporcionar una implementación de la interfaz `HoodieRecordPayload` mediante el parámetro `DataSourceWriteOptions.PAYLOAD_CLASS_OPT_KEY`.
+ **La eliminación requiere un esquema**: al eliminar, debe especificar la clave de registro, la clave de partición y los campos de clave de combinación previa. Se puede hacer que otras columnas sean `null` o estén vacías, pero se requiere el esquema completo.
+ **Limitaciones de las tablas MoR**: las tablas MoR no admiten puntos de guardado. Puede consultar las tablas MoR mediante la vista optimizada para lectura o la vista en tiempo real (`{{tableName}}_rt`) de Spark SQL, Presto o Hive. El uso de la vista optimizada para lectura solo expone los datos del archivo base y no expone una vista combinada de los datos base y de registro.
+ **Hive**
  + Para registrar tablas en el metaalmacén de Hive, Hudi espera que el servidor Hive Thrift se ejecute en el puerto predeterminado, `10000`. Si se sustituye este puerto por un puerto personalizado, es preciso pasar la opción `HIVE_URL_OPT_KEY` como se muestra en el siguiente ejemplo.

    ```
    .option(DataSourceWriteOptions.HIVE_URL_OPT_KEY, "jdbc:hive2://localhost:{{override-port-number}}
    ```
  + El tipo de datos `timestamp` de Spark se registra como tipo de datos `long` en Hive, pero no como el tipo `timestamp` de Hive.
+ **Presto**
  + Presto no admite la lectura de tablas MoR en tiempo real en versiones de Hudi anteriores a 0.6.0. 
  + Presto solo admite consultas de instantáneas.
  + Para que Presto interprete correctamente las columnas del conjunto de datos de Hudi, establezca el valor de `hive.parquet_use_column_names` en `true`.
    + Para establecer el valor de una sesión, en el shell de Presto, ejecute el siguiente comando:

      ```
      set session hive.parquet_use_column_names=true
      ```
    + Para establecer el valor en el nivel de clúster, utilice la clasificación de configuración `presto-connector-hive` para establecer `hive.parquet.use_column_names` en `true`, como se muestra en el ejemplo siguiente. Para obtener más información, consulte [Configuración de aplicaciones](emr-configure-apps.md).

      ```
      [
        {
          "Classification": "presto-connector-hive",
          "Properties": {
            "hive.parquet.use-column-names": "true"
          }
        }
      ]
      ```
+ **Índice de HBase**
  + La versión de HBase utilizada para *compilar* Hudi puede ser diferente de la que aparece en la Guía de versiones de EMR. Para obtener las dependencias correctas para la sesión de Spark, ejecute el siguiente comando.

    ```
    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"
    ```
+ **Configuración para obtener el mejor rendimiento**: para EMR 7.3\+/Hudi 0.15\+, se recomienda a los clientes establecer esta configuración para reducir la sobrecarga de serialización de Kryo: 

  ```
  --conf 'spark.kryo.registrator=org.apache.spark.HoodieSparkKryoRegistrar'
  ```
**nota**  
Si utiliza un control de acceso detallado (FGAC) en EMR Serverless, esta configuración no es necesaria, ya que los usuarios deben utilizarla en lugar de. JavaSerializer KryoSerializer