Traitement de données massives

John Samuel
CPE Lyon

Année: 2024-2025
Courriel: john.samuel@cpe.fr

Creative Commons License

Big Data

Objectifs

  1. Machines virtuelles
  2. Conteneurs: Docker
  3. Orchestration: Kubernetes
  4. Analyse de données: Hadoop/HBase
  5. Analyse de données: Hive
  6. Analyse de données: Spark

Machines virtuelles

Machines virtuelles

Machines virtuelles

Hyperviseur

Conteneurs

Conteneurs: LXC (Linux Containers)

Conteneurs

Conteneurs: Docker

Docker

FROM ubuntu:latest
MAINTAINER John Samuel

RUN apt -y update && \
    apt -y upgrade && \
    apt -y install apache2 git

RUN git clone https://github.com/johnsamuelwrites/johnsamuelwrites.github.io

RUN rm -rf /var/www/html
RUN mv johnsamuelwrites.github.io /var/www/html

RUN echo "ServerName localhost" >>/etc/apache2/apache2.conf
EXPOSE 80
CMD apachectl -D FOREGROUND
			

Docker

Construction de l'image docker

docker build -t johnsamuel .
			

Exécution de l'image docker

docker run -dit -p 8080:80 johnsamuel`
			

Voir le lien: http://localhost:8080/

Reconstruction de l'image docker

docker build --no-cache -t johnsamuel .
			

Conteneurs

Docker Compose

  1. un outil permettant de définir et d'exécuter des applications Docker multi-conteneurs
  2. utilise des fichiers YAML pour configurer les services de l'application et effectue le processus de création et de démarrage de tous les conteneurs avec une seule commande.

Orchestration: Kubernetes

  1. Kubernetes est un système d'orchestration de conteneurs pour automatiser le déploiement, la mise à l'échelle et la gestion des applications informatiques.

Analyse des données: MapReduce

MapReduce

Analyse des données: Hadoop HDFS

Hadoop HDFS

Analyse des données: HBase

HBase

Apache HBase

Analyse des données: Apache Hive

Hive

Hive

Analyse des données: Apache Hive

        $  head /home/john/Downloads/query.csv
             itemLabel,year
             Amiga E,1993
             Embarcadero Delphi,1995
             Sather,1990
             Microsoft Small Basic,2008
             Squeak,1996
             AutoIt,1999
             Eiffel,1985
             Eiffel,1986
             Kent Recursive Calculator,1981
			
Hive

Analyse des données: Apache Hive

Hive
    $ export HADOOP_HOME="..."
    $ ./hive
    hive> set hive.metastore.warehouse.dir=${env:HOME}/hive/warehouse;
			

Analyse des données: Apache Hive

Hive
    $./hive
    hive> set hive.metastore.warehouse.dir=${env:HOME}/hive/warehouse;
    hive> create database mydb;
    hive> use mydb;
			

Analyse des données: Apache Hive

        $./hive
        hive> use mydb;
        hive> CREATE TABLE IF NOT EXISTS
             proglang (name String, year int)
             COMMENT "Programming Languages"
             ROW FORMAT DELIMITED FIELDS TERMINATED BY ','
             LINES TERMINATED BY '\n'
             STORED AS TEXTFILE;
        hive> LOAD DATA LOCAL INPATH '/home/john/Downloads/query.csv'
             OVERWRITE INTO TABLE proglang;
			
Hive

Analyse des données: Apache Hive

Hive
    $./hive
    hive> SELECT * from proglang;
    hive> SELECT * from proglang where year > 1980;
			

Analyse des données: Apache Hive

Hive
    $./hive
    hive> DELETE from proglang where year=1980;
    FAILED: SemanticException [Error 10294]: Attempt to do update
     or delete using transaction manager that does not support these operations.
			

Analyse des données: Apache Hive

        $./hive
        hive> set hive.txn.manager=org.apache.hadoop.hive.ql.lockmgr.DbTxnManager;
        hive> DELETE from proglang where year=1980;
	FAILED: RuntimeException [Error 10264]: To use
	  DbTxnManager you must set hive.support.concurrency=true
        hive> set hive.support.concurrency=true;
        hive> DELETE from proglang where year=1980;
	FAILED: SemanticException [Error 10297]: Attempt to do update
	  or delete on table mydb.proglang that is not transactional
        hive> ALTER TABLE proglang set TBLPROPERTIES ('transactional'='true') ;
	FAILED: Execution Error, return code 1 from i
          org.apache.hadoop.hive.ql.exec.DDLTask. Unable to alter table.
          The table must be stored using an ACID compliant format
	  (such as ORC): mydb.proglang
			

Analyse des données: Apache Hive

        $./hive
        hive> use mydb;
        hive> CREATE TABLE IF NOT EXISTS
             proglangorc (name String, year int)
             COMMENT "Programming Languages"
             ROW FORMAT DELIMITED FIELDS TERMINATED BY ','
             LINES TERMINATED BY '\n'
             STORED AS ORC;
        hive> LOAD DATA LOCAL INPATH '/home/john/Downloads/query.csv'
             OVERWRITE INTO TABLE proglangorc;
	FAILED: SemanticException Unable to load data to destination table.
          Error: The file that you are trying to load does not match
	   the file format of the destination table.
			
Hive

Analyse des données: Apache Hive

        $./hive
        hive> insert overwrite table proglangorc select * from proglang;
        hive> DELETE from proglangorc where year=1980;
	FAILED: SemanticException [Error 10297]: Attempt to do update
	  or delete on table mydb.proglangorc that is not transactional
        hive> ALTER TABLE proglangorc set TBLPROPERTIES ('transactional'='true') ;
        hive> DELETE from proglangorc where year=1980;
        hive> SELECT count(*) from proglangorc;
        hive> SELECT count(*) from proglangorc where year=1980;
			
Hive

Analyse des données: Apache Spark

Hive
                          $./pyspark
   >>> lines = sc.textFile("/home/john/Downloads/query.csv")
   >>> lineLengths = lines.map(lambda s: len(s))
   >>> totalLength = lineLengths.reduce(lambda a, b: a + b)
   >>> print(totalLength)
			

Analyse des données: Apache Spark

Hive
                          $./pyspark
   >>> lines = sc.textFile("/home/john/Downloads/query.csv")
   >>> lineWordCount = lines.map(lambda s: len(s.split()))
   >>> totalWords = lineWordCount.reduce(lambda a, b: a + b)
   >>> print(totalWords)
			

Analyse des données: Apache Spark

Apache SPARK et Jupyter
    $ export SPARK_HOME='.../spark/spark-x.x.x-bin-hadoopx.x/bin
    $ export PYSPARK_PYTHON=/usr/bin/python3
    $ export PYSPARK_DRIVER_PYTHON=jupyter
    $ export PYSPARK_DRIVER_PYTHON_OPTS='notebook'
    $ ./pyspark
			

Analyse des données: Apache Spark

Apache SPARK et Jupyter

Analyse des données: Apache Spark

Apache SPARK, Jupyter et Hive

    from pyspark.sql import HiveContext
    sqlContext = HiveContext(sc)
    sqlContext.sql("use default")
    sqlContext.sql("show tables").show()
			

Analyse des données: Apache Spark

Apache SPARK, Jupyter et Hive

    +--------+---------+-----------+
    |database|tableName|isTemporary|
    +--------+---------+-----------+
    | default| proglang|      false|
    | default|proglang2|      false|
    +--------+---------+-----------+
			

Analyse des données: Apache Spark

Apache SPARK, Jupyter et Hive

    result = sqlContext.sql("SELECT count(*) FROM proglang ")
    result.show()
    +--------+
    |count(1)|
    +--------+
    |     611|
    +--------+
			

Analyse des données: Apache Spark

Apache SPARK, Jupyter et Hive

    print(type(result))
			
    <class 'pyspark.sql.dataframe.DataFrame'>
			

Analyse des données: Apache Spark

Apache SPARK, Jupyter, Hive et Pandas

    import pandas as pd
    result = sqlContext.sql("SELECT count(*) as count FROM proglang ")
    resultFrame = result.toPandas()
    print(resultFrame)
			
    |count|
    +-----+
    |  611|
			

Analyse des données: Apache Spark

Apache SPARK, Jupyter, Hive et Pandas

    import pandas as pd
    result = sqlContext.sql("SELECT * FROM proglang ")
    resultFrame = result.toPandas()
    groups = resultFrame.groupby('year').count()
    print(groups)
			

Analyse des données: NLTK

Aanalyse des sentiments

    import nltk
nltk.download('vader_lexicon')

Analyse des données: NLTK

Aanalyse des sentiments

    from nltk.sentiment.vader import SentimentIntensityAnalyzer
    sia = SentimentIntensityAnalyzer()
    sentiment = sia.polarity_scores("this movie is good")
    print(sentiment)
    sentiment = sia.polarity_scores("this movie is not very good")
    print(sentiment)
    sentiment = sia.polarity_scores("this movie is bad")
    print(sentiment)
			

Analyse des données: NLTK

Aanalyse des sentiments

    {'neg': 0.0, 'neu': 0.508, 'pos': 0.492, 'compound': 0.4404}
{'neg': 0.344, 'neu': 0.656, 'pos': 0.0, 'compound': -0.3865}
{'neg': 0.538, 'neu': 0.462, 'pos': 0.0, 'compound': -0.5423}

Big Data

Lac de données

  1. un système ou un référentiel de données stockées dans leur format naturel/brut, généralement des blocs d'objets ou des fichiers
  2. Il donne la priorité au stockage rapide et volumineux de données hétérogènes
  3. Nous pouvons trouver tous les types de données suivants:
    • données structurées
    • données non-structurées
    • données semi-structurées

Références

Articles de recherche

Références

Articles de recherche

Références

Articles de recherche

Références

Articles de recherche

Références

Articles de recherche

Références

Articles de recherche

Références

Articles de recherche

Références

Articles de recherche

Références

Crédits d'images