6
votes

Y a-t-il un lieu commun pour stocker des schémas de données dans Hadoop?

Je fais une question d'enquête récemment autour de Hadoop, de la ruche et de la transformation des données. Dans le cadre de cela, j'ai remarqué que le schéma des fichiers de données ne semble pas joint aux fichiers du tout. Les fichiers de données ne sont que des fichiers plats (sauf si vous utilisez quelque chose comme une séquencefile). 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 les HDFS et je veux le transformer avec cochon. Afin de travailler efficacement avec cela, je dois spécifier le schéma du fichier lorsque je charge les données: xxx

maintenant, je sais que lorsque stocker Un fichier à l'aide de la pigsetorage, le schéma peut éventuellement être écrit sur le côté, mais afin d'obtenir un fichier en porc en premier lieu, il semble que vous devez spécifier un schéma.

si je veux Pour travailler avec le même fichier dans la ruche, j'ai besoin de créer une table et de spécifier le schéma avec ça aussi: xxx

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 ne serait-il pas logique 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, car vous n'auriez pas besoin de ré-coder le schéma de chaque application.

Alors la question est la suivante: Pour 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?


0 commentaires

3 Réponses :


3
votes

On dirait que vous recherchez Apache Avro . Avec Avro, votre schéma est intégré à vos données, vous pouvez donc la lire sans avoir à vous soucier des problèmes de schéma et il fabrique une évolution du schéma vraiment facile.

La grande chose à propos de Avro est qu'il est complètement intégré à Hadoop et vous pouvez utiliser Avec beaucoup de sous-projets Hadoop, comme le cochon et la ruche. P>

Par exemple, avec cochon, vous pouviez faire: p>

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


4 commentaires

À partir des looks de la documentation, il semble que le schéma doit être externe afin de travailler avec un fichier d'avreur dans la ruche. J'ai chat des fichiers d'avroi et je peux voir le schéma dans l'en-tête mais pour une raison quelconque la ruche ne le ramassera pas. Aucune suggestion?


Il n'a pas nécessairement besoin d'être externe, vous pouvez par exemple définir avro.schema.literal dans le champ tblProperty lorsque vous créez votre table ou que vous pourriez stocker votre schéma. Dans Json en HDFS, puis avoir avro.schema.url point à cet emplacement dans HDFS.


J'utilise SQOP pour retirer les données d'une base de données dans les fichiers de données d'Avro. Je ne vois aucune option dans Sqoop pour que cela stocke le schéma à l'extérieur. Y a-t-il une façon de pouvoir extraire le schéma des fichiers Avro?


Oui, vous pouvez le faire avec Avro Cat >>> --Print-Schema / Chemin / à / à / Avro / Fichier



0
votes

Apache Zebra semble être l'outil qui pourrait fournir un communiqué commun Définition du schéma sur MR, Cochon et Hive. Il a son propre magasin de schéma. Le travail MR peut utiliser sa tabler intégré pour écrire sur HDFS.


0 commentaires

1
votes

Ce dont vous avez besoin est HCatalog qui est

"Apache HCatalog est un service de gestion de table et de stockage pour les données Créé en utilisant Apache Hadoop.

Ceci inclut:


0 commentaires