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

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

  • 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 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 claseOverwriteWithLatestAvroPayload, 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. Puedes consultar las tablas MoR mediante la vista optimizada para lectura o la vista en tiempo real (tableName_rt) de SparkSQL, 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" } } ]
  • HBaseIndexa

    • La HBase versión utilizada para compilar Hudi puede ser diferente de la que aparece en la Guía de EMR publicación. 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"