Consideraciones y limitaciones para usar Hudi en Amazon EMR - Amazon EMR

Consideraciones y limitaciones para usar Hudi en Amazon EMR

  • 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 en upsert e insert: Hudi proporciona una interfaz, HoodieRecordPayload, que determina cómo se fusionan el DataFrame de entrada y el conjunto de datos Hudi 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 como se especifica en el DataFrame de entrada. 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.

        [ { "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.HoodieKryoRegistrar'
    nota

    Si usa un control de acceso detallado (FGAC) en EMR sin servidor, esta configuración no es necesaria, ya que los usuarios deben usar JavaSerializer en lugar de KryoSerializer.