1 / 27

DryadLINQ Comment passer à l'échelle le traitement de données volumineuses ?

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

benita
Download Presentation

DryadLINQ Comment passer à l'échelle le traitement de données volumineuses ?

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. TC301 DryadLINQComment passer à l'échelle le traitement de données volumineuses ? Xavier PillonsPrincipal Program ManagerMicrosoft Corporation

  2. 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ôtsde 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.

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

  4. 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)

  5. Quelle est la réponse de Microsoft ?

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

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

  8. Dryad permet au HPC de résoudre de nouveaux types de problèmes Optimise l’usage du CPU pour des problèmes fortement couplés comme la modélisation du climat, la mécanique des fluides, etc… Optimise l’usage du CPU pour les problèmes faiblement couplés comme la simulation de produits financier complexes, etc. SOA MPI Orienté CPU Orienté Données Optimise le déplacement des données plutôt que l’usage du CPU afin de faciliter les travaux intensifs en E/S. Dryad

  9. 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. Visual Studio HPC Scheduler HPC Azure Node HPC Compute Node Pour l’utilisateur: Exécuter un programme C# En interne : Soumet un travail HPC Dans Azure: Exécute des calculs qui lisent/écrivent beaucoup de blobs. Sur un Cluster: Exécute des calculs qui lisent/écrivent beaucoup de fichiers.

  10. ‘Pipe’ à 2 Dimensions Pipe Unix: 1-D grep | sed | sort | awk | perl Dryad: 2-D grep1000 | sed500 | sort1000 | awk500 | perl50

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

  12. Un besoin simple 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;

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

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

  15. Exécution parallèle avec Dryad varlogentries = from line in logs where !line.StartsWith("#") select new LogEntry(line); var user = from access inlogentries whereaccess.user.EndsWith(@"\xavier") select access; var accesses = from access in user group access byaccess.pageinto pages select new UserPageCount(“xavier", pages.Key, pages.Count()); varhtmAccesses = from access in accesses whereaccess.page.EndsWith(".htm") orderbyaccess.countdescending select access; logs logentries user accesses htmAccesses output

  16. Vue d’ensemble d’un job HPC + Dryad 2a Un Job Dryad démarre une tâche simple en assignant à un nœud le rôle de DGM Dryad Graph Manager Application qui utilise les APIs de Dryad 2a 3a 1 3b DSC 2b HPC Head Node Dryad Vertex Host 1 Soumet un Job Dryad 2b 3a 3b Le job Dryad démarre aussi un ensemble de tâches « parametricsweep » sur les autres nœuds en tant que DVH Dryad Graph Manager démarre/arrête les vertex Dryad Les vertex Dryad lisent et écrivent les fichiers de données HPC Compute Nodes

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

  18. Mécanismes internes 3a Le DGM charge la description XML du graphe Dryad et contact le DSC pour localiser les fichiers de données 2a Un Job Dryad démarre une tâche simple en assignant à un nœud le rôle de DGM Dryad Graph Manager Application qui utilise les APIs de Dryad 2a 3a 1 3b DSC 2b HPC Head Node Dryad Vertex Host 1 Publie sur un partage: 1. Binaires pour le job Dryad 2. Description XML du graphe Dryad 2b Le job Dryad démarre aussi un ensemble de tâches « parametricsweep » sur les autres nœuds en tant que DVH HPC Compute Nodes 3b 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

  19. using System; usingSystem.Linq; using System.IO; usingSystem.Security.Cryptography; namespace DupPic1 { classProgram { staticvoid Main(string[] args) { stringdirectoryName = @"C:\Temp\pics"; varduplicatedFiles = 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 induplicatedFiles) { Console.WriteLine(file); } } staticstringGetChecksum(string file) { using (FileStream stream = File.OpenRead(file)) { SHA256Managedsha = newSHA256Managed(); byte[] checksum = sha.ComputeHash(stream); returnBitConverter.ToString(checksum).Replace("-", String.Empty); } } } } Lister tous les fichiers *.jpg et créer un IEnumerable<string> 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

  20. using System; usingSystem.Linq; using System.IO; usingSystem.Security.Cryptography; usingMicrosoft.Distributed.Linq; namespace DupPic2 { publicclassProgram { staticvoid Main(string[] args) { stringdirectoryName = @"\\mymachine\samples\pics"; varduplicatedFiles = 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 induplicatedFiles) { Console.WriteLine(file); } } publicstaticstringGetChecksum(string file) { using (FileStream stream = File.OpenRead(file)) { SHA256Managedsha = newSHA256Managed(); byte[] checksum = sha.ComputeHash(stream); returnBitConverter.ToString(checksum).Replace("-", String.Empty); } } } } Ajouter en référence Microsoft.Distributed.Linq Marquer la classe comme publique Espace partagé de stockage des images La seule différence dans le code pour une exécution distribuée est .AsDistributed() Marquer la méthode comme publique

  21. namespaceDupPic3 { publicclassProgram { staticvoid Main(string[] args) { stringdirectoryName = @"\\mymachine\samples\pics"; Directory.GetFiles(directoryName, "*.jpg", SearchOption.AllDirectories) .AsDistributed() .Execute("hpcdsc://myheadnode/samples/images"); varduplicatedFilesQuery = 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)); varduplicatedFiles = duplicatedFilesQuery.Execute("hpcdsc://myheadnode/samples/duplicatedImages"); foreach (var file induplicatedFiles) { Console.WriteLine(file); } } publicstaticstringGetChecksum(string file) { using (FileStream stream = File.OpenRead(file)) { SHA256Managedsha = newSHA256Managed(); byte[] checksum = sha.ComputeHash(stream); returnBitConverter.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

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

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

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

  25. MSDN et TechNet: l’essentiel des ressources techniques à portée de clic • Portail administration et infrastructure pour informaticiens • Portail de ressources technique pour développeurs http://technet.com http://msdn.com

More Related