{"id":169536,"date":"2004-12-16T14:57:41","date_gmt":"2004-12-16T14:57:41","guid":{"rendered":"https:\/\/www.microsoft.com\/en-us\/research\/project\/dryad\/"},"modified":"2017-06-08T11:59:55","modified_gmt":"2017-06-08T18:59:55","slug":"dryad","status":"publish","type":"msr-project","link":"https:\/\/www.microsoft.com\/en-us\/research\/project\/dryad\/","title":{"rendered":"Dryad"},"content":{"rendered":"<p class=\"asset-content\">The Dryad Project is investigating programming models for writing parallel and distributed programs to scale from a small cluster to a large data-center.<\/p>\n<p><!-- .asset-content --><\/p>\n<div id=\"en-usprojectsdryaddefault\" class=\"page-content\">\n<h1>Overview<\/h1>\n<p><b><em>New! <\/em><\/b>Dryad and DryadLINQ are now available in source form at the <a class=\"msr-external-link glyph-append glyph-append-open-in-new-tab glyph-append-xsmall\" rel=\"noopener noreferrer\" target=\"_blank\" href=\"https:\/\/github.com\/MicrosoftResearchSVC\/Dryad\">Dryad GitHub repository<span class=\"sr-only\"> (opens in new tab)<\/span><\/a>, with pre-built binaries available from <a class=\"msr-external-link glyph-append glyph-append-open-in-new-tab glyph-append-xsmall\" rel=\"noopener noreferrer\" target=\"_blank\" href=\"http:\/\/nuget.org\/\">NuGet.org<span class=\"sr-only\"> (opens in new tab)<\/span><\/a>. For release documentation see our <a class=\"msr-external-link glyph-append glyph-append-open-in-new-tab glyph-append-xsmall\" rel=\"noopener noreferrer\" target=\"_blank\" href=\"https:\/\/github.com\/MicrosoftResearch\/Dryad\">Getting Started with DryadLINQ<span class=\"sr-only\"> (opens in new tab)<\/span><\/a> page.<\/p>\n<p>Most of the information below is historical and will be updated over time and migrated to the <a class=\"msr-external-link glyph-append glyph-append-open-in-new-tab glyph-append-xsmall\" rel=\"noopener noreferrer\" target=\"_blank\" href=\"https:\/\/github.com\/MicrosoftResearch\/Dryad\">DryadLINQ documentation<span class=\"sr-only\"> (opens in new tab)<\/span><\/a>\u00a0site.<\/p>\n<p>Dryad is an infrastructure which allows a programmer to use the resources of a computer cluster or a data center for running data-parallel programs. A Dryad programmer can use thousands of machines, each of them with multiple processors or cores, without knowing anything about concurrent programming.<\/p>\n<h1>The Structure of Dryad Jobs<\/h1>\n<p><span id=\"0ca1087a-ffc5-45ab-8fb1-0b3021aee53a\" class=\"ImageBlock fn\"><img decoding=\"async\" id=\"Image0ca1087a-ffc5-45ab-8fb1-0b3021aee53a\" src=\"https:\/\/www.microsoft.com\/en-us\/research\/wp-content\/uploads\/2016\/02\/dryad-dryad-job.png\" alt=\"\" \/><span id=\"ImageCaption0ca1087a-ffc5-45ab-8fb1-0b3021aee53a\" class=\"ImageCaptionCoreCss ImageCaption\"><\/span><\/span><\/p>\n<p>A Dryad programmer writes several sequential programs and connects them using one-way channels. The computation is structured as a directed graph: programs are graph vertices, while the channels are graph edges. A Dryad job is a graph generator which can synthesize any directed acyclic graph. These graphs can even change during execution, in response to important events in the computation.<\/p>\n<p>Dryad is quite expressive. It completely subsumes other computation frameworks, such as Google&#8217;s map-reduce, or the relational algebra. Moreover, Dryad handles job creation and management, resource management, job monitoring and visualization, fault tolerance, re-execution, scheduling, and accounting.<\/p>\n<h1>The Dryad Software Stack<\/h1>\n<p>As a proof of Dryad&#8217;s versatility, a rich software ecosystem has been built on top Dryad:<\/p>\n<ul>\n<li><a href=\"http:\/\/www.microsoft.com\/technet\/prodtechnol\/sql\/2005\/intro2is.mspx\">SSIS<\/a> on Dryad executes many instances of SQL server, each in a separate Dryad vertex, taking advantage of Dryad&#8217;s fault tolerance and scheduling. This system is currently deployed in a live production system as part of one of <a class=\"msr-external-link glyph-append glyph-append-open-in-new-tab glyph-append-xsmall\" rel=\"noopener noreferrer\" target=\"_blank\" href=\"http:\/\/advertising.microsoft.com\/microsoft-adcenter\">Microsoft&#8217;s AdCenter<span class=\"sr-only\"> (opens in new tab)<\/span><\/a> log processing pipelines.<\/li>\n<li><a class=\"invalidLink\" href=\"https:\/\/github.com\/MicrosoftResearch\/Dryad\">DryadLINQ<\/a>\u00a0generates Dryad computations from the <a class=\"msr-external-link glyph-append glyph-append-open-in-new-tab glyph-append-xsmall\" rel=\"noopener noreferrer\" target=\"_blank\" href=\"http:\/\/msdn2.microsoft.com\/en-us\/netframework\/aa904594.aspx\">LINQ<span class=\"sr-only\"> (opens in new tab)<\/span><\/a> Language-Integrated Query extensions to C#.<\/li>\n<li>The distributed shell is a generalization of the pipe concept from the Unix shell in three ways. If Unix pipes allow the construction of one-dimensional (1-D) process structures, the distributed shell allows the programmer to build 2-D structures in a scripting language. The distributed shell generalizes Unix pipes in three ways:\n<ol>\n<li>It allows processes to easily connect multiple file descriptors of each process &#8212; hence the 2-D aspect.<\/li>\n<li>It allows the construction of pipes spanning multiple machines, across a cluster.<\/li>\n<li>It <i>virtualizes<\/i> the pipelines, allowing the execution of pipelines with many more processes than available machines, by time-multiplexing processors and buffering results.<\/li>\n<\/ol>\n<\/li>\n<li>Several languages are compiled to distributed shell processes. PSQL is an early version, recently replaced with Scope.<\/li>\n<\/ul>\n<p style=\"padding-left: 60px;\"><span id=\"5f96affd-4fed-4bd8-9f8f-e0106966790e\" class=\"ImageBlock fn\"><img decoding=\"async\" id=\"Image5f96affd-4fed-4bd8-9f8f-e0106966790e\" src=\"https:\/\/www.microsoft.com\/en-us\/research\/wp-content\/uploads\/2016\/02\/dryad-software-layers.png\" alt=\"\" \/><\/span><\/p>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>The Dryad Project is investigating programming models for writing parallel and distributed programs to scale from a small cluster to a large data-center. Overview New! Dryad and DryadLINQ are now available in source form at the Dryad GitHub repository, with pre-built binaries available from NuGet.org. For release documentation see our Getting Started with DryadLINQ page. [&hellip;]<\/p>\n","protected":false},"featured_media":0,"template":"","meta":{"msr-url-field":"","msr-podcast-episode":"","msrModifiedDate":"","msrModifiedDateEnabled":false,"ep_exclude_from_search":false,"_classifai_error":"","footnotes":""},"research-area":[13555,13547],"msr-locale":[268875],"msr-impact-theme":[],"msr-pillar":[],"class_list":["post-169536","msr-project","type-msr-project","status-publish","hentry","msr-research-area-search-information-retrieval","msr-research-area-systems-and-networking","msr-locale-en_us","msr-archive-status-active"],"msr_project_start":"2004-12-16","related-publications":[145105,149597,153362,157807,158929,163368],"related-downloads":[],"related-videos":[185378,185981,185983,185985,185990,186000],"related-groups":[],"related-events":[],"related-opportunities":[],"related-posts":[305990,306524,307355],"related-articles":[],"tab-content":[],"slides":[],"related-researchers":[{"type":"user_nicename","value":"cpoulain","display_name":"Christophe Poulain","author_link":"<a href=\"https:\/\/www.microsoft.com\/en-us\/research\/people\/cpoulain\/\" aria-label=\"Visit the profile page for Christophe Poulain\">Christophe Poulain<\/a>","is_active":false,"user_id":31474,"last_first":"Poulain, Christophe","people_section":0,"alias":"cpoulain"}],"msr_research_lab":[],"msr_impact_theme":[],"_links":{"self":[{"href":"https:\/\/www.microsoft.com\/en-us\/research\/wp-json\/wp\/v2\/msr-project\/169536","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.microsoft.com\/en-us\/research\/wp-json\/wp\/v2\/msr-project"}],"about":[{"href":"https:\/\/www.microsoft.com\/en-us\/research\/wp-json\/wp\/v2\/types\/msr-project"}],"version-history":[{"count":1,"href":"https:\/\/www.microsoft.com\/en-us\/research\/wp-json\/wp\/v2\/msr-project\/169536\/revisions"}],"predecessor-version":[{"id":236105,"href":"https:\/\/www.microsoft.com\/en-us\/research\/wp-json\/wp\/v2\/msr-project\/169536\/revisions\/236105"}],"wp:attachment":[{"href":"https:\/\/www.microsoft.com\/en-us\/research\/wp-json\/wp\/v2\/media?parent=169536"}],"wp:term":[{"taxonomy":"msr-research-area","embeddable":true,"href":"https:\/\/www.microsoft.com\/en-us\/research\/wp-json\/wp\/v2\/research-area?post=169536"},{"taxonomy":"msr-locale","embeddable":true,"href":"https:\/\/www.microsoft.com\/en-us\/research\/wp-json\/wp\/v2\/msr-locale?post=169536"},{"taxonomy":"msr-impact-theme","embeddable":true,"href":"https:\/\/www.microsoft.com\/en-us\/research\/wp-json\/wp\/v2\/msr-impact-theme?post=169536"},{"taxonomy":"msr-pillar","embeddable":true,"href":"https:\/\/www.microsoft.com\/en-us\/research\/wp-json\/wp\/v2\/msr-pillar?post=169536"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}