2013-03-12 4 views
1

Actuellement, j'apporte à Hadoop environ 10 tables d'un EDW (Enterprise Data Warehouse), ces tables sont étroitement liées à un modèle Star Schema. Je suis Usq Sqoop pour amener toutes ces tables à travers, résultant en 10 répertoires contenant des fichiers CSV.Modélisation des données dans Hadoop

Je suis à la recherche de meilleures façons de stocker ces fichiers avant de supprimer des travaux MR. Devrais-je suivre une sorte de modèle ou construire un agrégat avant de travailler sur des emplois MR? Je regarde essentiellement comment pourrait être un moyen de stocker des données connexes ensemble.

La plupart des choses que j'ai trouvées en cherchant stockent des fichiers csv triviaux et les lisent avec opencsv. Je cherche quelque chose d'un peu plus impliqué et pas seulement pour les fichiers CSV. Si passer à un autre format fonctionne mieux que csv, alors ce n'est pas un problème.

Se résume à: Comment mieux stocker un tas de données connexes dans HDFS pour avoir une bonne expérience avec MR.

Répondre

1

Le stockage de ces fichiers dans csv est correct. Puisque vous serez en mesure de traiter ces fichiers en utilisant le format de sortie de texte et pourrait également le lire à travers la ruche en utilisant un délimiteur spécifique. Vous pouvez changer le délimiteur si vous n'aimez pas la virgule à "pipe" ("|") c'est ce que je fais la plupart du temps. Aussi vous devez généralement avoir de gros fichiers dans hadoop mais si c'est assez grand pour que vous puissiez partitionner ces fichiers et que chaque partition de fichier ait la taille de quelques centaines, alors il serait bon de partitionner ces fichiers dans un répertoire séparé basé sur votre partition colonne.

Il serait également préférable d'avoir la plupart des colonnes dans la table unique que d'avoir beaucoup de petites tables normalisées. Mais cela varie en fonction de la taille de vos données. Assurez-vous également que chaque fois que vous copiez, déplacez ou créez des données, vous effectuez toutes les vérifications de contraintes sur vos applications car il sera difficile de faire de petits changements dans le tableau plus tard, vous devrez modifier le fichier complet pour une petite modification.

1

Les concepts Hive Partitioning et Bucketing peuvent être utilisés efficacement pour regrouper des données similaires (pas dans des nœuds, mais dans des fichiers et des dossiers) en fonction d'une colonne particulière. Voici quelques bons tutoriels pour Partitioning et Bucketing.

2

Je suggère de passer du temps avec Apache Avro. Avec Sqoop v1.3 et au-delà, vous pouvez importer des données de vos sources de données relationnelles en tant que fichiers Avro en utilisant un schéma de votre propre conception. Ce qui est intéressant dans Avro, c'est qu'il fournit beaucoup de fonctionnalités en plus d'être un format de sérialisation ...

Il vous donne le schéma data + dans le même fichier mais il est compact et efficace pour une sérialisation rapide. Il vous fournit des fonctionnalités de gestion des versions qui sont utiles lors de la mise à jour de données avec un schéma différent. Hive le supporte à la fois en lecture et en écriture et Map Reduce peut l'utiliser de manière transparente.

Il peut être utilisé comme un format d'échange générique entre les applications (pas seulement pour Hadoop), ce qui en fait une option intéressante pour un format multiplateforme standard pour l'échange de données dans votre architecture plus large.

Questions connexes