Considérations et limites relatives à l'utilisation de Hudi sur Amazon EMR - Amazon EMR

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Considérations et limites relatives à l'utilisation de Hudi sur Amazon EMR

  • Le champ de clé d'enregistrement ne peut pas être nul ou vide – Le champ que vous spécifiez comme champ de clé d'enregistrement ne peut pas avoir des valeurs null ou vides.

  • Schéma mis à jour par défaut lors de l'insertion et de l'insertion — Hudi fournit une interface HoodieRecordPayload qui détermine comment le jeu de données Hudi en entrée DataFrame et le jeu de données Hudi existant sont fusionnés pour produire un nouveau jeu de données mis à jour. Hudi fournit une implémentation par défaut de cette classeOverwriteWithLatestAvroPayload, qui remplace les enregistrements existants et met à jour le schéma tel que spécifié dans l'entrée. DataFrame Pour personnaliser cette logique en vue d'une implémentation de la fusion et des mises à jour partielles, vous pouvez fournir une implémentation de l'interface HoodieRecordPayload à l'aide du paramètre DataSourceWriteOptions.PAYLOAD_CLASS_OPT_KEY.

  • La suppression exige un schéma – Lors d'une suppression, vous devez spécifier les champs de clé d'enregistrement, de clé de partition et de clé de pré-combinaison. Les autres colonnes peuvent être null ou vides, mais le schéma complet est requis.

  • Limites des tables MoR – Les tables MoR ne prennent pas en charge le pointage de sauvegarde. Vous pouvez interroger les tables MoR à l'aide de la vue optimisée pour la lecture ou de la vue en temps réel (tableName_rt) de SparkSQL, Presto ou Hive. L'utilisation de la vue optimisée pour la lecture expose uniquement les données du fichier de base et n'expose pas une vue fusionnée des données de base et des données de journal.

  • Hive

    • Pour l'enregistrement des tables dans le metastore Hive, Hudi s'attend à ce que le serveur Hive Thrift s'exécute sur le port par défaut 10000. Si vous remplacez ce port par un port personnalisé, transmettez l'option HIVE_URL_OPT_KEY comme indiqué dans l'exemple suivant.

      .option(DataSourceWriteOptions.HIVE_URL_OPT_KEY, "jdbc:hive2://localhost:override-port-number
    • Le type de données timestamp dans Spark est enregistré comme type de données long dans Hive, et non comme type timestamp de Hive.

  • Presto

    • Presto ne prend pas en charge la lecture des tables MoR en temps réel dans les versions de Hudi inférieures à 0.6.0.

    • Presto ne prend en charge que les requêtes instantanées.

    • Pour que Presto interprète correctement les colonnes d'un ensemble de données, Hudi définissez la valeur de hive.parquet_use_column_names sur true.

      • Pour définir la valeur pour une session, dans le shell Presto, exécutez la commande suivante :

        set session hive.parquet_use_column_names=true
      • Pour définir la valeur au niveau du cluster, utilisez la classification de configuration presto-connector-hive pour définir hive.parquet.use_column_names sur true, comme illustré dans l'exemple suivant. Pour de plus amples informations, veuillez consulter Configuration des applications.

        [ { "Classification": "presto-connector-hive", "Properties": { "hive.parquet.use-column-names": "true" } } ]
  • HBaseIndice

    • La HBase version utilisée pour compiler Hudi peut être différente de celle répertoriée dans le guide de EMR publication. Pour extraire les dépendances correctes pour votre session Spark, exécutez la commande suivante.

      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"