dryadlinq comment passer à l'échelle le traitement de données volumineuses ?
DESCRIPTION
TC301. DryadLINQ Comment passer à l'échelle le traitement de données volumineuses ?. Xavier Pillons Principal Program Manager Microsoft Corporation. Le marché du « Data Intensive Scalable Computing » (DISC). Le spectre des besoins des utilisateurs de DISC est large - PowerPoint PPT PresentationTRANSCRIPT
![Page 1: DryadLINQ Comment passer à l'échelle le traitement de données volumineuses ?](https://reader035.vdocuments.site/reader035/viewer/2022070421/568160c4550346895dcff003/html5/thumbnails/1.jpg)
![Page 2: DryadLINQ Comment passer à l'échelle le traitement de données volumineuses ?](https://reader035.vdocuments.site/reader035/viewer/2022070421/568160c4550346895dcff003/html5/thumbnails/2.jpg)
2
DryadLINQComment passer à l'échelle le traitement de données volumineuses ?Xavier PillonsPrincipal Program ManagerMicrosoft Corporation
TC301
![Page 3: DryadLINQ Comment passer à l'échelle le traitement de données volumineuses ?](https://reader035.vdocuments.site/reader035/viewer/2022070421/568160c4550346895dcff003/html5/thumbnails/3.jpg)
3
Le marché du « Data Intensive Scalable Computing » (DISC)• Le spectre des besoins des utilisateurs de DISC est
large• A une extrémité se trouve l’analyse traditionnelle des
entrepôts de données structurées. L’analyste connait le cube qu’il/elle désire construire ainsi que les sources de données.
• Une autre extrémité est l’analyse de données brutes non structurées. L’analyste ne connait pas exactement ce que contiennent les données ni quel cube pourrait être construit. L’analyste a besoin de traitements ad-hoc qui ne pourraient jamais être rejoués.
• Windows HCP Server+Dryad cible l’analyse de données brutes non structurées.
![Page 4: DryadLINQ Comment passer à l'échelle le traitement de données volumineuses ?](https://reader035.vdocuments.site/reader035/viewer/2022070421/568160c4550346895dcff003/html5/thumbnails/4.jpg)
4
Windows HPC+Dryad en complément de l’offre Microsoft• Microsoft a déjà une excellente plateforme
de gestion des données• SQLServer Integration Services (SSIS),
PowerPivot, Parallel Data Warehouse (PDW), Stream Insight…
• HCP Server+Dryad cible l’analyse de données brutes non structurées• Permet de nouvelles solutions mixant plusieurs
technologies de traitement des données• Ex : HPC+Dryad en entrée de SSIS puis d’un
traitement BI plus traditionnel
![Page 5: DryadLINQ Comment passer à l'échelle le traitement de données volumineuses ?](https://reader035.vdocuments.site/reader035/viewer/2022070421/568160c4550346895dcff003/html5/thumbnails/5.jpg)
5
Un exemple de mise en œuvre de DISC• Razorfish vend du marketing de publicités
ciblés sur le net.• Besoin d’analyser des TeraOctets de clics sur les
sites de leurs clients pour cibler les visiteurs et leur montrer une annonce appropriée.
• L’analyse est nettement moins cher avec un système DISC qu’avec une super base SQL
• Razorfish a mis en œuvre Hadoop (Implémentation OSS du concept MapReduce)
![Page 6: DryadLINQ Comment passer à l'échelle le traitement de données volumineuses ?](https://reader035.vdocuments.site/reader035/viewer/2022070421/568160c4550346895dcff003/html5/thumbnails/6.jpg)
6
Quelle est la réponse de Microsoft ?
![Page 7: DryadLINQ Comment passer à l'échelle le traitement de données volumineuses ?](https://reader035.vdocuments.site/reader035/viewer/2022070421/568160c4550346895dcff003/html5/thumbnails/7.jpg)
7
Dryad est une technologie utilisée en interne chez Microsoft pour des scénarios DISC• Dryad a été utilisé par Microsoft Search
pendant 5 ans sur des milliers de serveurs• Dryad est à la pointe de la recherche et du
calcul distribué• Dryad est une technologue éprouvée et
nous la rendons disponible via Windows HPC Server 2008 SP1
![Page 8: DryadLINQ Comment passer à l'échelle le traitement de données volumineuses ?](https://reader035.vdocuments.site/reader035/viewer/2022070421/568160c4550346895dcff003/html5/thumbnails/8.jpg)
8
Dryad / DryadLinq / DSC
Déploiement HPC, ordonnancement, etc.
MPI SOA Dryad
Windows Server Azure
Runtime distribué
Services pour Cluster et Cloud
Plateforme
Distributed Storage Catalog
Assemble des partages NTFS pour le moteur distribué de Dryad
Ajouts spécifiques pour le DISC
C#, C++, …C#/LINQ pour Dryad
Visual Studio, Excel, etc.Visual Studio pour
C#/LINQ
Langages et Librairies
Outils de développement
![Page 9: DryadLINQ Comment passer à l'échelle le traitement de données volumineuses ?](https://reader035.vdocuments.site/reader035/viewer/2022070421/568160c4550346895dcff003/html5/thumbnails/9.jpg)
9
Dryad permet au HPC de résoudre de nouveaux types de problèmes
MPI SOA
Dryad Optimise le déplacement des données plutôt que l’usage du CPU afin de
faciliter les travaux intensifs en E/S.
Optimise l’usage du CPU pour les problèmes
faiblement couplés comme la simulation de produits financier complexes, etc.
Optimise l’usage du CPU pour des problèmes
fortement couplés comme la modélisation du climat, la mécanique des fluides,
etc…Orienté CPU
Orienté Données
![Page 10: DryadLINQ Comment passer à l'échelle le traitement de données volumineuses ?](https://reader035.vdocuments.site/reader035/viewer/2022070421/568160c4550346895dcff003/html5/thumbnails/10.jpg)
10
HPC + Dryad adressent le marché du DISC pour les clusters et Azure• L’utilisateur écrit des programmes à l’aide de
Visual Studio. Puis Windows HPC + Dryad exécute ces programmes en les passant à l’échelle.
HPC Scheduler
Visual Studio
Pour l’utilisateur: Exécuter un programme C#En interne : Soumet un travail HPC
HPC Compute
Node
Sur un Cluster: Exécute des calculs qui lisent/écrivent beaucoup de fichiers.
HPC Azure Node
Dans Azure: Exécute des calculs qui lisent/écrivent beaucoup de blobs.
![Page 11: DryadLINQ Comment passer à l'échelle le traitement de données volumineuses ?](https://reader035.vdocuments.site/reader035/viewer/2022070421/568160c4550346895dcff003/html5/thumbnails/11.jpg)
11
‘Pipe’ à 2 Dimensions
Pipe Unix: 1-Dgrep | sed | sort | awk | perl
Dryad: 2-D grep1000 | sed500 | sort1000 | awk500 | perl50
![Page 12: DryadLINQ Comment passer à l'échelle le traitement de données volumineuses ?](https://reader035.vdocuments.site/reader035/viewer/2022070421/568160c4550346895dcff003/html5/thumbnails/12.jpg)
12
Un job Dryad est un graphe acyclique dirigé (DAG)
Vertex d’éxécution
Canauxd’échanges
Entrées
Sorties
![Page 13: DryadLINQ Comment passer à l'échelle le traitement de données volumineuses ?](https://reader035.vdocuments.site/reader035/viewer/2022070421/568160c4550346895dcff003/html5/thumbnails/13.jpg)
13
Un besoin simple
Pages web les plus visitées par xavier
var logentries = from line in logs where !line.StartsWith("#") select new LogEntry(line);var user = from access in logentries where access.user.EndsWith(@"\xavier") select access;var accesses = from access in user group access by access.page into pages select new UserPageCount(“xavier", pages.Key, pages.Count());var htmAccesses = from access in accesses where access.page.EndsWith(".htm") orderby access.count descending select access;
![Page 14: DryadLINQ Comment passer à l'échelle le traitement de données volumineuses ?](https://reader035.vdocuments.site/reader035/viewer/2022070421/568160c4550346895dcff003/html5/thumbnails/14.jpg)
14
Les Etapes de cette requêtevar logentries = from line in logs where !line.StartsWith("#") select new LogEntry(line);var user = from access in logentries where access.user.EndsWith(@"\xavier") select access;var accesses = from access in user group access by access.page into pages select new UserPageCount(“xavier", pages.Key, pages.Count());var htmAccesses = from access in accesses where access.page.EndsWith(".htm") orderby access.count descending select access;
Parcours logs et garde seulement les lignes qui ne sont pas des commentaires. Transforme chaque ligne en un objet LogEntry.
Parcours logentries et conserve seulement les entrées correspondant à xavier.
Groupe les accès de xavier en fonction de chaque page correspondante. Pour chaque page compte le nombre d’occurence.
Trie les pages accédées par xavier en fonction de leur fréquence d’accès.
![Page 15: DryadLINQ Comment passer à l'échelle le traitement de données volumineuses ?](https://reader035.vdocuments.site/reader035/viewer/2022070421/568160c4550346895dcff003/html5/thumbnails/15.jpg)
15
Exécution séquentiellevar logentries = from line in logs where !line.StartsWith("#") select new LogEntry(line);var user = from access in logentries where access.user.EndsWith(@"\xavier") select access;var accesses = from access in user group access by access.page into pages select new UserPageCount(“xavier", pages.Key, pages.Count());var htmAccesses = from access in accesses where access.page.EndsWith(".htm") orderby access.count descending select access;
Pour chaque ligne de logs faire …
Pour chaque entrée dans logentries faire …
Trie les entrées dans user par page. Puis itèrer sur la liste triée et compter les occurences de chaque page.
Trier à nouveau les entrées de access par fréquence d’accès aux pages.
![Page 16: DryadLINQ Comment passer à l'échelle le traitement de données volumineuses ?](https://reader035.vdocuments.site/reader035/viewer/2022070421/568160c4550346895dcff003/html5/thumbnails/16.jpg)
16
Exécution parallèle avec Dryad
var logentries = from line in logs where !line.StartsWith("#") select new LogEntry(line);var user = from access in logentries where access.user.EndsWith(@"\xavier") select access;var accesses = from access in user group access by access.page into pages select new UserPageCount(“xavier", pages.Key, pages.Count());var htmAccesses = from access in accesses where access.page.EndsWith(".htm") orderby access.count descending select access;
logentries
user
logs
accesses
htmAccesses
output
![Page 17: DryadLINQ Comment passer à l'échelle le traitement de données volumineuses ?](https://reader035.vdocuments.site/reader035/viewer/2022070421/568160c4550346895dcff003/html5/thumbnails/17.jpg)
17
Vue d’ensemble d’un job HPC + Dryad
Application qui utilise les APIs de Dryad
HPC Head Node
DSC
Soumet un Job Dryad
1
1
Le job Dryad démarre aussi un ensemble de tâches « parametric
sweep » sur les autres nœuds en tant que DVH
2b
Un Job Dryad démarre une tâche simple en
assignant à un nœud le rôle de DGM
2a
2a
Les vertex Dryad lisent et écrivent les fichiers de données
3b
Dryad Graph Manager démarre/arrête les
vertex Dryad
3a
HPC Compute Nodes
3a
3b2b
Dryad Graph Manager
Dryad Vertex Host
![Page 18: DryadLINQ Comment passer à l'échelle le traitement de données volumineuses ?](https://reader035.vdocuments.site/reader035/viewer/2022070421/568160c4550346895dcff003/html5/thumbnails/18.jpg)
18
Dryad exécute le graphe en associant des vertex aux instances des Dryad Vertex Hosts
Vertex d’éxécution
Canauxd’échanges
Entrées
Sorties
Ressources disponibles
![Page 19: DryadLINQ Comment passer à l'échelle le traitement de données volumineuses ?](https://reader035.vdocuments.site/reader035/viewer/2022070421/568160c4550346895dcff003/html5/thumbnails/19.jpg)
19
Mécanismes internes
Application qui utilise les APIs de Dryad
HPC Head Node
DSC1
Le job Dryad démarre aussi un ensemble de tâches « parametric
sweep » sur les autres nœuds en tant que DVH
2b
Un Job Dryad démarre une tâche simple en
assignant à un nœud le rôle de DGM
2a
2a
HPC Compute Nodes
3a
3b2b
Dryad Graph Manager
Dryad Vertex Host
Publie sur un partage:1. Binaires pour le job Dryad
2. Description XML du graphe Dryad
1
Le DGM charge la description XML du graphe Dryad et contact le DSC pour localiser les fichiers de
données
3a
Les DVH chargent les binaires de ce job Dryad depuis le partage
réseau et les exécute en fonction des commandes issues du DGM
3b
![Page 20: DryadLINQ Comment passer à l'échelle le traitement de données volumineuses ?](https://reader035.vdocuments.site/reader035/viewer/2022070421/568160c4550346895dcff003/html5/thumbnails/20.jpg)
using System;using System.Linq;using System.IO;using System.Security.Cryptography;
namespace DupPic1{ class Program { static void Main(string[] args) { string directoryName = @"C:\Temp\pics"; var duplicatedFiles = Directory.GetFiles(directoryName,"*.jpg", SearchOption.AllDirectories) .Select(filename => new { hash = GetChecksum(filename), name = filename }) .GroupBy(record => record.hash) .Where(group => group.Count() > 1) .SelectMany(group => group.Select(record => record.name));
foreach (var file in duplicatedFiles) { Console.WriteLine(file); } }
static string GetChecksum(string file) { using (FileStream stream = File.OpenRead(file)) { SHA256Managed sha = new SHA256Managed(); byte[] checksum = sha.ComputeHash(stream); return BitConverter.ToString(checksum).Replace("-", String.Empty); } } }}
Pour chaque fichier calculer le CheckSum
Grouper par checksum identiques
Conserver seulement les groupes dont le nombre est >1
Sélectionner le nom des fichiers doublons
Lister tous les fichiers *.jpg et créer un IEnumerable<string>
![Page 21: DryadLINQ Comment passer à l'échelle le traitement de données volumineuses ?](https://reader035.vdocuments.site/reader035/viewer/2022070421/568160c4550346895dcff003/html5/thumbnails/21.jpg)
using System;using System.Linq;using System.IO;using System.Security.Cryptography;using Microsoft.Distributed.Linq;
namespace DupPic2{ public class Program { static void Main(string[] args) { string directoryName = @"\\mymachine\samples\pics"; var duplicatedFiles = Directory.GetFiles(directoryName, "*.jpg", SearchOption.AllDirectories) .AsDistributed() .Select(filename => new { hash = GetChecksum(filename), name = filename }) .GroupBy(record => record.hash) .Where(group => group.Count() > 1) .SelectMany(group => group.Select(record => record.name));
foreach (var file in duplicatedFiles) { Console.WriteLine(file); } }
public static string GetChecksum(string file) { using (FileStream stream = File.OpenRead(file)) { SHA256Managed sha = new SHA256Managed(); byte[] checksum = sha.ComputeHash(stream); return BitConverter.ToString(checksum).Replace("-", String.Empty); } } }}
La seule différence dans le code pour une exécution distribuée est .AsDistributed()
Marquer la classe comme publique
Marquer la méthode comme publique
Espace partagé de stockage des images
Ajouter en référence Microsoft.Distributed.Linq
![Page 22: DryadLINQ Comment passer à l'échelle le traitement de données volumineuses ?](https://reader035.vdocuments.site/reader035/viewer/2022070421/568160c4550346895dcff003/html5/thumbnails/22.jpg)
namespace DupPic3{ public class Program { static void Main(string[] args) { string directoryName = @"\\mymachine\samples\pics";
Directory.GetFiles(directoryName, "*.jpg", SearchOption.AllDirectories) .AsDistributed() .Execute("hpcdsc://myheadnode/samples/images");
var duplicatedFilesQuery = DistributedData<string> .Open("hpcdsc://myheadnode/samples/images") .Select(filename => new { hash = GetChecksum(filename), name = filename }) .GroupBy(record => record.hash) .Where(group => group.Count() > 1) .SelectMany(group => group.Select(record => record.name));
var duplicatedFiles = duplicatedFilesQuery.Execute("hpcdsc://myheadnode/samples/duplicatedImages"); foreach (var file in duplicatedFiles) { Console.WriteLine(file); } }
public static string GetChecksum(string file) { using (FileStream stream = File.OpenRead(file)) { SHA256Managed sha = new SHA256Managed(); byte[] checksum = sha.ComputeHash(stream); return BitConverter.ToString(checksum).Replace("-", String.Empty); } } }}
Création dans le DSC d’un flux identifiant les fichiers
Ouverture du flux précédemment créé
Exécution du graphe Dryad et écriture du résultat dans un nouveau flux du DSC
![Page 23: DryadLINQ Comment passer à l'échelle le traitement de données volumineuses ?](https://reader035.vdocuments.site/reader035/viewer/2022070421/568160c4550346895dcff003/html5/thumbnails/23.jpg)
23
En Conclusion• Windows HPC+Dryad est la solution Microsoft aux
solution DISC dans un cluster et/ou dans Azure
• L’avantage du DISC Microsoft réside dans son offre de bout en bout et pas sur Dryad uniquement
• Utiliser Linq pour le traitement de vos données• L’utilisation de Dryad n’en sera que plus rapide
• Essayer le et dites nous ce que vous en pensez• http://connect.microsoft.com
![Page 24: DryadLINQ Comment passer à l'échelle le traitement de données volumineuses ?](https://reader035.vdocuments.site/reader035/viewer/2022070421/568160c4550346895dcff003/html5/thumbnails/24.jpg)
24
Sessions relatives• MongoDB et C#: quand .NET rencontre NoSQL
(INT201) – Mardi 17h30• Nouveautés Windows HPC 2008 R2 et le vol de
cycles (TC201) – Mercredi 11h00• HPC Services pour Excel 2010 (TC302) – Mercredi
13h00
![Page 25: DryadLINQ Comment passer à l'échelle le traitement de données volumineuses ?](https://reader035.vdocuments.site/reader035/viewer/2022070421/568160c4550346895dcff003/html5/thumbnails/25.jpg)
25
Références• Windows HPC Server 2008 SP1
• http://www.microsoft.com/hpc• Dryad / DryadLinq / DSC
• http://connect.microsoft.com• Language-Integrated Query (LINQ)
• http://msdn.microsoft.com/en-us/library/bb397926.aspx
![Page 26: DryadLINQ Comment passer à l'échelle le traitement de données volumineuses ?](https://reader035.vdocuments.site/reader035/viewer/2022070421/568160c4550346895dcff003/html5/thumbnails/26.jpg)
26
MSDN et TechNet : l’essentiel des ressources techniques à portée de clic
http://technet.com http://msdn.com
Portail administration et infrastructure pour informaticiens
Portail de ressources technique pour développeurs
![Page 27: DryadLINQ Comment passer à l'échelle le traitement de données volumineuses ?](https://reader035.vdocuments.site/reader035/viewer/2022070421/568160c4550346895dcff003/html5/thumbnails/27.jpg)