La présentation est en train de télécharger. S'il vous plaît, attendez

La présentation est en train de télécharger. S'il vous plaît, attendez

2 DryadLINQ Comment passer à l'échelle le traitement de données volumineuses ? Xavier Pillons Principal Program Manager Microsoft Corporation TC301.

Présentations similaires


Présentation au sujet: "2 DryadLINQ Comment passer à l'échelle le traitement de données volumineuses ? Xavier Pillons Principal Program Manager Microsoft Corporation TC301."— Transcription de la présentation:

1

2 2 DryadLINQ Comment passer à l'échelle le traitement de données volumineuses ? Xavier Pillons Principal Program Manager Microsoft Corporation TC301

3 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.

4 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

5 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)

6 6 Quelle est la réponse de Microsoft ?

7 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

8 8 Dryad / DryadLinq / DSC Déploiement HPC, ordonnancement, etc. MPISOADryad Windows Server Azure Runtime distribué Services pour Cluster et Cloud Plateforme Distributed Storage Catalog Assemble des partages NTFS pour le moteur distribué de Dryad C#, C++, … C#/LINQ pour Dryad Visual Studio, Excel, etc. Visual Studio pour C#/LINQ Langages et Librairies Outils de développement

9 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

10 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.

11 11 ‘Pipe’ à 2 Dimensions Pipe Unix: 1-D grep | sed | sort | awk | perl Dryad: 2-D grep 1000 | sed 500 | sort 1000 | awk 500 | perl 50

12 12 Un job Dryad est un graphe acyclique dirigé (DAG) Vertex d’éxécution Canaux d’échanges Entrées Sorties

13 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;

14 14 Les Etapes de cette requête 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; 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.

15 15 Exécution séquentielle 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; 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.

16 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

17 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 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 3b 2b Dryad Graph Manager Dryad Vertex Host

18 18 Dryad exécute le graphe en associant des vertex aux instances des Dryad Vertex Hosts Vertex d’éxécution Canaux d’échanges Entrées Sorties Ressources disponibles

19 19 Mécanismes internes Application qui utilise les APIs de Dryad HPC Head Node DSC 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 HPC Compute Nodes 3a 3b 2b Dryad Graph Manager Dryad Vertex Host Publie sur un partage: 1. Binaires pour le job Dryad 2. Description XML du graphe Dryad 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

20 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

21 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

22 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.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

23 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

24 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

25 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

26 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

27


Télécharger ppt "2 DryadLINQ Comment passer à l'échelle le traitement de données volumineuses ? Xavier Pillons Principal Program Manager Microsoft Corporation TC301."

Présentations similaires


Annonces Google