Vous êtes sur la page 1sur 8

Big Data Analytics 4ERP-BI

Big Data Analytics


Workshop Apache Sqoop & Hive

I- Objectifs
Ce workshop permet aux participants d’exploiter les différents outils de Big data (Hive,
MySQL, Sqoop, HDFS, Avro) pour faire pour importer les données d’une base de données
relationnelle MySQL vers HDFS avec CDH (Cloudera Distribution Including Apache Hadoop)
et les manipuler sous HIVE.

II- Introduction
Les technologies Big Data peuvent être utilisées pour enrichir et optimiser les bases de données
relationnelles et les entrepôts de données. Ceci est une idée très populaire, et elle prend plusieurs
noms mais tous simplement on peut l’appeler « Data Warehouse Augmentation ». Il s’agit de
décrire comment on peut enrichir les supports de discisions traditionnelles et les applications
orientées Data Warehouse avec des sources de données non traditionnelles non supportés par
les systèmes de Data Warehouse classiques. La figure ci-dessous décrit l’extraction et le
chargement des données dans HDFS. Les données structurées sont importées depuis les sources
transactionnelles, et certaines tables dimensions peuvent être récupérées depuis le
datawarehouse existant. Les données non structurées sont aussi importées dans leur état brut.

1
Big Data Analytics 4ERP-BI

Dans ce qui suit, on va se focaliser sur l’importation des données à partir de la base de données
relationnelle MySQL vers HDFS et manipulation des données dans HIVE.

III- Contexte des scénarios

Dans les scénarios de ce workshop, on se focalise sur les données relatives à l’entreprise
DataCo. Le schéma relationnel de la base de données correspondante est présenté à travers la
figure ci-dessous.

Pour analyser ces données, nous avons besoin de les migrer dans le système Hadoop Distributed
File System (HDFS). Pour cette raison, nous avons besoin de trouver un outil qui permet de
transférer facilement des données structurées à partir d'un SGBDR à HDFS, tout en préservant
leur structure. Cela nous permet d'interroger les données sur HDFS sans affecter les données
du SGBDR. Cet outil est Apache Sqoop, qui fait partie du CDH. Il permet de charger
automatiquement nos données relationnelles de MySQL en HDFS, tout en préservant la
structure.

Avec quelques paramètres de configuration supplémentaires, nous pouvons aller un peu plus
loin en chargeant ces données relationnelles directement dans une forme prête à être interrogée
par Hive ou Impala (le moteur de recherche analytique open source inclus avec CDH). Les
données sur HDFS peuvent être stockées sous une forme binaire ou une forme textuelle, nous

2
Big Data Analytics 4ERP-BI

visons exploiter le type de fichier Avro qui représente un format de fichier optimisé dans
Hadoop.

IV- Installation MySQL pour CDH 4.7

Pour pouvoir importer les données, on commence par installer MySQL dans Cloudera 4.7. Pour
ce faire, on doit exécuter les instructions suivantes :

sudo yum --disablerepo=epel -y update ca-certificates

sudo yum install mysql-server

sudo service mysqld start

Une fois, le service mysql démarré, on se connecte à mysql, on crée un nouvel utilisateur et on
importe la base de données à partir du fichier retail_db.sql.

mysql -u root -p

mysql> create user retail_dba identified by ‘retailer’;

mysql> create database retail_db;

mysql> grant all on retail_db.* to retail_dba;

mysql> use retail_db;

mysql> source retail_db.sql

mysql> show tables;

V- Scénario 1 : Importation de la base de données retail_db de MYSQL dans


HIVE sans métadonnées

Dans ce scénario, on se propose d’importer la totalité des la base de données retail_db dans
HIVE. Il faut suivre les étapes suivantes :

1. On crée la base de données h_retail_db

Hive> create database h_retail_db

2. Vérification de la création du dossier correspondant sous HDFS (h_retail_db.db)

hdfs dfs -ls /user/hive/warehouse

3
Big Data Analytics 4ERP-BI

3. Pour importer la base de données retail_db, on exécute le script suivant (dans un


nouveau terminal :

sqoop import-all-tables --connect jdbc:mysql://localhost:3306/retail_db --username=retail_dba --


password=cloudera --warehouse-dir=/user/hive/warehouse/h_retail_db.db --m=1

En fonction du volume des données à importer, cette commande peut prendre un peu de temps
pour se terminer. Elle lance des opérations (jobs) MapReduce pour transférer les données de la
base de données MySQL, vers HDFS

4. Vérification de l'importation des fichiers dans h_retail_db.db

hdfs dfs -ls /user/hive/warehouse/h_retail_db.db

hdfs dfs -ls /user/hive/warehouse/h_retail_db.db/departments

5. Maintenant, on doit importer les tables dans HIVE. Donc on doit créer les tables
correspondantes :
Create external table h_departments(department_id int, department_name string)

row format delimited fields terminated by ','

Location '/user/hive/warehouse/h_retail_db.db/departments';

select * from h_departments;

VI- Scénario 2 : Importation de la base de données retail_db de MYSQL dans


HIVE avec métadonnées (AVRO files)
1. Importation des données dans HDFS

sqoop import-all-tables \

-m 1 \

--connect jdbc:mysql://localhost:3306/retail_db \

--username=retail_dba \

--password=cloudera \

--compression-codec=snappy \

--as-avrodatafile \

--warehouse-dir=/user/hive/warehouse

4
Big Data Analytics 4ERP-BI

2. Vérification de l'importation des données

hdfs dfs -ls /user/hive/warehouse

3. Visualisation des fichiers avro correspondants à la table departments

hdfs dfs -ls /user/hive/warehouse/departments

4. Visualisation des métadonnées (Le schéma Avro)


Sqoop a migré les donnes relationnelles vers un format binaire (Avro) tout en gardant leurs
structure dans un fichier de schéma d’extension « .avsc » (Avro schéma). Ce fichier se trouve
dans votre répertoire personnel. Pour lister les fichiers de schéma Avro (les fichiers d'extension
avsc), exécutez cette commande :

ls -l *.avsc

On peut visualiser le contenu du fichiers departments.avsc. Il contient le schéma relationnel de


la table departments. De ce fait, l’importation des tables sous le format Avro permet de faciliter
leurs importations dans Hive.

5. Importation des schémas des tables (fichiers .avsc )du local vers HDFS

Il est à noter que le schéma et les données sont stockés dans des fichiers séparés (.avro et .avsc).
Le schéma est appliqué uniquement lorsque les données sont interrogées en se basant sur une
technique appelée 'schema-on-read'.

Cela donne la souplesse nécessaire pour interroger les données avec SQL même si elles sont
dans un format Avro. Tandis que, si on manipule une base de données traditionnelle, il est
obligatoire de définir le schéma avant de gérer des données.

A ce niveau, nous avons importé une grande quantité de données (de SGBD vers HDFS) sans
préciser comment les interroger en utilisant leurs structures.

Les schémas Avro ont été générés dans le système local contrairement aux données qui sont
générées sous HDFS.

Pour interroger ces données avec Apache Hive, nous devons copier les fichiers d’extension
(.avsc) dans HDFS de cette manière :

5
Big Data Analytics 4ERP-BI

hdfs dfs –mkdir /user/cloudera/Retail_db_Schema

hdfs dfs -put /*.avsc /user/cloudera/Retail_db_Schema

Après avoir importé les données et leur schéma dans HDFS, nous passons maintenant à
l’interrogation en utilisant Apache Hive.

6. Création des tables et importation des données sous Hive

Pour créer des tables à partir des fichiers Avro nous devons exécuter ces requêtes de création
des tables comme suit :

a- Création de la table externe « Departments »

CREATE EXTERNAL TABLE departments STORED AS AVRO

LOCATION 'hdfs:///user/hive/warehouse/departments'

TBLPROPERTIES ('avro.schema.url'= hdfs://localhost

/user/cloudera/Retail_db_Schema/departments.avsc');

Select * from departments;

b- Création de la table externe externe « Categories »

CREATE EXTERNAL TABLE categories STORED AS AVRO

LOCATION 'hdfs:///user/hive/warehouse/categories

TBLPROPERTIES ('avro.schema.url'= hdfs://localhost

/user/cloudera/Retail_db_Schema/categories.avsc');

Select * from categories;

c- Création de la table externe « Customers »

CREATE EXTERNAL TABLE customers STORED AS AVRO

LOCATION 'hdfs:///user/hive/warehouse/customers

TBLPROPERTIES ('avro.schema.url'= hdfs://localhost

/user/cloudera/Retail_db_Schema/customers.avsc');

Select * from customers;

6
Big Data Analytics 4ERP-BI

d- Création de la table externe « Orders »

CREATE EXTERNAL TABLE orders STORED AS AVRO

LOCATION 'hdfs:///user/hive/warehouse/orders

TBLPROPERTIES ('avro.schema.url'= hdfs://localhost

/user/cloudera/Retail_db_Schema/orders.avsc');

Select * from orders;

e- Création de la table externe « Order_items »

CREATE EXTERNAL TABLE order_items STORED AS AVRO

LOCATION 'hdfs:///user/hive/warehouse/order_items

TBLPROPERTIES ('avro.schema.url'= hdfs://localhost

/user/cloudera/Retail_db_Schema/order_items.avsc');

Select * from order_items;

f- Création de la table externe « Products »

CREATE EXTERNAL TABLE products STORED AS AVRO

LOCATION 'hdfs:///user/hive/warehouse/products

TBLPROPERTIES ('avro.schema.url'= hdfs://localhost

/user/cloudera/Retail_db_Schema/products.avsc');

Select * from products;

VII. Scénario 3 : Importations des données à travers une sous interrogation directement
sous Hive

Dans e scénario, on se propose d’importer quelques lignes de la table « catégories » de la base


de données MySQL directement dans Hive.

Pour ce faire, il faut tout d’abord vérifier que le dossier « /user/cloudera » ne contient pas un
dossier « categories ». Dans le cas contraire, il faut le supprimer (Sqoop importe la copie de la

7
Big Data Analytics 4ERP-BI

table dans un dossier portant le nom de la table dans « /user/cloudera » puis la transfère à
« hive/warehouse »).

La commande suivante permet de supprimer le dossier « catégorie ».

hdfs dfs -rm -r /user/cloudera/categories

Maintenant, on exécute la commande suivante pour importer quelques lignes de la table


catégories.

sqoop import --connect jdbc:mysql://localhost:3306/retail_db --username=retail_dba --


password=cloudera --hive-import --table=categories --where "category_id between 1 and 22" --m=1

Pour vérifier, on doit interroger la table catégories sous Hive.

Vous aimerez peut-être aussi