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