4 votes

Limite de largeur de colonne du Metastore Hive

Utilisation d'AWS EMR sur la version 5.2.1 en tant qu'environnement de traitement des données, lorsqu'il s'agit d'un énorme fichier JSON avec un schéma complexe contenant de nombreux champs imbriqués, Hive ne peut pas le traiter et génère une erreur lorsque la limite actuelle de longueur de colonne de 4000 caractères est atteinte.

Erreur lors du traitement de l'instruction : ÉCHEC : Erreur d'exécution, code de retour 1 de org.apache.hadoop.hive.ql.exec.DDLTask. InvalidObjectException(message:Le nom du type de colonne est trop long : [...]

En consultant la documentation, il existe déjà de nombreux problèmes liés à ce problème ou similaires, bien que tous restent non résolus [[1](https://issues.apache.org/jira/browse/HIVE-12274), 2]. Il est recommandé de modifier plusieurs champs du Metastore pour leur attribuer une valeur différente afin de permettre une plus grande longueur pour les définitions de structure.

  • COLUMNS_V2.TYPE_NAME
  • TABLE_PARAMS.PARAM_VALUE
  • SERDE_PARAMS.PARAM_VALUE
  • SD_PARAMS.PARAM_VALUE

Comme indiqué dans le premier problème, la solution proposée mentionne :

[...] après avoir défini les valeurs, le Metastore doit également être configuré et redémarré."

Cependant, il n'est nulle part spécifié ce qui doit être aussi configuré à côté des valeurs de la base de données.

Ainsi, après avoir mis à jour les champs du Metastore local actuel (mysql dans ce cas) de string à mediumtext et redémarré le processus Metastore, je ne parviens toujours pas à progresser car la tentative de chargement du JSON continue d'échouer avec la même erreur.

Est-ce que j'ai omis quelque chose ou est-ce que quelqu'un a trouvé une solution de contournement alternative pour surmonter ce problème ?

1voto

blamblam Points 177

En regardant le code source de MetaStore comme le problème Hive HIVE-15249 le stipule, il y a également une vérification supplémentaire qui s'applique en plus des contraintes de paramètres définies dans les tables de MetaStore.

En particulier, dans le fichier HiveMetaStoreUtils.java, la déclaration suivante semble être la cause de l'erreur d'exécution :

public static final int MAX_MS_TYPENAME_LENGTH = 2000; // 4000/2, pour un cas de caractère unicode peu probable

Ainsi, changer les valeurs pour celles mentionnées dans le MetaStore ne suffit pas car la contrainte du code va générer l'exception.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X