diff --git a/cesi/intro_big_data/presentation/img/Mapreduce.png b/cesi/intro_big_data/presentation/img/Mapreduce.png new file mode 100644 index 0000000..2f0dbeb Binary files /dev/null and b/cesi/intro_big_data/presentation/img/Mapreduce.png differ diff --git a/cesi/intro_big_data/presentation/slides.md b/cesi/intro_big_data/presentation/slides.md index a1e35fa..c4d3e2d 100644 --- a/cesi/intro_big_data/presentation/slides.md +++ b/cesi/intro_big_data/presentation/slides.md @@ -67,10 +67,22 @@ William Petit - S.C.O.P. Cadoles ### Vitesse +La fréquence de génération de données ne cesse d'augmenter. Être en capacité de traiter ce flux constant de données en temps réel est un défi. + +> **Exemple** +> +> Sur Twitter, environ 500 millions de messages sont envoyés par jour sur la plateforme. C'est environ **6000 messages/seconde.** [Source](http://www.internetlivestats.com/twitter-statistics/) +> +> Sur Snapchat, sur le 3eme trimestre de 2017, les utilisateurs s'envoyaient jusqu'à **3.5 milliards de 'snap' par jour**. [Source](https://www.statista.com/statistics/257128/number-of-photo-messages-sent-by-snapchat-users-every-day/) + --- ### Variété +L'avancée de la technologie aidant, les types des données généréess aujourd'hui sont multiples: texte, image, vidéo, son mais aussi modèle 3D, transactions de cryptomonnaies... + +Toutes ces données prennent des formes extrêmement diverses. + --- ## Aperçu technique des solutions @@ -91,9 +103,18 @@ William Petit - S.C.O.P. Cadoles #### Le modèle "MapReduce" +- Inventé par Google +- Inspiré des méthodes `map()` et `reduce()` que l'on retrouve classiquement dans les langages dits "fonctionnels". +- Modèle qui permet de paralléliser massivement le traitement de données. +- Très adapté aux opérations de filtrage/aggrégation. + --- -### Présentation d'Apache Spark et Apache Storm +**Découpage du traitement** + +![center](./img/Mapreduce.png) + +[Source](https://fr.wikipedia.org/wiki/MapReduce#/media/File:Mapreduce.png) --- @@ -103,14 +124,63 @@ William Petit - S.C.O.P. Cadoles ### Base de donnée orientée clé/valeur +Mode de stockage représentant le corpus de données sous la forme d'un ou plusieurs tableaux associatifs. + +Chaque clé (unique au sein d'une même collection) est associée à une valeur, qui peut être de différents types suivant le moteur utilisé. + +- **Usage** Stockage temporaire (cache), index, séries chronologiques, base de données embarquées... +- **Exemples** [LevelDB](http://leveldb.org/), [Redis](https://redis.io/), [Memcached](https://www.memcached.org/) + +--- + +**Exercice** + +Implémenter avec le langage de votre choix une "micro" base de données embarquée orientée clé/valeur. Les données devront être persistentes. + +Votre implémentation devra permettre les opérations suivantes: + +- Sauvegarder une valeur associée à une clé +- Récupérer une valeur associée à une clé +- Itérer sur les clés existantes dans la base de données + +--- + +**Exemple d'API** +```js +cont bbd = new BDD("./my/file.db"); + +// Récupérer une clé dans la base de données +var val = bdd.get("my-key1"); + +// Enregistrer une valeur dans la base de données +bdd.set("my-key2", "foobar"); + +// Itérer sur le clés de la base de données +bdd.forEachKeys(function(key) { + console.log(key); +}); +``` + --- ### Base de données orientée document +Mode de stockage représentant les données sous la forme de collections de "documents". + +Un document est un objet comportant des attributs valués. Un attribut peut lui même être un objet. + +- **Usage** Stockage de données structurées (XML, JSON) avec ou sans schémas. +- **Exemples** [MongoDB](https://www.mongodb.com/), [Elasticsearch](https://www.elastic.co/) + --- ### Base de données orientée colonne +Mode de stockage organisant les données sous forme de colonnes plutot que par rang comme les bases de données SQL classiques. + +- **Usage** Stockage de données dédiées à l'analyse statistiques et aux opérations d'aggrégation/filtrage par colonne. +- **Exemples** [Apache HBase](https://github.com/apache/hbase) + --- ### Base de données orientée graphe @@ -170,13 +240,20 @@ Chaque personne a également les attributs suivants: --- - ## Exploitation des données et cadre légal --- ### Qu'est ce qu'une données à caractère personnel ? +> Toute information identifiant **directement ou indirectement** une personne physique (ex. nom, no d’immatriculation, no de téléphone, photographie, date de naissance, commune de résidence, empreinte digitale...). +> +> -- CNIL + +[Source](https://www.cnil.fr/fr/definition/donnee-personnelle) + --- ### Le RGPD + +[Voir la page de la CNIL](https://www.cnil.fr/fr/reglement-europeen-sur-la-protection-des-donnees-ce-qui-change-pour-les-professionnels) diff --git a/cesi/intro_big_data/ressources/hadoop-compose/containers/hadoop/Dockerfile b/cesi/intro_big_data/ressources/hadoop-compose/containers/hadoop/Dockerfile index 6e199c9..e52b05f 100644 --- a/cesi/intro_big_data/ressources/hadoop-compose/containers/hadoop/Dockerfile +++ b/cesi/intro_big_data/ressources/hadoop-compose/containers/hadoop/Dockerfile @@ -36,6 +36,9 @@ RUN ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa &&\ COPY ./conf/supervisor.ini /etc/supervisor.d/hadoop.ini +COPY docker-entrypoint.sh /docker-entrypoint.sh +RUN chmod +x /docker-entrypoint.sh + EXPOSE 9870 8088 -CMD ["/usr/bin/supervisord", "-c", "/etc/supervisor.d/hadoop.ini"] \ No newline at end of file +CMD ["/docker-entrypoint.sh"] \ No newline at end of file diff --git a/cesi/intro_big_data/ressources/hadoop-compose/containers/hadoop/conf/supervisor.ini b/cesi/intro_big_data/ressources/hadoop-compose/containers/hadoop/conf/supervisor.ini index 3143320..4ffb91a 100644 --- a/cesi/intro_big_data/ressources/hadoop-compose/containers/hadoop/conf/supervisor.ini +++ b/cesi/intro_big_data/ressources/hadoop-compose/containers/hadoop/conf/supervisor.ini @@ -12,16 +12,6 @@ stderr_logfile=/dev/stderr stderr_logfile_maxbytes=0 priority = 0 -[program:namenode-format] -command = bin/hdfs namenode -format -directory = /opt/hadoop -stdout_logfile=/dev/stdout -stdout_logfile_maxbytes=0 -stderr_logfile=/dev/stderr -stderr_logfile_maxbytes=0 -autostart = true -priority = 10 - [program:namenode] command = bin/hdfs --config etc/hadoop namenode directory = /opt/hadoop diff --git a/cesi/intro_big_data/ressources/hadoop-compose/containers/hadoop/docker-entrypoint.sh b/cesi/intro_big_data/ressources/hadoop-compose/containers/hadoop/docker-entrypoint.sh new file mode 100644 index 0000000..faec0f0 --- /dev/null +++ b/cesi/intro_big_data/ressources/hadoop-compose/containers/hadoop/docker-entrypoint.sh @@ -0,0 +1,8 @@ +#!/bin/bash + +set -eo pipefail + +[ ! -e /var/container_run ] && bin/hdfs namenode -format +touch /var/container_run + +/usr/bin/supervisord -c /etc/supervisor.d/hadoop.ini \ No newline at end of file