Partage
  • Partager sur Facebook
  • Partager sur Twitter

[Cours] Calculs distribués sur données massives

AMA!

    Team OC 22 mars 2017 à 10:48:13

    Bienvenue dans ce cours sur le calcul distribué et les données massives !

    Ce cours est le premier d'une série visant à former au métier de data architect ; on commence sur un gros morceau avec Hadoop MapReduce, Spark et le lancement de clusters de calculs sur AWS.

    Je suis un peu occupé à réaliser les prochains cours de la série (en collaboration avec CentraleSupelec), mais je tâcherai de répondre promptement à vos questions. Ne soyez pas timides !

    Par contre, si vous avez une question concernant le fonctionnement du cours (accès aux exercices, envoi des exercices, inscription au cours...), contactez plutôt OpenClassrooms à hello@openclassrooms.com.

    Massivement vôtre,

    Régis
    • Partager sur Facebook
    • Partager sur Twitter
      4 avril 2017 à 19:53:45

      Bonjour,

      Votre cours est vraiment de très bonne qualité. Peut t on avoir le cours en format pdf?

      Merci,

      Tresor

      • Partager sur Facebook
      • Partager sur Twitter
        6 avril 2017 à 17:26:26

        Bonjour,

        Je viens de finir la 1ère partie et je pense qu'il comporte une erreur.
        Vous indiquez que les caractères utf-8 comportent 4 octets : ce n'est pas le cas.

        Les caractères Unicode supportent plusieurs encodages. Sous Windows, chaque caractère Unicode comporte 2 octets (je ne sais plus si c'est UCS-2 ou UTF-16, big endian ou little endian). En UTF-8, le nombre d'octets pour un caractère est variable. Les caractères Unicode en dessous de 127 sont représentés avec un seul octet, les autres avec 2 voire 3 selon leur position. L'utf-8 est donc plus efficace pour les langues occidentales. Par contre, on ne peut pas connaître la longueur de la chaîne (en nombre de caractères) sans la parcourir et la décoder.

        Sinon le cours est excellent, mais cette imprécision dans les premières lignes m'a troublé...

        Cordialement,
        Guillaume

        • Partager sur Facebook
        • Partager sur Twitter
          Team OC 10 avril 2017 à 11:41:16

          Bonjour,

          @TresorDjonga : Je ne crois pas que cela soit possible. Cependant, le contenu des cours est en licence CC-BY-NC-SA, ce qui vous autorise à dupliquer le contenu du cours, et même à le diffuser (avec attribution et sans utilisation commerciale). Est-ce que je peux vous demander quel est le scénario d'utilisation ?

          @GuillaumeDuBourguet : oui, effectivement, en unicode les caractères peuvent être stockés sur un nombre variable d'octets. Dans le cours on a écrit "Chaque caractère stocké dans un ordinateur requiert environ quatre octets quand il est stocké au format utf-8". En fait, le "environ" devrait être compris comme "en moyenne". Et encore, c'est une moyenne tout à fait arbitraire. Je vais reformuler cette phrase pour clarifier.

          • Partager sur Facebook
          • Partager sur Twitter
            12 avril 2017 à 3:10:25

            Bonjour Regis,

            Je voudrais simplement lire le cours pour me former. je suis plus à l'aise en version papier que devant l' écran.

            Merci pour votre réponse,

            Trésor 

            • Partager sur Facebook
            • Partager sur Twitter
              29 juillet 2017 à 0:29:01

              Bonjour Regis,

              J'ai relevé 2 bugs dans le code proposé de WordCountReducer.py de la section "Familiarisez-vous avec Hadoop" :

              • Le nombre d’occurrences calculé est incorrect.
              • La dernière valeur n'est pas retournée.

              Ci-dessous une proposition de correction:

              #!/usr/bin/env python3
              
              import sys
              
              total = 0
              lastword = None
              
              for line in sys.stdin:
                  line = line.strip()
                  # recuperer la cle et la valeur et conversion de la valeur en int
                  word, count = line.split()
                  count = int(count)
                  # passage au mot suivant (plusieurs cles possibles pour une meme execution de programme)
                  if lastword is None:
                      lastword = word
                  if word == lastword:
                      total += count
                  else:
                      print("%s\t%d occurences" % (lastword, total))
                      total = count  # !!! count au lieu de 0
                      lastword = word
              
              if lastword is not None:
                  print("%s\t%d occurences" % (lastword, total))  # !!! On affiche le dernier element traite
              

              De plus, j'ai également ajouté le shebang python3 aux deux fichiers WordCount*.py.

              Cordialement,

              Eric

              -
              Edité par EricBouteillon 29 juillet 2017 à 0:34:35

              • Partager sur Facebook
              • Partager sur Twitter
                Team OC 1 août 2017 à 10:47:41

                Eric,

                Merci pour tes commentaires ! Effectivement, tes modifications sont 100% pertinentes, je les intègre derechef.

                • Partager sur Facebook
                • Partager sur Twitter
                  25 août 2017 à 15:15:30

                  Bonjour, 

                  Je crois avoir relevé une faute de frappe dans le Latex à la section 6 du cours sur la multiplication matrice-vecteur. Soit A est une matrice carrée nxn et donc Av=x avec x de taille n et non m. Ou A de taille mxn, v taille n. Ou A taille n,m; v taille m et x taille n. 

                  Merci pour ce cours très bien vulgarisé. Le code Python d'implem est d'une grande valeur ajoutée et j'espère que l'on retrouvera des scripts similaires d'application pour les prochains cours. 

                  Vincent

                  -
                  Edité par Sisyphe89 25 août 2017 à 15:19:10

                  • Partager sur Facebook
                  • Partager sur Twitter
                    Team OC 31 août 2017 à 12:52:15

                    Tout à fait ! Bien vu, et merci !
                    • Partager sur Facebook
                    • Partager sur Twitter
                      7 octobre 2017 à 11:02:56

                      Bonjour,

                      Je suis actuellement la formation et j'en suis à l'installation de Hadoop et j'ai un blocage.

                      J'ai installé Hadoop 2.7.4 sur linux mint en mode pseudo-distribué.

                      Sauf erreur de ma part, j'ai configuré comme indiqué dans le cours.

                      Je formatte le namenode : OK

                      Je lance dfs : OK (je vois bien mes fichiers sur http://localhost:50070)

                      En revanche lorsque je lance Yarn, le RessourceManager se lance bien, mais pas le NodeManager :

                      2017-10-07 11:00:19,510 FATAL org.apache.hadoop.yarn.server.nodemanager.NodeManager: Error starting NodeManager
                      org.apache.hadoop.yarn.exceptions.YarnRuntimeException: org.apache.hadoop.yarn.exceptions.YarnRuntimeException: Recieved SHUTDOWN signal from Resourcemanager ,Registration of NodeManager failed, Message from ResourceManager: NodeManager from  DataScience-PC doesn't satisfy minimum allocations, Sending SHUTDOWN signal to the NodeManager.

                      Une idée ?

                      Cyril

                      -
                      Edité par CyrilLegrand2 7 octobre 2017 à 11:03:25

                      • Partager sur Facebook
                      • Partager sur Twitter
                        Team OC 22 octobre 2017 à 0:49:56

                        @CyrilLegrand2 : on dirait que tu n'as pas assez de ressources sur ta machine :

                        NodeManager from  DataScience-PC doesn't satisfy minimum allocations

                        D'autres personnes ont déjà rencontré ce problème, apparemment : https://stackoverflow.com/questions/46211890/hadoop-node-manager-doesnot-satisfy-minimum-allocations

                        A vue de nez, je dirais que tu n'as soit pas assez de RAM disponible, soit pas assez d'espace disque. Les quantités nécessaires peuvent être spécifiées par un paramètre de configuration, comme expliqué dans le lien ci-dessus.

                        • Partager sur Facebook
                        • Partager sur Twitter
                          23 octobre 2017 à 17:21:47

                          ####

                          EDIT :

                          Au temps pour moi, en testant le code python en local sans Hadoop, je me suis rendu compte que l'encodage posait problème après copié collé d'internet ... Du coup j'ai bien spécifié utf-8 et corrigé les caractères non reconnus et mon WordCount passe maintenant ...

                          Je peux continuer !

                          ####

                          Bonjour,

                          Je progresse lentement, c'était effectivement un problème d'allocation de mémoire et vcores que j'ai paramétré plus finement dans yarn-site.xml et mapred-site.xml. J'arrive à présent à lancer mon NodeManager.

                          Par contre je bloque maintenant sur une autre erreur pendant le map et malheureusement, l'erreur ne me parle pas du tout.

                          J'ai 7 containers qui me renvoient tous ce même message :

                          packageJobJar: [/tmp/hadoop-unjar6771583347744548964/] [] /tmp/streamjob8955362784324894983.jar tmpDir=null
                          17/10/23 17:05:26 INFO client.RMProxy: Connecting to ResourceManager at /0.0.0.0:8032
                          17/10/23 17:05:26 INFO client.RMProxy: Connecting to ResourceManager at /0.0.0.0:8032
                          17/10/23 17:05:27 INFO mapred.FileInputFormat: Total input paths to process : 1
                          17/10/23 17:05:27 INFO mapreduce.JobSubmitter: number of splits:2
                          17/10/23 17:05:27 INFO mapreduce.JobSubmitter: Submitting tokens for job: job_1508770794272_0002
                          17/10/23 17:05:27 INFO impl.YarnClientImpl: Submitted application application_1508770794272_0002
                          17/10/23 17:05:27 INFO mapreduce.Job: The url to track the job: http://DataScience-PC:8088/proxy/application_1508770794272_0002/
                          17/10/23 17:05:27 INFO mapreduce.Job: Running job: job_1508770794272_0002
                          17/10/23 17:05:35 INFO mapreduce.Job: Job job_1508770794272_0002 running in uber mode : false
                          17/10/23 17:05:35 INFO mapreduce.Job:  map 0% reduce 0%


                          17/10/23 17:05:39 INFO mapreduce.Job: Task Id : attempt_1508770794272_0002_m_000001_0, Status : FAILED
                          Error: java.lang.RuntimeException: PipeMapRed.waitOutputThreads(): subprocess failed with code 1
                              at org.apache.hadoop.streaming.PipeMapRed.waitOutputThreads(PipeMapRed.java:322)
                              at org.apache.hadoop.streaming.PipeMapRed.mapRedFinished(PipeMapRed.java:535)
                              at org.apache.hadoop.streaming.PipeMapper.close(PipeMapper.java:130)
                              at org.apache.hadoop.mapred.MapRunner.run(MapRunner.java:61)
                              at org.apache.hadoop.streaming.PipeMapRunner.run(PipeMapRunner.java:34)
                              at org.apache.hadoop.mapred.MapTask.runOldMapper(MapTask.java:453)
                              at org.apache.hadoop.mapred.MapTask.run(MapTask.java:343)
                              at org.apache.hadoop.mapred.YarnChild$2.run(YarnChild.java:164)
                              at java.security.AccessController.doPrivileged(Native Method)
                              at javax.security.auth.Subject.doAs(Subject.java:422)
                              at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1746)
                              at org.apache.hadoop.mapred.YarnChild.main(YarnChild.java:158)


                          ... (x 7 containers)

                          Merci pour vos conseils.

                          -
                          Edité par CyrilLegrand2 23 octobre 2017 à 19:21:09

                          • Partager sur Facebook
                          • Partager sur Twitter
                            Team OC 24 octobre 2017 à 8:10:31

                            Bien joué ! L'encodage c'est toujours la plaie avec python. Si tu peux, passe à python 3 où ces problèmes ont été en grande partie résolus.
                            • Partager sur Facebook
                            • Partager sur Twitter
                              24 octobre 2017 à 9:59:17

                              Bonjour,

                              petite question anodine concernant la formule donnée dans l’énoncé de l'exercice sur TF-IDF:
                              w_t,d = n_d × tf_t,d × log(N/df_t)

                              avec :

                              • tf_t,d qui représente la fréquence d'un mot t dans un document d. Tiens... cela ne vous rappelle rien ?
                              • n_d qui représente le nombre de mots dans un document d (on pourra l'appeler WordPerDoc).
                              • df_t qui représente la fréquence du terme dans la collection, soit le nombre de documents dans lequel le mot t est présent (dans notre cas, ce sera 1 ou 2).
                              • Enfin N est le nombre de documents dans notre collection, soit ici 2.
                              Or, d’après ce que je comprends de la lecture de https://en.wikipedia.org/wiki/Tf–idf, une formule (courante) serait plutôt :
                              w_t,d = (tf_t,d / n_d) × log(N/df_t)
                              D’où la question, est-ce une erreur d’énoncé ou pas ?
                              Merci d'avance pour la réponse,
                              Stéphane.
                              • Partager sur Facebook
                              • Partager sur Twitter
                                Team OC 25 octobre 2017 à 18:03:07

                                StéphaneBeaurin, vous avez tout à fait raison. Désolé pour cette erreur que je corrige derechef.
                                • Partager sur Facebook
                                • Partager sur Twitter
                                  25 octobre 2017 à 22:16:37

                                  Pas de souci, le but de l'exercice n'est pas là, mais ça permet d'utiliser la bonne formule ;)))
                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                    2 novembre 2017 à 13:47:33

                                    Bonjour,

                                    Pour la mission 2, calcul du PageRank, à la lecture de plusieurs articles, il semble que la formule soit P=(1-s)T + s et non pas P=(1-s)T +s/n, est-ce que ma comprehension est correcte ?

                                    Merci d'avance,

                                    Fred

                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                      Team OC 3 novembre 2017 à 13:21:13

                                      FBE94,

                                      Je ne crois pas qu'il y ait une erreur. Quel article avez-vous lu qui contredise cela ?

                                      • Partager sur Facebook
                                      • Partager sur Twitter
                                        5 novembre 2017 à 18:33:54

                                        Bonjour,

                                        J'ai terminé la formation, merci pour la qualité de celle-ci !

                                        Mes deux exercices sont bloqués (0/3 corrections) et le temps moyen constaté est de 33 jours pour le premier et 49 jours pour le second.

                                        Cela me parait long, y a-t-il des élèves qui ont déjà réussi à obtenir leurs 3 corrections ?

                                        Cordialement,

                                        Cyril

                                        • Partager sur Facebook
                                        • Partager sur Twitter
                                          Team OC 6 novembre 2017 à 19:00:37

                                          @CyrilLegrand2 : je fais remonter ça aux grandes instances d'Openclassrooms, moi je n'y peux pas grand-chose.
                                          • Partager sur Facebook
                                          • Partager sur Twitter
                                            13 novembre 2017 à 15:13:52

                                            Bonjour,

                                            Effectivement, pas d'erreur dans la formule du PageRank, c'est moi qui avait mal interprété un article.

                                            J'ai par contre un question, après seulement 3 itérations, j'ai des PR stabilisés, mais très faibles (de l'ordre de 10E-5) est-ce que ça semble cohérent ?

                                            Cordialement,

                                            Fred

                                            • Partager sur Facebook
                                            • Partager sur Twitter
                                              16 janvier 2018 à 12:23:46

                                              Bonjour,

                                              J'ai deux questions svp

                                              Question 1:

                                              J'ai une erreur "ssh_exchange_identification: Connection closed by remote host" lors de la connexion en ssh au noeud maître de mon cluster créé en suivant le tutoriel. Est ce que quelqu'un a déjà eu cette erreur?

                                              Voici le détail

                                              ssh -vv hadoop@ec2-54-77-132-215.eu-west-1.compute.amazonaws.com

                                              OpenSSH_7.4p1, LibreSSL 2.5.0

                                              debug1: Reading configuration data /Users/Hasna/.ssh/config

                                              debug1: /Users/Hasna/.ssh/config line 2: Applying options for *.compute.amazonaws.com

                                              debug1: Reading configuration data /etc/ssh/ssh_config

                                              debug2: resolving "ec2-54-77-132-215.eu-west-1.compute.amazonaws.com" port 22

                                              debug2: ssh_connect_direct: needpriv 0

                                              debug1: Connecting to ec2-54-77-132-215.eu-west-1.compute.amazonaws.com [54.77.132.215] port 22.

                                              debug1: Connection established.

                                              debug1: key_load_public: No such file or directory

                                              debug1: identity file /Users/Hasna/.ssh/hasna-ec2.pem type -1

                                              debug1: key_load_public: No such file or directory

                                              debug1: identity file /Users/Hasna/.ssh/hasna-ec2.pem-cert type -1

                                              debug1: Enabling compatibility mode for protocol 2.0

                                              debug1: Local version string SSH-2.0-OpenSSH_7.4

                                              ssh_exchange_identification: Connection closed by remote host

                                              Question 2 :

                                              Au niveau de la création d'un cluster Hadoop avec Amazon AWS EMR, dans le cours, on utilise m3.xlarge qui n'est pas pas incluse dans l'offre gratuite d'AWS. Y-a-t il une configuration EMR gratuite ?

                                              Merci

                                              -
                                              Edité par Hasna.B 16 janvier 2018 à 16:21:12

                                              • Partager sur Facebook
                                              • Partager sur Twitter
                                                Team OC 17 janvier 2018 à 14:27:40

                                                Question 1 : le fichier /Users/Hasna/.ssh/hasna-ec2.pem existe-t-il ? https://superuser.com/questions/962888/what-does-key-load-public-no-such-file-or-directory-mean

                                                Question 2 : hélas, il n'existe pas de "free tier" pour EMR ! https://aws.amazon.com/fr/free/

                                                • Partager sur Facebook
                                                • Partager sur Twitter
                                                  1 février 2018 à 10:20:42

                                                  Bonjour.

                                                  Je viens de terminer ce cours dans le cadre de mon parcours Data Architect. Il est très bien fait et permet d'acquérir un solide background dans le domaine. Bravo à l'auteur.

                                                  Je suis en attente de mes notes pour les activités (je sais que le délai est important, je patiente). J'ai eu quelques difficultés avec le pagerank. Est-ce qu'il sera possible d'avoir la correction (ou au moins en partie) ?

                                                  Merci.

                                                  • Partager sur Facebook
                                                  • Partager sur Twitter
                                                  Rien n'arrive dans la vie... ni comme on le craint, ni comme on l'espère.
                                                    22 mars 2018 à 13:34:59

                                                    Bonjour,

                                                    Je suis en train de corriger les exercices MapReduce de 3 candidats (j'ai soumis le mien hier) mais pour certaines questions il faut que je compare les résultats obtenus par le candidat avec les résultats "attendus". Je n'ai trouvé nulle part de corrigé type me permettant de faire cette comparaison, où puis-je trouver cela? Il n'y a aucun fichier avec les résultats attendus dans l'interface de correction des exercices.

                                                    Bien cordialement,

                                                    Matthieu K.

                                                    • Partager sur Facebook
                                                    • Partager sur Twitter
                                                      9 avril 2018 à 17:59:56

                                                      Bonjour,
                                                      Merci pour le cours bien expliqué.
                                                      J'ai un souci à la section 3.Familiarisez-vous avec Hadoop. J'ai la même erreur avec le WordCount.jar et le streaming python. Je suis sous ubuntu 14.04 lts et j'ai installé hadoop en mode pseudo-distribué. Je pense, d'après l'erreur, avoir fait une mauvaise configuration mais je ne vois pas comment le résoudre. Auriez-vous des propositions?

                                                      cmd: hadoop/bin/hadoop jar ooc_cours1_wordcount.jar ooc.cours1.wordcount.WordCountDriver input/montexte.txt output

                                                      error:

                                                      ...

                                                      ...
                                                      18/04/09 17:52:13 INFO ipc.Client: Retrying connect to server: 0.0.0.0/0.0.0.0:8032. Already tried 8 time(s); retry policy is RetryUpToMaximumCountWithFixedSleep(maxRetries=10, sleepTime=1000 MILLISECONDS)
                                                      18/04/09 17:52:14 INFO ipc.Client: Retrying connect to server: 0.0.0.0/0.0.0.0:8032. Already tried 9 time(s); retry policy is RetryUpToMaximumCountWithFixedSleep(maxRetries=10, sleepTime=1000 MILLISECONDS)
                                                      18/04/09 17:52:14 INFO retry.RetryInvocationHandler: java.net.ConnectException: Your endpoint configuration is wrong; For more details see:  http://wiki.apache.org/hadoop/UnsetHostnameOrPort, while invoking ApplicationClientProtocolPBClientImpl.getNewApplication over null after 1 failover attempts. Trying to failover after sleeping for 39896ms.

                                                      -
                                                      Edité par ayité 9 avril 2018 à 18:06:16

                                                      • Partager sur Facebook
                                                      • Partager sur Twitter
                                                        29 mai 2018 à 21:40:17

                                                        Bonjour, je suis en train d'apprendre ce cours et au moment de tester le code de wordcount.py je reçois toujours cette erreur : 

                                                        print word.encode("utf8"), count

                                                                     ^

                                                        SyntaxError: invalid syntax

                                                        En un mot, il y a une syntaxe invalide. Quelqu'un peut m'aider?
                                                        • Partager sur Facebook
                                                        • Partager sur Twitter
                                                          31 mai 2018 à 18:15:53

                                                          Bonjour.

                                                          Voici une piste en l'absence de plus de précisions sur ton problème: la syntaxe que tu utilises pour print est celle de Python 2. Donc, si tu utilises Python 3, il faut rajouter des parenthèses, ce qui donne:

                                                          print(word.encode("utf8"), count)

                                                          Michel.

                                                          • Partager sur Facebook
                                                          • Partager sur Twitter
                                                          Rien n'arrive dans la vie... ni comme on le craint, ni comme on l'espère.
                                                            4 juin 2018 à 15:49:15

                                                            Bonjour et merci beaucoup Michel
                                                            • Partager sur Facebook
                                                            • Partager sur Twitter

                                                            [Cours] Calculs distribués sur données massives

                                                            × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                                                            • Editeur
                                                            • Markdown