Bonjour tout le monde,
J'ai un programme parallèle à mémoire partagée écrit en C++ et je voudrai savoir comment migrer ce programme là vers l'infrastructure distribuée Hadoop ou Spark et si c'est possible de le faire.
Merci de me répondre
Bonjour tout le monde,
J'ai un programme parallèle à mémoire partagée écrit en C++ et je voudrai savoir comment migrer ce programme là vers l'infrastructure distribuée Hadoop ou Spark et si c'est possible de le faire.
Merci de me répondre
Bonsoir,
Je ne suis pas expert ni en Hadoop, ni en Spark, mais il faudrait que tu nous en dises un peu plus sur ton programme STP.
Peux-tu nous dire STP sous quel OS tourne ton programme ? Parce que là je suppose qu'il tourne sous Linux, en utilisant de la Shared Memory.
Ton programme est-il conçu pour un seul serveur, ou bien tourne t'il sur un cluster (un ensemble de serveurs) ?
Peux-tu nous dire en quelques mots à quoi sert ton programme, et quel type de données il traite ?
Quel est le volume de données à traiter ?
Voilà ce qui me vient à l'esprit :
1) ton programme est écrit en C++. Il faudra le porter soit en Java, soit en Python pour Hadoop. Idem pour Spark, sachant que tu peux en plus développer en langage Scala (Spark a été écrit en Scala).
2) ces Frameworks ont été développés pour faire du calcul distribué sur un cluster et un de leurs avantages est que tu n'as pas à te soucier dans ta programmation de parallélisme, car le parallélisme est géré pour toi par ces Framework
3) lorsque tu charges tes données, elles sont automatiquement partitionnées pour être réparties sur les différents noeuds du cluster.
4) Hadoop a été conçu pour traiter de gros fichiers, et par défaut la taille de bloc du fichier est de 64 Mo. Hadoop n'a jamais été conçu pour traiter des petits fichiers de qq Ko. Lorsque tu charges tes fichiers de données sur Hadoop, elles sont donc réparties sur les différents noeuds du cluster, et stockées par blocs de 64 Mo dans HDFS.
Une fois tes développements de Mapper et de Reducer écrits en Python ou en Java, tu les soumets en batch au cluster Hadoop, et ceux-ci s'exécuteront sur les noeuds concernés.
Si tu veux te simplifier la vie car la programmation MapReduce est complexe, tu peux utiliser des interfaces de plus haut niveau avec Pig ou Hive.
5) Si tu utilises Scala, tu charges tes données en gérant soit des RDD (Resilient Distributed Dataset pour traiter des fichiers ligne à ligne), soit des DF (DataFrames pour les données tabulaires, comme les fichiers CSV ce qui revient à traiter les données en ligne et en colonne)
Une fois tes données chargées dans des RDD ou des DF, Spark les partitionne aussi et distribue les partitions sur les noeuds du cluster.
Bonjour,
En fait, je vous remercie pour votre réponse.
Mon programme tourne sous Linux en utilisant de la shared memory et vous avez raison. Un nombre de threads est fixé à la main lors de la commande de l'exécution du programme. Mon programme sert à la recherche des motifs fréquents dans un jeu de données. Mais je trouve que sa réécriture en Java ou même en python va être un peu délicate vu que dans mon programme j'ai apporté des bibliothèques que j'hésite qu'elles existent dans Java o Python. De même, l'exécution se fait sous shell, comment pourrai-je le ré exécuter en Java ou Python( une fois réécrit)? Je pense que ceci ne sera pas évident du tout mais espérons l'atteindra.
Bonjour,
Je n'ai jamais eu un cas ou je dois exécuter un programme C++ dans l'environnement Hadoop donc je ne pourrai pas trop t'aider dessus, mais tu peux migrer ton programme en Java et utiliser "User Defined Functions" sur Pig pour les bibliothèques je ne crois pas qu'il sera des bibliothèques en C++ qui ne se trouve pas en Java ou Python. si tu trouve des difficultés pense a réparti ton programme a des DLL's qui se consomment ailleurs et retourne des valeurs a ton programme java...
Bonjour,
Le C++ a beau être un beau langage, dès que l'on veut travailler dans la Data Science et sur Big Data, on n' a pas le choix : il faut investir 1 des 4 langages prédominants que sont Java, Python, Scala et R.
Les Data Scientists utilisent R et Python, tandis que les gens travaillant sur Hadoop utilisent Java ou Python, et éventuellement Scala pour ceux qui travaillent sur Spark.
Pour moi, Python pousse très très fort comme langage, car c'est un langage facile à apprendre, avec une syntaxe très légère (fini de gérer des accolades, de mettre des terminateurs en fin de ligne, de se demander si une chaîne de caractères doit être mise entre quotes simples ou doubles).
Ce sont des langages très permissifs et faciles d'emploi, au contraire du C++ (rappelez vous vos débuts de programmation en C++ avec la notion de classes et d'objets, les pointeurs, la gestion mémoire, et les redoutables phases de compilation du code, suivies de la phase de Link pour enfin produire un exécutable qui marche après tant d'efforts !).
Et puis la force de Python, ce le nombre de librairies diverses et variées existantes.
Quant à Java, du moins à ses débuts, il a amené 3 choses par rapport au C++ :
- la disparition des redoutables pointeurs
- la fin de la gestion mémoire avec le ramasse-miettes (garbage collector)
- sa portabilité
Mais ce qui a fait le succès de Java en plus, ce n'est pas tant le langage en lui-même, mais la plateforme Java qui a permis la création d'autres langages comme Groovy et Ruby, qui une fois compilés en bytecode, tournent sur une JVM.
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager