hadoop - warehouse - mapreduce




Y a-t-il un endroit commun pour stocker des schémas de données dans Hadoop? (2)

Ce dont vous avez besoin, c'est HCatalog qui est

"Apache HCatalog est un service de gestion de table et de stockage pour les données créées avec Apache Hadoop.

Ceci comprend:

  • Fournir un schéma partagé et un mécanisme de type de données.
  • Fournir une abstraction de la table pour que les utilisateurs n'aient pas à se soucier de l'emplacement ou du mode de stockage de leurs données.
  • Assurer l'interopérabilité entre les outils de traitement de données tels que Pig, Map Reduce et Hive. "

Vous pouvez jeter un oeil à l' exemple de "flux de données" dans les documents pour voir exactement le scénario dont vous parlez

J'ai récemment fait des recherches sur l'utilisation de Hadoop, Hive et Pig pour faire de la transformation de données. Dans le cadre de cela, j'ai remarqué que le schéma des fichiers de données ne semble pas du tout attaché aux fichiers. Les fichiers de données sont simplement des fichiers plats (à moins d'utiliser quelque chose comme un SequenceFile). Chaque application qui veut travailler avec ces fichiers a sa propre façon de représenter le schéma de ces fichiers.

Par exemple, je charge un fichier dans le HDFS et je veux le transformer avec Pig. Afin de travailler efficacement avec lui, j'ai besoin de spécifier le schéma du fichier lorsque je charge les données:

EMP = LOAD 'myfile' using PigStorage() as { first_name: string, last_name: string, deptno: int};

Maintenant, je sais que lorsque vous stockez un fichier en utilisant PigStorage, le schéma peut éventuellement être écrit à côté, mais pour obtenir un fichier dans Pig en premier lieu, il semble que vous deviez spécifier un schéma.

Si je veux travailler avec le même fichier dans Hive, j'ai besoin de créer une table et de spécifier le schéma avec ça:

CREATE EXTERNAL TABLE EMP ( first_name string
                          , last_name string
                          , empno int)
LOCATION 'myfile';

Il me semble que c'est extrêmement fragile. Si le format de fichier change même légèrement, le schéma doit être mis à jour manuellement dans chaque application. Je suis sûr que je suis naïf mais cela n'aurait-il pas de sens de stocker le schéma avec le fichier de données? De cette façon, les données sont portables entre les applications et la barrière à l'utilisation d'un autre outil serait plus faible puisque vous n'auriez pas besoin de recoder le schéma pour chaque application.

La question est donc: existe-t-il un moyen de spécifier le schéma d'un fichier de données dans Hadoop / HDFS ou dois-je spécifier le schéma pour le fichier de données dans chaque application?


Il semble que vous soyez à la recherche d' Apache Avro . Avec Avro, votre schéma est intégré dans vos données, vous pouvez donc le lire sans avoir à vous soucier des problèmes de schéma et cela facilite grandement l'évolution des schémas.

La grande chose à propos d'Avro est qu'il est complètement intégré dans Hadoop et vous pouvez l'utiliser avec beaucoup de sous-projets Hadoop comme Pig et Hive.

Par exemple avec Pig vous pourriez faire:

EMP = LOAD 'myfile.avro' using AvroStorage();

Je vous conseille de regarder la documentation pour AvroStorage pour plus de détails.

Vous pouvez également travailler avec Avro avec Hive comme décrit ici, mais je ne l'ai pas utilisé personnellement, mais cela devrait fonctionner de la même manière.





hdfs