2011-03-08 4 views
2

J'ai un système que je souhaite distribuer où j'ai un certain nombre de très gros fichiers binaires non divisibles que je souhaite traiter de manière distribuée. Ceux-ci sont de l'ordre de quelques centaines de Gb. Pour diverses raisons fixes et spécifiques à l'implémentation, ces fichiers ne peuvent pas être traités en parallèle mais doivent être traités séquentiellement par le même processus jusqu'à la fin.Hadoop pour le traitement de très gros fichiers binaires

L'application est développée en C++ donc je considérerais les pipes Hadoop pour streamer les données dedans et dehors. Chaque instance devra traiter de l'ordre de 100 Go à 200 Go séquentiellement de ses propres données (actuellement stockées dans un fichier), et l'application est actuellement (probablement) limitée aux E/S, il est donc important que chaque travail soit exécuté entièrement localement. Je souhaite vivement que HDFS héberge ces données - la possibilité de conserver automatiquement des copies redondantes et de les rééquilibrer à mesure que de nouveaux nœuds sont ajoutés sera très utile. Je suis également féru de map reduce pour sa simplicité de calcul et son exigence d'héberger le calcul le plus près possible des données. Cependant, je me demande à quel point Hadoop est adapté à cette application particulière. Je sais que pour représenter mes données, il est possible de générer des fichiers non divisibles, ou bien de générer d'énormes fichiers de séquence (dans mon cas, ils seraient de l'ordre de 10 To pour un seul fichier - devrais-je emballer toutes mes données en une). Et c'est donc possible de traiter mes données en utilisant Hadoop. Cependant, il semble que mon modèle ne correspond pas très bien à Hadoop: la communauté est-elle d'accord? Ou avez-vous des suggestions pour établir ces données de manière optimale? Ou même pour d'autres systèmes informatiques en cluster qui pourraient mieux s'adapter au modèle?

Cette question est peut-être un doublon de questions existantes sur hadoop, mais à l'exception que mon système nécessite un ordre de grandeur ou deux autres données par fichier individuel (auparavant, j'ai vu la question posée sur les fichiers individuels de quelques Gb en taille). Alors pardonnez-moi si cela a déjà été répondu - même pour cette taille de données.

Merci,

Alex

Répondre

4

Il semble que vous travaillez avec un nombre relativement peu de fichiers volumineux. Étant donné que vos fichiers sont volumineux et non divisibles, Hadoop aura du mal à planifier et à distribuer efficacement les tâches dans le cluster. Je pense que plus il y a de fichiers traités en un seul lot (comme des centaines), plus ça vaut la peine d'utiliser Hadoop.

Puisque vous ne travaillez qu'avec quelques fichiers, avez-vous essayé un mécanisme de distribution plus simple, comme lancer des processus sur plusieurs machines utilisant ssh, ou GNU Parallel? J'ai eu beaucoup de succès en utilisant cette approche pour des tâches simples. L'utilisation d'un lecteur monté NFS sur tous vos noeuds peut partager des limites sur la quantité de copies que vous auriez à faire.

+0

Intéressant. Merci beaucoup pour le commentaire ... Dans mon cas particulier, j'ai spécifiquement besoin que les tâches soient hébergées sur les machines sur lesquelles les données sont stockées. D'un coup d'œil très bref sur GNU parallel (qui semble plutôt utile), je ne suis pas sûr qu'il interagisse avec un FS distribué de la manière que je rechercherais pour activer ce type de pattern. –

+0

Pourquoi pas? Si vous utilisez déjà un système de fichiers distribué, ce problème devient beaucoup plus facile.Utilisez simplement SSH ou GNU parallel pour répartir le calcul entre les nœuds. La commande émise sait comment lire les données du système de fichiers distribué et faire quelque chose avec lui. Le mécanisme de distribution (SSH) n'a pas besoin de savoir quoi que ce soit sur le système de fichiers distribué – bajafresh4life

2

Vous pouvez écrire un InputSplit personnalisé pour votre fichier, mais comme bajafresh4life a dit que ce ne serait pas vraiment idéal car à moins que votre taille de bloc HDFS soit la même que la taille de votre fichier, vos fichiers seront répartis être les frais généraux du réseau. Ou si vous faites en sorte que votre taille HDFS corresponde à la taille de votre fichier, vous ne bénéficiez pas de tous les disques de votre cluster. En bout de ligne, Hadoop n'est peut-être pas le meilleur outil pour vous.

+0

Merci Michael. Alors, y a-t-il autre chose qui combine un système de fichiers distribué avec un calcul local de données qui pourrait mieux répondre à mes besoins spécifiques? J'ai eu un bref aperçu de quelques autres DFS comme Lustre mais il n'est pas immédiatement évident qu'ils correspondent bien au modèle de calcul que je veux. –

Questions connexes