Spark pour Azure HDInsight et Power BI – 1ère partie


Comme nous avons pu déjà le souligner, ce blog se veut un cadre d’échanges et de partage. J’ai donc aujourd’hui le plaisir de publier dans ce blog ce billet rédigé par Romain Casteres.

Je profite donc de cette occasion pour le remercier très sincèrement pour cette nouvelle contribution qui tombe, il faut le dire, à point nommé pour notre blog avec la sortie d’Apache Spark pour Azure HDInsight en version préliminaire publique le 11 juillet dernier. (Vous pouvez relire les détails dans l’annonce dans le billet Announcing Spark for Azure HDInsight public preview et retrouver les pointeurs clés dans le billet Microsoft delivers interactive analytics on Big Data with the release of Spark for Azure HDInsight.)

clip_image002

C’est également le cas avec toutes les évolutions de Power BI sur lesquelles nous sommes revenues récemment et bien sûr de fait la disponibilité générale de Power BI le 24 juillet (avec quelques précisions pour cette annonce dans le billet Over 500,000 unique users from 45,000 companies across 185 countries helped shape the new Power BI).

Romain est également désormais un collègue de travail comme il vient de rejoindre Microsoft France en tant que Microsoft Premier Field Engineer (PFE) – SQL Server & BI. Souhaitons-lui donc au passage la bienvenue et bonne chance dans ses nouvelles fonctions. Pour mémoire, Romain est également du membre du bureau du Groupe des Utilisateurs francophones de SQL Server (GUSS).

Romain reviendra, je l’espère, régulièrement en son nom propre partager sur ce blog. En attendant, je vous souhaite une bonne lecture de ce billet fort intéressant et n’hésitez pas à consulter sur le blog de Romain tous ses autres billets déjà publiés ! 😉 Vous pouvez aussi retrouver Romain bien évidemment sur Twitter et LinkedIn.

Le billet est découpé en deux parties, une première dédiée à Spark pour HDInsight et une seconde sur Power BI avec Spark

–Philippe

_____________________________________________________________________________________________

La famille Azure HDInsight s’agrandit, en effet il existe désormais quatre configurations de cluster dans Azure, en plus de la capacité à les personnaliser par des scripts !

Voici les quatre versions de HDInsight :

  1. Hadoop : Version adaptée du fameux Framework Big Data Hadoop. Aujourd’hui la version la plus récente est la HDInsight 3.2, elle se base sur la distribution Hortonworks Data Platform 2.2 (Hadoop 2.6) et est disponible sous Ubuntu 12.04 (UI Ambari !) comme sous Windows Server 2012 R2 !
  2. HBase : Apache HBase est une base de données NoSQL open source basée sur Hadoop. Dans sa dernière version disponible (HDInsight 3.2), le cluster Hadoop intègre HBase 0.98.4.
  3. Storm : Apache Storm est un système de calcul distribué et en temps réel permettant le traitement rapide de grandes volumétries de données. Dans sa dernière version disponible (HDInsight 3.2), le cluster Hadoop intègre Storm 0.9.3.
  4. Spark : Le Framework Apache Spark offre un modèle de programmation plus simple que celui d’Hadoop et offre des temps d’exécution jusqu’à 100 fois plus courts. Cette version est actuellement en version préliminaire publique, elle intègre la version 1.3.1 de Spark basée sur le cluster HDInsight 3.2. Actuellement, cette version est uniquement disponible sous Windows Server 2012 R2.

Analysons la tendance dans le monde sur ces outils depuis 2004 :

<script type="text/javascript" src="//www.google.fr/trends/embed.js?hl=fr&q=Apache+hadoop,+Apache+Spark,+Apache+Storm,+Apache+HBase,+HDInsight&cmpt=q&tz=Etc/GMT-2&tz=Etc/GMT-2&content=1&cid=TIMESERIES_GRAPH_0&export=5&w=500&h=330"></script>

https://www.google.fr/trends/explore#q=Apache%20hadoop%2C%20Apache%20Spark%2C%20Apache%20Storm%2C%20Apache%20HBase%2C%20HDInsight&cmpt=q&tz=Etc%2FGMT-2

clip_image004

Avec un zoom sur une année :

clip_image006

Il est clair que l’engouement pour Spark est aujourd’hui plus important que celui de Hadoop !

Dans ce billet, je vais donc présenter Spark. Je mettrai en exergue les différences avec Hadoop, ses qualités et ses faiblesses puis je créerai un cluster HDInsight Spark afin de le tester. Pour finir, nous analyserons les données du cluster avec Power BI !

Présentation de Spark

Originellement développé par AMPLab en 2009 dans l’Université UC Berkeley, Spark est rendu Open Source par Apache en 2010.

Au même titre que Hadoop, Spark est un Framework Big Data. Il peut s’exécuter au-dessus du Framework Hadoop ou en mode Standalone. Il ne possède pas d’infrastructure de fichiers distribués comme HDFS (Hadoop Distributed File System), c’est donc l’une des raisons pour l’exécuter au-dessus de Hadoop (Windows Azure Storage via l’Api HDFS dans Azure). Spark dispose de son propre gestionnaire de ressources (Standalone Scheduler) mais supporte aussi d’autres gestionnaires de ressources comme Mesos ou Yarn. Dans HDInsight, Spark utilise son propre gestionnaire de ressources et non Yarn.

Spark maintient les résultats intermédiaires en mémoire plutôt que sur disque, ce qui améliore les performances, en particulier lorsqu’il est nécessaire de travailler à plusieurs reprises sur le même jeu de données. Cela se rapproche d’un projet d’ores déjà disponible dans Hadoop : Tez.

Il nécessite cependant beaucoup de mémoire, lorsque la volumétrie des données à traiter excède la mémoire cumuler des nœuds du cluster, il bascule les données sur disque ce qui ralentit les traitements. Spark utilise les évaluations paresseuses (Lazy Evalutation), cela lui permet de lire le minimum nécessaire pour terminer la requête.

Spark manipule des RDDs (Resilient Distributed Datasets), ils représentent des ensembles de données d’objets qui sont distribués sur les nœuds du cluster et sont tolérants aux pannes. Comme Hadoop, Spark utilise des opérations de Shuffle, dans le cas de HDInsight Spark les données intermédiaires sont écrites sur le disque local des VM et non le Windows Azure Storage. Enfin Spark (développé en Scala) dispose d’un riche choix de langage de programmation : Java, Scala, Python, R (Spark 1.4), etc.

L’écosystème Spark :

  • Spark SQL : Un module SQL-Like pouvant utiliser le métastore de Hive, SerDes ou encore les UDF’s.
  • Spark Streaming : Un module pour le traitement en continu de flux de données.
  • MLIib : Un module de Machine Learning.
  • GraphX : Un module pour le calcul de graphe.

clip_image008

A contrario de Hadoop où les différentes couches d’abstractions au modèle de programmation Map Reduce ont été développées par différentes sociétés comme Pig par Twitter, Hive par Facebook, etc. Les différents composants de Spark ont été développés ensemble ce qui leur confère une meilleure interopérabilité.

Plutôt que de voir Spark comme un remplaçant de Hadoop, il est plus correct de le voir comme une alternative au Map Reduce ou encore à Tez. Je vous conseille de regarder la présentation d’Hortonworks comparant les performances de Hive Tez, Spark-SQL et de Hive Spark : http://fr.slideshare.net/hortonworks/hive-on-spark-is-blazing-fast-or-is-it-final

clip_image010

Spark pour HDInsight

Il est possible de personnaliser un cluster HDInsight lors de sa création et ainsi d’installer Spark sur un cluster HDInsight Hadoop, plus d’informations ici.

Cependant vous ne profiterez pas des avantages que le service HDInsight Spark offre :

  • Blocs-notes Zeppelin et Jupyter : préconfigurés pour le traitement interactif et la visualisation des données, ils sont disponibles à partir du tableau de bord du cluster.
  • Spark Job Server : Il s’agit d’un serveur d’API REST qui permet aux utilisateurs de soumettre et de surveiller à distance des travaux en cours d’exécution.
  • Prises-en en charge les requêtes simultanées : plusieurs requêtes d’un même utilisateur ou plusieurs requêtes de différents utilisateurs et applications peuvent partager les mêmes ressources de cluster.
  • Mise en cache sur des disques SSD : vous pouvez choisir de mettre en cache des données en mémoire ou dans les disques SSD attachés aux nœuds de cluster.
  • Connecteur à Azure Event Hubs : les clients peuvent créer des applications de diffusion en continu à l’aide de la fonctionnalité Event Hubs, et de Kafka.
  • Connecteurs pour les outils décisionnels les plus utilisés tels que Power BI et Tableau.
  • Bibliothèques Anaconda préinstallées : Anaconda fournit près de 200 bibliothèques pour l’apprentissage automatique, l’analyse des données, la visualisation, etc.
  • Scalabilité du nombre de nœuds du cluster.
  • Support technique 24 heures sur 24, 7 jours sur 7.
  • Etc.

Dans cet exemple, je vais installer un cluster HDInsight Spark et ainsi profiter de ces différents services. Après m’avoir authentifié sur le portail Azure : Création d’un service HDInsight ; Création personnalisée :

clip_image012

clip_image014

clip_image016

Pour des raisons de coûts, j’ai limité le nombre de nœuds de calcul du cluster à 1 et j’ai spécifié la région d’Europe du Nord.

clip_image018

clip_image020

Après une dizaine de minutes, mon cluster HDInsight Spark est disponible 🙂

clip_image022

Une fois le cluster créé, vous avez accès on plusieurs consoles d’administration et de développement. Le tableau de bord Spark permet d’avoir une vie d’ensemble du cluster, de gérer les ressources de celui-ci, d’accéder au Notebooks (Jupyter ou Zeppelin), de naviguer dans le système de fichier ou encore d’exécuter des requêtes HiveQL :

clip_image024

Le gestionnaire de ressources du cluster Spark vous permet de gérer des ressources telles que les CPUs, la RAM utilisées par les services du cluster (spark.executor.memory, java xmx setting, …), etc.

Pour tester HDInsight Spark, j’ai téléchargé un jeu de données Open Source provenant de la SNCF : « Les incidents de sécurité de la SNCF depuis 2014 » puis, j’ai uploadé le fichier .CSV dans un nouveau container du Blob Storage « sncf » :

image

Pour télécharger le fichier, rendez-vous ici : https://ressources.data.sncf.com/explore/dataset/incidents-securite/

Informations sur les données : Ne sont listés dans ce fichier que les évènements de sécurité impliquant un dysfonctionnement du système ferroviaire, qu’il soit d’origine interne ou externe. Les commentaires associés aux incidents de sécurité résultent d’informations obtenues à chaud, bien souvent avant que l’enquête ne soit achevée. Ce jeu de données indique également les incidents de sécurité de type "évènements de sécurité remarquable" (ESR). Un ESR est un incident de sécurité lié à la circulation effective d’un train qui met, ou risque de mettre, en danger la vie des personnes transportées et aux abords des installations ferroviaires (y compris les personnels, salariés de prestataires et sous-traitants).

<iframe src="https://ressources.data.sncf.com/explore/embed/dataset/incidents-securite/?tab=analyze&sort=date&dataChart=eyJxdWVyaWVzIjpbeyJjaGFydHMiOlt7InR5cGUiOiJjb2x1bW4iLCJmdW5jIjoiQ09VTlQiLCJjb2xvciI6InJhbmdlLURhcmsyIn0seyJ0eXBlIjoibGluZSIsImZ1bmMiOiJDT1VOVCIsImNvbG9yIjoicmFuZ2UtRGFyazIifV0sInhBeGlzIjoiZGF0ZSIsIm1heHBvaW50cyI6IiIsInRpbWVzY2FsZSI6Im1vbnRoIiwic29ydCI6IiIsInNlcmllc0JyZWFrZG93biI6ImVzciIsInN0YWNrZWQiOiJub3JtYWwiLCJjb25maWciOnsiZGF0YXNldCI6ImluY2lkZW50cy1zZWN1cml0ZSIsIm9wdGlvbnMiOnsidGFiIjoiYW5hbHl6ZSIsInNvcnQiOiJkYXRlIn19fV0sInRpbWVzY2FsZSI6InllYXIiLCJzaW5nbGVBeGlzIjp0cnVlfQ%3D%3D&static=false&datasetcard=true" width="400" height="300" frameborder="0"></iframe>

Depuis la fenêtre de requêté HiveQL, j’ai créé la table externe SNCF :

CREATE EXTERNAL TABLE sncf (Date STRING, Localisation STRING, ESR STRING, Type STRING, Commentaires STRING) ROW FORMAT DELIMITED FIELDS TERMINATED BY ‘\;’

STORED AS TEXTFILE LOCATION ‘wasb://sncf@pulswebspark.blob.core.windows.net/’

image

image

Pour des questions d’optimisation, j’ai créé la table « sncf_parquet », en utilisant le format PARQUET (format de stockage en colonne) :

CREATE EXTERNAL TABLE sncf_parquet (Date STRING, Localisation STRING, ESR STRING, Type STRING, Commentaires STRING) ROW FORMAT DELIMITED FIELDS TERMINATED BY ‘\;’ STORED AS PARQUET;

 

INSERT OVERWRITE TABLE sncf_parquet SELECT * FROM sncf WHERE Date <> ‘Date’;

Zeppelin est un service web permettant l’analyse et le requêtage de données interactives. Vous pouvez vous y connecter à partir de l’onglet Notebooks du cluster :

image

image

Les temps de réponse sont très bons, car la petite volumétrie de données rentre en mémoire.

Ceci conclut cette première partie. La seconde partie s’intéresse à l’utilisation de Power BI avec Spark avant de conclure.

Comments (0)

Skip to main content