University Labs

Hands-On Experience at ISTIC Semester 5 Edition

View on GitHub

Big Data

Below is my essay summarizing what we studied leading up to the big data practical exam. I am sharing it here for your reference.

You can check the PDF Version if your prefer.

Required Install

You don’t know how to get started with Virtual Machines? Check this one

After checking the provided link, you will just download cloudera image instead of PopOS!

Get Started Commands

Map Reduce

Hadoop computation model – Data stored in a distributed file system spanning many inexpensive computers – Bring function to the data – Distribute application to the compute resources where the data is stored • Scalable to thousands of nodes and petabytes of data


Manipulation Cloudera

Spark

• Apache Spark is a fast and general engine for large-scale data processing.
• Spark has a variety of advantages including:

Spark API

Each Spark application consists of à driver program that execute the user’s main function and initiates several parallel operations on the cluster. The main abstraction provided by Spark is an RDD (Resilient Distributed Dataset), which represents a collection of elements partitioned through the nodes of the cluster, and on which we can operate in parallel. RDDs are created from a file in HDFS for example, then transform it. Users can instruct Spark to save an RDD in memory, allowing it to be reused efficiently across multiple parallel operations.


using spark-shell

Transformations and Actions

Passons aux transformations. Elles prennent un (ou deux) DataFrame en entrée, produisent un DataFrame en sortie. Pour construire un Dataset comprenant seulement les lignes de texteSophie qui contiennent « poupée », et retourner un tableau avec ses 2 premières lignes on exécute cette commande :

Pour construire un Dataset comprenant les longueurs des lignes de texteSophie et retourner un tableau avec ses 5 premières lignes on exécute cette commande :

On peut combiner une transformation et une action. En fait, avec Scala, on peut chaîner les opérations et ainsi définir très concisément le workflow.

Terms Counter

On crée un premier RDD constitué de tous les termes :

On introduit la notion de comptage : chaque terme vaut 1. L’opérateur map produit un document en sortie pour chaque document en entrée. On peut s’en servir ici pour enrichir chaque terme avec son compteur initial.

L’étape suivante regroupe les termes et effectue la somme de leurs compteurs : c’est un opérateur reduceByKey.

On peut faire toute en une fois ` :paste
val compteurTermes = textsophie.flatMap({ line => line.split(“ “) })
.map({ word => (word, 1) })
.reduceByKey({ (a, b) => a + b })
compteurTermes.collect()`

Finalement, si on souhaite conserver en mémoire le résultat final il suffit de faire:

TEST Spark

Dans le but de tester l’exécution de spark, commencer par créer un fichier file1.txt dans votre noeud master, contenant le texte suivant :

Hello Spark Wordcount! Hello Hadoop Also :)

Charger ensuite ce fichier dans HDFS:

Maintenant taper la commande suivante:

Vous pourrez tester spark avec un code scala simple comme suit (à exécuter ligne par ligne):

Pour afficher le résultat, sortir de spark-shell en cliquant sur Ctrl-C. Télécharger ensuite le répertoire file1.count créé dans HDFS comme suit :

Puis exécuter cette commande :

Actions SAMPLE

Action Dans les exemples précédents, count, first, take, collect et reduce sont des exemples d’actions. Voici ci-dessous quelques actions parmi les plus utilisées.

Transformation SAMPLE

Hbase

HBase is a columnar datastore, which means that the data is organized in columns as opposed to traditional rows where traditional RDMBS is based upon.


  1. Lancez hbase shell à l’aide de la commande : hbase shell
  2. Créez une table HBase avec trois familles de colonnes à l’aide de la commande create : hbase(main):001:0> create 'table_1', 'column_family1', 'column_family2', 'column_family3'

  3. Vérifiez les propriétés par défaut utilisées pour les familles de colonnes à l’aide de la commande describe :

  4. Spécifiez la compression pour une famille de colonnes dans la table. Pour HBase packagé avec BigInsights, seule la compression gzip peut être utilisée prête à l’emploi. Utilisez la commande alter. Pour modifier une table, elle doit d’abord être désactivée.

hbase(main):003:0> disable ‘table_1’ hbase(main):004:0> alter 'table_1', {NAME => 'column_family1', COMPRESSION => 'GZ'}

  1. Spécifiez l’option IN_MEMORY pour une famille de colonnes qui sera fréquemment interrogée. hbase(main):005:0> alter 'table_1', {NAME => 'column_family1', IN_MEMORY => 'true'}

  2. Spécifiez le nombre requis de versions comme 1 pour la famille de colonnes. hbase(main):006:0> alter 'table_1', {NAME => 'column_family1', VERSIONS => 1}

  3. Exécutez de nouveau la description par rapport au tableau pour vérifier les modifications. Avant de pouvoir charger des données, vous devez activer la table. hbase(main):007:0> enable 'table_1' hbase(main):008:0> describe 'table_1'

  4. Insérez les données à l’aide de la commande put. Chaque ligne peut avoir un ensemble différent de colonnes. Vous trouverez ci-dessous un ensemble de commandes put qui inséreront deux lignes avec un ensemble différent de noms de colonnes. La syntaxe de la commande put est put ‘table’ ‘clé’ ‘famille:colonne’ valeur.
    hbase(main):009:0> put 'table_1', 'row1', 'column_family1:c11', 'r1v11'
    hbase(main):010:0> put 'table_1', 'row1', 'column_family1:c12', 'r1v12'
    hbase(main):011:0> put 'table_1', 'row1', 'column_family2:c21', 'r1v21'
    hbase(main):012:0> put 'table_1', 'row1', 'column_family3:c31', 'r1v31'
    hbase(main):013:0> put 'table_1', 'row2', 'column_family1:d11', 'r2v11'
    hbase(main):014:0> put 'table_1', 'row2', 'column_family1:d12', 'r2v12'
    hbase(main):015:0> put 'table_1', 'row2', 'column_family2:d21', 'r2v21'

  5. Vérifiez que les deux lignes ont été insérées à l’aide de la commande count. La commande count fonctionne pour les petites tables. hbase(main):016:0> count 'table_1'

  6. Pour afficher les données, vous pouvez utiliser get, qui renvoie les attributs d’une ligne spécifiée, ou scan qui permet l’itération sur plusieurs lignes. hbase(main):017:0> get 'table_1', 'row1'

  7. Maintenant, exécutez la commande scan pour voir une liste de valeurs par ligne. hbase(main):018:0> scan 'table_1'

  8. HBase n’a pas de commande ou d’API de mise à jour. Une mise à jour est identique à celle d’un autre ensemble de valeurs de colonne pour la même clé de ligne. Mettez à jour les valeurs dans : column_family1 (avec VERSIONS => 1) et column_family2 (avec VERSIONS => 3).
    hbase(main):019:0> put 'table_1', 'row1', 'column_family1:c11', 'n1v11'
    hbase(main):020:0> put 'table_1', 'row2', 'column_family1:d11', 'n2v11'
    hbase(main):021:0> put 'table_1', 'row2', 'column_family2:d21', 'n2v21'

La commade scan affichera les valeurs mises à jour des lignes. hbase(main):022:0> scan 'table_1'

  1. Affichez les valeurs avec les différentes versions stockées pour column_family2.

hbase(main):023:0> scan 'table_1', {VERSIONS => 2}