[Big Data] Hortonworks : importation de données dans Hadoop avec HDP 2.x via Sqoop et analyse avec Hive

Ce billet montre comment importer des données issues d’une base de données avec Apache Sqoop dans un cluster Hadoop avec HDP, via la Sandbox de Hortonworks. Hive sera utilisé dans notre démonstration pour le stockage et l’analyse sous Hue.

SQL Server sera utilisée comme base de données source pour la démonstration.

Pour en savoir plus sur Hortonworks et HDP, vous pouvez aller ici.

Avant de commencer…

On supposera que la Sandbox contenant HDP 2.x a déjà été installée et configurée, avec un cluster Hadoop opérationnel.

L’objectif est, à partir d’une base de données SQL Server appelée AdventureWorks, d’importer des données vers un cluster Hadoop basé sur HDP, en utilisant Sqoop. On supposera que :

  • L’instance SQL Server source est déjà installée et sa base de données opérationnelle.
  • La table ciblée est Production.TransactionHistory qui contient l’historique de transactions commerciales.
  • Un login SQL appelé sqlhdp a été créé, avec sqlhdp2 comme mot-de-passe, et sans lui affecter nécessairement les droits sysadmin.
    • Via SQL Server Management Studio (SSMS) :

création d’un login puis ajout d’un user

  • Via T-SQL, au sein d’une fenêtre de requêtes de SSMS (ou SQLCMD) :
USE master
GO
CREATE LOGIN sqlhdp WITH PASSWORD=N'sqlhdp2', DEFAULT_DATABASE=AdventureWorks
GO
USE AdventureWorks
GO
CREATE USER sqlhdp FOR
LOGIN sqlhdp WITH
DEFAULT_SCHEMA=Production
GO
EXEC sp_addrolemember 'db_datareader', 'sqlhdp'
GO

L’adresse de l’instance et son port d’écoute peuvent être déterminés via la requête suivante :

SELECT CONNECTIONPROPERTY('local_net_address') AS 'local_net_address'
      ,CONNECTIONPROPERTY('local_tcp_port') AS 'local_tcp_port'
      ,CONNECTIONPROPERTY('net_transport') AS 'net_transport'
GO

Ce qui donnerait :


Entrée dans le vif du sujet

Installation et configuration de Hadoop avec la Sandbox

Voir ici.

Import de données dans Hive avec Sqoop

Avant d’importer les données de SQL Server, il faut installer le driver JDBC adéquat. Pour ce faire, suivez les étapes suivantes :

  • Allez dans le répertoire /usr/local :
cd /usr/local
  • Téléchargez et dézippez le driver :
curl -L 'http://download.microsoft.com/download/0/2/A/02AAE597-3865-456C-AE7F-613F99F850A8/sqljdbc_4.0.2206.100_enu.tar.gz' | tar xz

Si tout va bien :


Et en guise de vérification, un petit ls des familles :


  • Copiez le driver dans le répertoire de Sqoop (où <version_de_hdp> est la version de HDP utilisée) :
cp sqljdbc_4.0/enu/sqljdbc4.jar /usr/hdp/&lt;version_de_hdp&gt;/sqoop/lib

Allez dans le répertoire des bibliothèques de Sqoop, où a été copié le driver (un ls peut permettre de vérifier la présence du driver fraîchement copié) :

cd /usr/lib/sqoop/lib

Maintenant que le driver est installé, il ne reste plus qu’à importer les données. Le script ci-dessous va permet d’importer la structure et le contenu de la table InternetSales de SQL Server vers Hive :

sqoop import --connect "jdbc:sqlserver://192.168.181.1:1433;database=AdentureWorks;username=sqlhdp;password=sqlhdp2" --table TransactionHistory --hive-import -- --schema Production


Conformément à la syntaxe suivante, adaptée au driver utilisé :

sqoop import --connect "jdbc:sqlserver://&lt;IP Address&gt;;database=&lt;Database Name&gt;;username=&lt;Username&gt;;password=&lt;Password&gt;" --table &lt;Table Name&gt; --hive-import -- --schema &lt;Schema Name&gt;

Cela aura pour effet de lancer un job MapReduce qui va executer la commande sqoop :


La fin de l’opération d’import dans Hive donnera cet exemple de résultat :


La table TransactionHistory a été créée et remplie dans la base de données par défaut de Hive, au sein de Hadoop.

Analyse de données avec HiveQL sous Hue

Hue est une interface Web sous licence Apache, écrite en Python, permettant d’analyser des données dans un contexte user-friendly, à travers l’utilisation d’un certain nombre de composants de l’écosystème hadoopien. Il peut s’agir de Hive, Pig, Sqoop, MapReduce,

Elle peut également être utilisée comme explorateur de fichiers (HDFS), de jobs (MapReduce…), de bases de données (HBase…)…

Dans le contexte HDP, elle peut être accessible via l’adresse suivante : http://<Adresse_IP_générée_durant_l’installation_de_la_Sandbox> :8000 (soit, dans notre cas : http://192.168.86.128:8000).


Concernant l’analyse des données importées dans Hive, un clic sur l’icône relative à l’abeille – en haut, à gauche de l’interface -, permet d’accéder à Beeswax, l’interface de requêtage HivQL :

Au sein de l’éditeur de requêtes, il est donc possible de coder quelques requêtes HiveQL à exécuter pour analyser la table importée dans default, base de données par défaut de Hive :

  • Structure de la table :
DESCRIBE TransactionHistory;


  • Contenu :
SELECT * FROM TransactionHistory;


  • Requête plus spécifique : coût réel moyen de chaque produit entre 2007 et 2008.
SELECT ProductID, AVG(ActualCost)
FROM TransactionHistory
WHERE TransactionType='S'
        AND TransactionDate BETWEEN '2007-01-31' AND '2008-01-31'
GROUP BY ProductID;

Dans certains cas comme la requête ci-dessus, Tez, framework orienté performances, sera utilisé pour optimiser l’exécution de la requête HiveQL jugée complexe par l’optimiseur:


Si tout va bien :


Pour aller plus loin…

Jetez un coup d’œil ici. D’autres articles autour du Big Data et de HDP y seront pondus.

Publicités

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s