Traitement de données massives

John Samuel
CPE Lyon

Année: 2020-2021
Courriel: john(dot)samuel(at)cpe(dot)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

Crédits d'images