<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2germanfull.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:blogChannel="http://backend.userland.com/blogChannelModule" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:pingback="http://madskills.com/public/xml/rss/module/pingback/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" version="2.0">
  <channel>
    <title>Sascha Dittmann</title>
    <description>Über .NET, SQL Server und die Cloud</description>
    <link>http://www.sascha-dittmann.de/</link>
    <docs>http://www.rssboard.org/rss-specification</docs>
    <generator>BlogEngine.NET 2.5.0.9</generator>
    <language>de-DE</language>
    <blogChannel:blogRoll>http://www.sascha-dittmann.de/opml.axd</blogChannel:blogRoll>
    <blogChannel:blink>http://www.sascha-dittmann.de/syndication.axd</blogChannel:blink>
    <dc:creator>Sascha Dittmann</dc:creator>
    <dc:title>Sascha Dittmann</dc:title>
    <geo:lat>0.000000</geo:lat>
    <geo:long>0.000000</geo:long>
    <atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/SaschaDittmann" /><feedburner:info xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" uri="saschadittmann" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><feedburner:emailServiceId xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">SaschaDittmann</feedburner:emailServiceId><feedburner:feedburnerHostname xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">http://feedburner.google.com</feedburner:feedburnerHostname><feedburner:feedFlare xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" href="http://add.my.yahoo.com/content?lg=de&amp;url=http%3A%2F%2Ffeeds.feedburner.com%2FSaschaDittmann" src="http://us.i1.yimg.com/us.yimg.com/i/de/my/addtomyyahoo4.gif">Subscribe with Mein Yahoo!</feedburner:feedFlare><feedburner:feedFlare xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" href="http://www.newsgator.com/ngs/subscriber/subext.aspx?url=http%3A%2F%2Ffeeds.feedburner.com%2FSaschaDittmann" src="http://www.newsgator.com/images/ngsub1.gif">Subscribe with NewsGator</feedburner:feedFlare><feedburner:feedFlare xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" href="http://www.bloglines.com/sub/http://feeds.feedburner.com/SaschaDittmann" src="http://www.bloglines.com/images/sub_modern11.gif">Subscribe with Bloglines</feedburner:feedFlare><feedburner:feedFlare xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" href="http://www.netvibes.com/subscribe.php?url=http%3A%2F%2Ffeeds.feedburner.com%2FSaschaDittmann" src="http://www.netvibes.com/img/add2netvibes.gif">Subscribe with Netvibes</feedburner:feedFlare><feedburner:feedFlare xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" href="http://fusion.google.com/add?feedurl=http%3A%2F%2Ffeeds.feedburner.com%2FSaschaDittmann" src="http://buttons.googlesyndication.com/fusion/add.gif">Subscribe with Google</feedburner:feedFlare><feedburner:feedFlare xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" href="http://www.pageflakes.com/subscribe.aspx?url=http%3A%2F%2Ffeeds.feedburner.com%2FSaschaDittmann" src="http://www.pageflakes.com/ImageFile.ashx?instanceId=Static_4&amp;fileName=ATP_blu_91x17.gif">Subscribe with Pageflakes</feedburner:feedFlare><feedburner:feedFlare xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" href="http://www.plusmo.com/add?url=http%3A%2F%2Ffeeds.feedburner.com%2FSaschaDittmann" src="http://plusmo.com/res/graphics/fbplusmo.gif">Subscribe with Plusmo</feedburner:feedFlare><feedburner:feedFlare xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" href="http://www.thefreedictionary.com/_/hp/AddRSS.aspx?http%3A%2F%2Ffeeds.feedburner.com%2FSaschaDittmann" src="http://img.tfd.com/hp/addToTheFreeDictionary.gif">Subscribe with The Free Dictionary</feedburner:feedFlare><feedburner:feedFlare xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" href="http://www.bitty.com/manual/?contenttype=rssfeed&amp;contentvalue=http%3A%2F%2Ffeeds.feedburner.com%2FSaschaDittmann" src="http://www.bitty.com/img/bittychicklet_91x17.gif">Subscribe with Bitty Browser</feedburner:feedFlare><feedburner:feedFlare xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" href="http://www.live.com/?add=http%3A%2F%2Ffeeds.feedburner.com%2FSaschaDittmann" src="http://tkfiles.storage.msn.com/x1piYkpqHC_35nIp1gLE68-wvzLZO8iXl_JMledmJQXP-XTBOLfmQv4zhj4MhcWEJh_GtoBIiAl1Mjh-ndp9k47If7hTaFno0mxW9_i3p_5qQw">Subscribe with Live.com</feedburner:feedFlare><feedburner:feedFlare xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" href="http://mix.excite.eu/add?feedurl=http%3A%2F%2Ffeeds.feedburner.com%2FSaschaDittmann" src="http://image.excite.co.uk/mix/addtomix.gif">Subscribe with Excite MIX</feedburner:feedFlare><feedburner:feedFlare xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" href="http://www.webwag.com/wwgthis.php?url=http%3A%2F%2Ffeeds.feedburner.com%2FSaschaDittmann" src="http://www.webwag.com/images/wwgthis.gif">Subscribe with Webwag</feedburner:feedFlare><feedburner:feedFlare xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" href="http://www.podcastready.com/oneclick_bookmark.php?url=http%3A%2F%2Ffeeds.feedburner.com%2FSaschaDittmann" src="http://www.podcastready.com/images/podcastready_button.gif">Subscribe with Podcast Ready</feedburner:feedFlare><feedburner:feedFlare xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" href="http://www.wikio.com/subscribe?url=http%3A%2F%2Ffeeds.feedburner.com%2FSaschaDittmann" src="http://www.wikio.com/shared/img/add2wikio.gif">Subscribe with Wikio</feedburner:feedFlare><feedburner:feedFlare xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" href="http://www.dailyrotation.com/index.php?feed=http%3A%2F%2Ffeeds.feedburner.com%2FSaschaDittmann" src="http://www.dailyrotation.com/rss-dr2.gif">Subscribe with Daily Rotation</feedburner:feedFlare><item>
      <title>Webseitenpfade einer Windows Azure Web Rolle bestimmen</title>
      <description>&lt;p style="display: inline-block;"&gt;&lt;img style="padding-bottom: 10px; padding-right: 10px; float: left;" src="http://www.sascha-dittmann.de/image.axd?picture=2012%2f05%2fWebseitenpfadeSuchenTeaser.png" alt="Die Suche nach den Webseitenpfaden" /&gt;&lt;strong&gt;In einem meiner letzten Projekte sollte ein Startup Skript, sowie die Run Methode der &lt;em&gt;RoleEntryPoint&lt;/em&gt; Klasse, auf die Webseiten einer Windows Azure Web Rolle zugreifen. Die Herausforderung hierbei bestand in den sich wechselnden Pfaden zu den Webseiten der Rolle. Diese k&amp;ouml;nnen sich in verschiedenen Situationen, wie z.B. beim Upgrade der bestehenden Cloud Anwendung, &amp;auml;ndern.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Genauer gesagt, &amp;auml;ndert sich hierbei "nur" der Laufwerksbuchstabe.&lt;/p&gt;
&lt;p&gt;Dennoch suchte ich nach einem Weg, der mir alle Webseitenpfade in Form einer &lt;em&gt;Collection&lt;/em&gt; wiedergeben kann.&lt;/p&gt;
&lt;p&gt;Die L&amp;ouml;sung lag in der RoleModel.xml Datei der Web Rolle...&lt;/p&gt;
&lt;h2&gt;Die RoleModel.xml&lt;/h2&gt;
&lt;p&gt;Um an eine Auflistung aller Webseiten (inkl. relativer Pfadangabe) zu gelangen, kann die RoleModel.xml Datei verwenden werden. &lt;br /&gt;Diese befindet sich im Stammverzeichnis der Web Rolle, welches &amp;uuml;ber die Umgebungsvariable "RdRoleRoot" abgefragt werden kann.&lt;/p&gt;
&lt;p&gt;Bespiel einer RoleModel.xml Datei:&lt;/p&gt;
&lt;pre class="brush: xml; highlight: [33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44]"&gt;&amp;lt;?xml version="1.0" encoding="utf-8"?&amp;gt;
&amp;lt;RoleModel xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
  xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
  name="DemoApp.WebRole" version="1.6.21103.1459" 
  xmlns="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceDefinition"&amp;gt;
  &amp;lt;Runtime&amp;gt;
    &amp;lt;EntryPoint&amp;gt;
      &amp;lt;NetFxEntryPoint assemblyName="DemoApp.WebRole.dll" /&amp;gt;
    &amp;lt;/EntryPoint&amp;gt;
  &amp;lt;/Runtime&amp;gt;
  &amp;lt;Properties&amp;gt;
    &amp;lt;Property name="RoleType" value="Web" /&amp;gt;
    &amp;lt;Property name="RoleName" value="DemoApp.WebRole" /&amp;gt;
    &amp;lt;Property name="ProjectName" value="DemoApp.WebRole" /&amp;gt;
    &amp;lt;Property name="Configuration" value="Release" /&amp;gt;
    &amp;lt;Property name="Platform" value="AnyCPU" /&amp;gt;
    &amp;lt;Property name="OutputDir" 
              value="C:\TFS\DemoApp\DemoApp\obj\Release\DemoApp.WebRole\" /&amp;gt;
    &amp;lt;Property name="EntryPoint" value="CloudBloggers.WebRole.dll" /&amp;gt;
    &amp;lt;Property name="SourceDir" value="C:\TFS\DemoApp\DemoApp.WebRole\" /&amp;gt;
    &amp;lt;Property name="RoleTargetFramework" value="v3.5" /&amp;gt;
    &amp;lt;Property name="SitePhysicalPath" 
              value="C:\TFS\DemoApp\DemoApp\obj\Release\DemoApp.WebRole\" /&amp;gt;
    &amp;lt;Property name="OriginalItemSpec" 
              value="C:\TFS\DemoApp\DemoApp\DemoApp.ccproj" /&amp;gt;
    &amp;lt;Property name="MSBuildSourceProjectFile" 
              value="C:\TFS\DemoApp\DemoApp\DemoApp.ccproj" /&amp;gt;
    &amp;lt;Property name="MSBuildSourceTargetName" 
              value="ResolveSingleWebRoleReference" /&amp;gt;
    &amp;lt;Property name="TargetFrameworkVersion" value="v3.5" /&amp;gt;
    &amp;lt;Property name="TargetRuntimeVersion" value="v2.0" /&amp;gt;
  &amp;lt;/Properties&amp;gt;
  &amp;lt;Sites&amp;gt;
    &amp;lt;Site name="Web1" physicalDirectory="sitesroot\0"&amp;gt;
      &amp;lt;Bindings&amp;gt;
        &amp;lt;Binding name="Endpoint1" endpointName="Endpoint1" /&amp;gt;
      &amp;lt;/Bindings&amp;gt;
    &amp;lt;/Site&amp;gt;
    &amp;lt;Site name="Web2" physicalDirectory="sitesroot\1"&amp;gt;
      &amp;lt;Bindings&amp;gt;
        &amp;lt;Binding name="Endpoint1" endpointName="Endpoint1" /&amp;gt;
      &amp;lt;/Bindings&amp;gt;
    &amp;lt;/Site&amp;gt;
  &amp;lt;/Sites&amp;gt;
&amp;lt;/RoleModel&amp;gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2&gt;Das Windows Azure Startup Task&lt;/h2&gt;
&lt;p&gt;F&amp;uuml;r das Windows Azure Startup Task, habe ich ein PowerShell Skript verwendet, da ich hierbei, ohne gr&amp;ouml;&amp;szlig;eren Aufwand, Zugriff auf die Umgebungsvariable, sowie die Daten der XML Datei, erhalte:&lt;/p&gt;
&lt;pre class="brush: ps;"&gt;$roleRoot = $Env:RdRoleRoot
$roleModelFile = Join-Path $roleRoot "RoleModel.xml"
$roleModel = [xml](Get-Content $roleModelFile)
foreach ($site in $roleModel.RoleModel.Sites.Site)
{
  Write-Output $site.name
  Write-Output $site.physicalDirectory
}&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2&gt;Die RoleEntryPoint Klasse&lt;/h2&gt;
&lt;p&gt;F&amp;uuml;r die Verwendung innerhalb der &lt;em&gt;RoleEntryPoint&lt;/em&gt; Klasse, wurde eine statische Eigenschaft erstellt, die auch hier den Zugriff auf die XML Datei gew&amp;auml;hrt:&lt;/p&gt;
&lt;pre class="brush: c-sharp;"&gt;private static IEnumerable&amp;lt;string&amp;gt; WebSiteDirectories
{
  get
  {
    var roleRootDir = Environment.GetEnvironmentVariable("RdRoleRoot");
    if (roleRootDir == null)
      return Enumerable.Empty();
    XNamespace roleModelNs = 
      "http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceDefinition";
    var roleModelDoc = XDocument.Load(Path.Combine(roleRootDir, "RoleModel.xml"));
    if (roleModelDoc.Root == null)
      return Enumerable.Empty();

    var sites = roleModelDoc.Root.Element(roleModelNs + "Sites");
    if (sites == null)
      return Enumerable.Empty();

    var siteElements = sites.Elements(roleModelNs + "Site");

    return
      from siteElement in siteElements
      where siteElement.Attribute("name") != null
            &amp;amp;&amp;amp; siteElement.Attribute("name").Value == "Web"
            &amp;amp;&amp;amp; siteElement.Attribute("physicalDirectory") != null
      select Path.Combine(roleRootDir, 
             siteElement.Attribute("physicalDirectory").Value);
  }
}&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr /&gt;
&lt;table border="0"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;img src="http://www.sascha-dittmann.de/image.axd?picture=Shared%2finfo.png" alt="Weitere Informationen" /&gt;&lt;/td&gt;
&lt;td&gt;Weitere Informationen: &lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.sascha-dittmann.de/post/Eine-Einfuehrung-in-die-Windows-Azure-Startup-Tasks.aspx" target="_blank"&gt;Eine Einf&amp;uuml;hrung in die Windows Azure Startup Tasks&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.sascha-dittmann.de/post/Erste-Schritte-mit-Windows-Azure-Die-Web-Rolle.aspx" target="_blank"&gt;Erste Schritte mit Windows Azure (Teil 1) - Die Web Rolle&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr /&gt;
&lt;p&gt;&lt;strong&gt;Verwendete Bildquellen:&lt;/strong&gt; &lt;br /&gt;&amp;copy; Barbara Eckholdt / PIXELIO&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/SaschaDittmann?a=LtNe25x9W3M:gmPG-moIcAg:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SaschaDittmann?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SaschaDittmann?a=LtNe25x9W3M:gmPG-moIcAg:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SaschaDittmann?i=LtNe25x9W3M:gmPG-moIcAg:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SaschaDittmann?a=LtNe25x9W3M:gmPG-moIcAg:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SaschaDittmann?i=LtNe25x9W3M:gmPG-moIcAg:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SaschaDittmann?a=LtNe25x9W3M:gmPG-moIcAg:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SaschaDittmann?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/SaschaDittmann/~4/LtNe25x9W3M" height="1" width="1"/&gt;</description>
      <link>http://www.sascha-dittmann.de/post/Webseitenpfade-einer-Windows-Azure-Web-Rolle-bestimmen.aspx</link>
      <comments>http://www.sascha-dittmann.de/post/Webseitenpfade-einer-Windows-Azure-Web-Rolle-bestimmen.aspx#comment</comments>
      <guid>http://www.sascha-dittmann.de/post.aspx?id=cf196370-457b-4557-b5df-ea7643f08601</guid>
      <pubDate>Mon, 14 May 2012 08:38:00 +0200</pubDate>
      <category>.NET</category>
      <category>Cloud Computing</category>
      <dc:publisher>Sascha</dc:publisher>
      <pingback:server>http://www.sascha-dittmann.de/pingback.axd</pingback:server>
      <pingback:target>http://www.sascha-dittmann.de/post.aspx?id=cf196370-457b-4557-b5df-ea7643f08601</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://www.sascha-dittmann.de/trackback.axd?id=cf196370-457b-4557-b5df-ea7643f08601</trackback:ping>
      <wfw:comment>http://www.sascha-dittmann.de/post/Webseitenpfade-einer-Windows-Azure-Web-Rolle-bestimmen.aspx#comment</wfw:comment>
      <wfw:commentRss>http://www.sascha-dittmann.de/syndication.axd?post=cf196370-457b-4557-b5df-ea7643f08601</wfw:commentRss>
    </item>
    <item>
      <title>Windows Azure Gewinnspiel "Ziehen Sie um in die Cloud"</title>
      <description>&lt;p style="display: inline-block;"&gt;&lt;img style="padding-bottom: 10px; padding-right: 10px; float: left;" src="http://www.sascha-dittmann.de/image.axd?picture=2012%2f05%2fWAGewinnspielTeaser.png" alt="Windows Azure Gewinnspiel" /&gt;&lt;strong&gt; Microsoft Deutschland veranstaltet wieder einmal ein Gewinnspiel zum Thema Windows Azure unter dem Namen "&lt;a href="http://www.event-team.com/events/AzureGewinnspiel/default.aspx" rel="nofollow" target="_blank"&gt;Ziehen Sie um in die Cloud&lt;/a&gt;". &lt;br /&gt;F&amp;uuml;r die Teilnahme muss eine bereits existierende oder von Mircosoft vorgefertigte Anwendung in die Cloud hochgeladen und gestartet werden. &lt;br /&gt;Daf&amp;uuml;r k&amp;ouml;nnen Interessierte einen &lt;a href="https://www.windowsazure.com/de-de/offers/ms-azr-0018p" rel="nofollow" target="_blank"&gt;kostenlosen Testzugang&lt;/a&gt; nutzen oder, als Inhaber einer &lt;a href="http://msdn.microsoft.com/de-de/subscriptions/" rel="nofollow" target="_blank"&gt;MSDN Subscription&lt;/a&gt;, ihr &lt;a href="http://msdn.microsoft.com/de-de/subscriptions/ee461076.aspx" rel="nofollow" target="_blank"&gt;Freikontingent&lt;/a&gt; einsetzen.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;F&amp;uuml;r jeden aktiven Tester von Windows Azure gibt es bis zum &lt;strong&gt;31.05.2012&lt;/strong&gt; einen 10 &amp;euro; Essensgutschein und die Chance auf weitere Preise:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;1 x 500 &amp;euro; IKEA Gutschein&lt;/li&gt;
&lt;li&gt;3 x Visual Studio 2010 mit Gratis-Update auf Visual Studio 11&lt;/li&gt;
&lt;li&gt;5 x Visual Studio LightSwitch 2011&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Die genauen Details, k&amp;ouml;nnen der &lt;a href="http://www.event-team.com/events/AzureGewinnspiel/default.aspx" rel="nofollow" target="_blank"&gt;Gewinnspielseite&lt;/a&gt; entnommen werden.&lt;/p&gt;
&lt;hr /&gt;
&lt;table border="0"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;img src="http://www.sascha-dittmann.de/image.axd?picture=Shared%2finfo.png" alt="Weitere Informationen" /&gt;&lt;/td&gt;
&lt;td&gt;Weitere Informationen: &lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.event-team.com/events/AzureGewinnspiel/default.aspx" rel="nofollow" target="_blank"&gt;Gewinnspiel: Ziehen Sie um in die Cloud&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.windowsazure.com/de-de/offers/ms-azr-0018p" rel="nofollow" target="_blank"&gt;Kostenlose Windows Azure Testversion (3 Monate)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://msdn.microsoft.com/de-de/subscriptions/ee461076.aspx" rel="nofollow" target="_blank"&gt;MSDN Subscription Freikontingente&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.event-team.com/events/AzureGewinnspiel/downloads/AzureBeispiel.zip" rel="nofollow" target="_blank"&gt;Download der Windows Azure Beispielanwendung&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://youtu.be/Yg4GSSM_ZDg" rel="nofollow" target="_blank"&gt;Videoanleitung: Wie ver&amp;ouml;ffentliche ich einen Windows Azure Cloud Service&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr /&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/SaschaDittmann?a=XOYk5-wbb3c:sbxUPwrzHvA:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SaschaDittmann?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SaschaDittmann?a=XOYk5-wbb3c:sbxUPwrzHvA:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SaschaDittmann?i=XOYk5-wbb3c:sbxUPwrzHvA:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SaschaDittmann?a=XOYk5-wbb3c:sbxUPwrzHvA:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SaschaDittmann?i=XOYk5-wbb3c:sbxUPwrzHvA:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SaschaDittmann?a=XOYk5-wbb3c:sbxUPwrzHvA:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SaschaDittmann?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/SaschaDittmann/~4/XOYk5-wbb3c" height="1" width="1"/&gt;</description>
      <link>http://www.sascha-dittmann.de/post/Gewinnspiel-Ziehen-Sie-um-in-die-Cloud.aspx</link>
      <comments>http://www.sascha-dittmann.de/post/Gewinnspiel-Ziehen-Sie-um-in-die-Cloud.aspx#comment</comments>
      <guid>http://www.sascha-dittmann.de/post.aspx?id=41fec38f-79de-4506-9074-9ed1e41b064b</guid>
      <pubDate>Wed, 09 May 2012 15:40:00 +0200</pubDate>
      <category>Cloud Computing</category>
      <dc:publisher>Sascha</dc:publisher>
      <pingback:server>http://www.sascha-dittmann.de/pingback.axd</pingback:server>
      <pingback:target>http://www.sascha-dittmann.de/post.aspx?id=41fec38f-79de-4506-9074-9ed1e41b064b</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://www.sascha-dittmann.de/trackback.axd?id=41fec38f-79de-4506-9074-9ed1e41b064b</trackback:ping>
      <wfw:comment>http://www.sascha-dittmann.de/post/Gewinnspiel-Ziehen-Sie-um-in-die-Cloud.aspx#comment</wfw:comment>
      <wfw:commentRss>http://www.sascha-dittmann.de/syndication.axd?post=41fec38f-79de-4506-9074-9ed1e41b064b</wfw:commentRss>
    </item>
    <item>
      <title>dotnet Cologne 2012 - RavenDB auf Windows Azure</title>
      <description>&lt;p style="display: inline-block;"&gt;&lt;img style="padding-bottom: 10px; padding-right: 10px; float: left;" src="http://www.sascha-dittmann.de/image.axd?picture=2012%2f05%2fdnc12Teaser.png" alt="dotnet Cologne 2012" /&gt;&lt;strong&gt;Am vergangen Freitag war es wieder soweit: &lt;br /&gt;Die dotnet Cologne &amp;ouml;ffnete zum vierten mal seine Pforten. &lt;br /&gt; &lt;br /&gt;Aydin Mir Mohammadi, Alexander Zeitler und ich sind hierbei kurzfristig f&amp;uuml;r Thorsten Hans eingesprungen und haben einen Vortrag zum Thema "RavenDB, schnell und skalierbar" gehalten...&lt;/strong&gt;&lt;/p&gt;
&lt;h2&gt;Hintergr&amp;uuml;nde zur Themenwahl&lt;/h2&gt;
&lt;p&gt;Vor einigen Wochen kam &lt;a href="http://blog.alexonasp.net/" rel="friend" target="_blank"&gt;Alexander Zeitler&lt;/a&gt; auf mich zu und frage, ob man &lt;a href="http://ravendb.net" rel="nofollow" target="_blank"&gt;RavenDB&lt;/a&gt; nicht auch in der Windows Azure Plattform betreiben k&amp;ouml;nnte.&lt;/p&gt;
&lt;p&gt;Spontan hatte ich leider keine Antwort, und ein Blick ins Internet war auch sehr ern&amp;uuml;chternd. &lt;br /&gt;Es gab zwar einige L&amp;ouml;sungsans&amp;auml;tze, aber die meisten davon waren entweder nicht skalierbar, veraltet oder unvollst&amp;auml;ndig.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Aber prinzipiell sollte das doch funktionieren, oder!?&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Also begannen wir unsere eigene &lt;em&gt;Windows Azure Worker Role&lt;/em&gt; zu bauen, die die aktuelle RavenDB Version (Build 1.0.888) in die Microsoft Cloud bringen sollte.&lt;/p&gt;
&lt;p&gt;Als dann &lt;a href="http://dotnet-forum.de/blogs/thorstenhans/default.aspx" rel="friend" target="_blank"&gt;Thorsten Hans&lt;/a&gt;&amp;nbsp;kurzfristig&amp;nbsp;bei der &lt;a href="http://www.dotnet-cologne.de/" rel="friend" target="_blank"&gt;dotnet Cologne 2012&lt;/a&gt; ausgefallen ist, war der Plan geboren, dieses Projekt der .NET Entwickler Community vorab zu pr&amp;auml;sentieren.&lt;/p&gt;
&lt;h2&gt;PowerPoint Slides&lt;/h2&gt;
&lt;p&gt;&lt;iframe src="http://www.slideshare.net/slideshow/embed_code/12852062" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" width="585" height="489"&gt;&lt;/iframe&gt;&lt;/p&gt;
&lt;p&gt;&lt;iframe src="http://www.slideshare.net/slideshow/embed_code/12817242" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" width="585" height="489"&gt;&lt;/iframe&gt;&lt;/p&gt;
&lt;p&gt;&lt;iframe src="http://www.slideshare.net/slideshow/embed_code/12827357" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" width="585" height="489"&gt;&lt;/iframe&gt;&lt;/p&gt;
&lt;h2&gt;Source Code&lt;/h2&gt;
&lt;p&gt;Den aktuelle Source Code, haben wir auf github zur Verf&amp;uuml;gung gestellt: &lt;br /&gt;&lt;a href="http://github.com/SaschaDittmann/RavenDbOnAzure" rel="nofollow" target="_blank"&gt;http://github.com/SaschaDittmann/RavenDbOnAzure&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Leider ist dieser noch ein wenig fehlerbehaftet.&lt;br /&gt;Sobald aber eine gewisse Produktionsreife erreicht ist, geben wird dies in einem weiterem Blog Post bekannt.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/SaschaDittmann?a=ae4arJ0RxOQ:RZZug48wZEw:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SaschaDittmann?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SaschaDittmann?a=ae4arJ0RxOQ:RZZug48wZEw:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SaschaDittmann?i=ae4arJ0RxOQ:RZZug48wZEw:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SaschaDittmann?a=ae4arJ0RxOQ:RZZug48wZEw:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SaschaDittmann?i=ae4arJ0RxOQ:RZZug48wZEw:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SaschaDittmann?a=ae4arJ0RxOQ:RZZug48wZEw:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SaschaDittmann?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/SaschaDittmann/~4/ae4arJ0RxOQ" height="1" width="1"/&gt;</description>
      <link>http://www.sascha-dittmann.de/post/dotnet-Cologne-2012-RavenDB-auf-Windows-Azure.aspx</link>
      <comments>http://www.sascha-dittmann.de/post/dotnet-Cologne-2012-RavenDB-auf-Windows-Azure.aspx#comment</comments>
      <guid>http://www.sascha-dittmann.de/post.aspx?id=d4ca3b23-60c1-41c6-bafe-46d5c8b9e53b</guid>
      <pubDate>Tue, 08 May 2012 08:32:00 +0200</pubDate>
      <category>.NET</category>
      <category>Cloud Computing</category>
      <dc:publisher>Sascha</dc:publisher>
      <pingback:server>http://www.sascha-dittmann.de/pingback.axd</pingback:server>
      <pingback:target>http://www.sascha-dittmann.de/post.aspx?id=d4ca3b23-60c1-41c6-bafe-46d5c8b9e53b</pingback:target>
      <slash:comments>2</slash:comments>
      <trackback:ping>http://www.sascha-dittmann.de/trackback.axd?id=d4ca3b23-60c1-41c6-bafe-46d5c8b9e53b</trackback:ping>
      <wfw:comment>http://www.sascha-dittmann.de/post/dotnet-Cologne-2012-RavenDB-auf-Windows-Azure.aspx#comment</wfw:comment>
      <wfw:commentRss>http://www.sascha-dittmann.de/syndication.axd?post=d4ca3b23-60c1-41c6-bafe-46d5c8b9e53b</wfw:commentRss>
    </item>
    <item>
      <title>Apache Hadoop für Windows Azure - MapReduce mit C#</title>
      <description>&lt;p style="display: inline-block;"&gt;&lt;img style="margin: 0px 10px 5px 0px; padding-right: 10px; float: left;" src="http://www.sascha-dittmann.de/image.axd?picture=2012%2f04%2fHadoopCSLogo.png" alt="Azure Hadoop Logo" /&gt;&lt;strong&gt;Nachdem ich in meinem Blog Post "&lt;a href="http://www.sascha-dittmann.de/post/Apache-Hadoop-fuer-Windows-Azure-MapReduce-mit-JavaScript.aspx"&gt;Apache Hadoop f&amp;uuml;r Windows Azure - MapReduce mit JavaScript&lt;/a&gt;" einen &lt;a href="http://de.wikipedia.org/wiki/MapReduce" rel="nofollow" target="_blank"&gt;MapReduce&lt;/a&gt;-Algorithmus mit JavaScript vorgestellt hatte, m&amp;ouml;chte ich diesmal das Ganze mit Microsoft Bordmitteln umsetzen. &lt;br /&gt;Auch hier kommt wieder die Developer Preview der &lt;a href="http://www.hadooponazure.com/" rel="nofollow" target="_blank"&gt;Apache Hadoop-based Services for Windows Azure&lt;/a&gt; zum Einsatz.&lt;/strong&gt;&lt;/p&gt;
&lt;h2&gt;Hadoop Streaming&lt;/h2&gt;
&lt;p&gt;MapReduce-Algorithmen lassen sich, dank der Streaming-Funktionalit&amp;auml;t des Apache Hadoop Frameworks, in jeder Programmiersprache umsetzen, die auf dem zu Grunde liegenden Betriebssystem ausf&amp;uuml;hrbar ist.&lt;/p&gt;
&lt;p&gt;Hadoop Streaming wurde standardm&amp;auml;&amp;szlig;ig f&amp;uuml;r Text-Datenstr&amp;ouml;me ausgelegt, obwohl in der Version 0.21.0 auch Bin&amp;auml;rstr&amp;ouml;me implementiert wurden.&lt;/p&gt;
&lt;p&gt;Da also die &lt;a href="http://www.hadooponazure.com/" rel="nofollow" target="_blank"&gt;Apache Hadoop-based Services for Windows Azure&lt;/a&gt; auf Windows 2008 Server Instanzen ausgef&amp;uuml;hrt werde, wollte ich einmal die Umsetzung mit dem .NET Framework, genauer gesagt mit C#, ausprobieren.&lt;/p&gt;
&lt;h2&gt;Das Map Programm&lt;/h2&gt;
&lt;p&gt;Das &lt;em&gt;Map&lt;/em&gt; Programm bekommt hierbei den Text-Datenstrom Zeile f&amp;uuml;r Zeile &amp;uuml;bermittelt, und gibt, &amp;uuml;ber seine Konsolenausgabe, die Ergebnis Schl&amp;uuml;ssel / Wert - Paare (durch ein Tab-Zeichen getrennt) zur&amp;uuml;ck.&lt;/p&gt;
&lt;p&gt;Als Beispiel greife ich erneut das W&amp;ouml;rterz&amp;auml;hlen-Szenario, aus dem Blog Post "&lt;a href="http://www.sascha-dittmann.de/post/Apache-Hadoop-fuer-Windows-Azure-MapReduce-mit-JavaScript.aspx"&gt;Apache Hadoop f&amp;uuml;r Windows Azure - MapReduce mit JavaScript&lt;/a&gt;", auf. &lt;br /&gt;Somit w&amp;uuml;rde der C# Code des Map Programms wie folgt aussehen:&lt;/p&gt;
&lt;pre class="brush: c-sharp;"&gt;using System;
using System.Text.RegularExpressions;

namespace WordCountMapper
{
  class Program
  {
    static void Main(string[] args)
    {
      string line;
      var regex = new Regex("[a-zA-Z]+");

      // Einlesen des Hadoop Datenstroms
      while ((line = Console.ReadLine()) != null)
      {
        foreach (Match match in regex.Matches(line))
        {
          // Schreiben in den Hadoop Datenstrom
          Console.WriteLine("{0}\t1", match.Value.ToLower());
        }
      }
    }
  }
}&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2&gt;Das Reduce Programm&lt;/h2&gt;
&lt;p&gt;Beim &lt;em&gt;Reduce&lt;/em&gt; Programm wird der zu schreibende Code nicht ganz so sch&amp;ouml;n, wie bei meinem JavaScript Beispiel, da zwar vom Hadoop MapReduce Framework die Liste der Schl&amp;uuml;ssel / Wert - Paare vorsortiert wird, aber gemeinsamen Werte nicht wie gehabt in einem &lt;em&gt;Array&lt;/em&gt;, sondern Zeile f&amp;uuml;r Zeile &amp;uuml;bermittelt werden.&lt;/p&gt;
&lt;pre class="brush: c-sharp;"&gt;using System;

namespace WordCountReducer
{
  class Program
  {
    static void Main(string[] args)
    {
      string line;
      string prevWord = null;
      int count = 0;

      // Einlesen des Hadoop Datenstroms
      while ((line = Console.ReadLine()) != null)
      {
        if (!line.Contains("\t"))
          continue;
        var word = line.Split('\t')[0];
        var cnt = Convert.ToInt32(line.Split('\t')[1]);

        if (prevWord != word)
        {
          if (prevWord != null)
            Console.WriteLine("{0}\t{1}", prevWord, count);

          prevWord = word;
          count = cnt;
        }
        else
          count += cnt;
      }

      Console.WriteLine("{0}\t{1}", prevWord, count);
    }
  }
}&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2&gt;Ausf&amp;uuml;hren des MapReduce-Algorithmus&lt;/h2&gt;
&lt;h3&gt;Die Vorbereitungen&lt;/h3&gt;
&lt;p&gt;Um den in C# entwickelten MapReduce-Algorithmus ausf&amp;uuml;hren zu k&amp;ouml;nnen, m&amp;uuml;ssen als Erstes die kompilierten Konsolenapplikationen in das &lt;a href="http://hadoop.apache.org/hdfs/"&gt;Hadoop Distributed File System (HDFS)&lt;/a&gt; &amp;uuml;bertragen werden. &lt;br /&gt;Auch hier bietet sich wieder die Interaktive JavaScript Konsole an:&lt;/p&gt;
&lt;p&gt;&lt;img style="margin: 0px 10px 5px 0px;" src="http://www.sascha-dittmann.de/image.axd?picture=2012%2f02%2fHadoopJS_01.png" alt="Azure Hadoop - Dashboard" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src="http://www.sascha-dittmann.de/image.axd?picture=2012%2f02%2fHadoopJS_02.png" alt="Azure Hadoop - Interaktive Konsole" /&gt;&lt;/p&gt;
&lt;p&gt;F&amp;uuml;r das sp&amp;auml;tere Wiederfinden der &lt;em&gt;Assemblies&lt;/em&gt;, bieten sich absolute Pfadangaben, wie z.B. /examples/apps/WordCountMapper.exe, beim &lt;em&gt;Upload&lt;/em&gt; an:&lt;/p&gt;
&lt;pre class="brush: plain;"&gt;js&amp;gt; fs.put()
File uploaded.&lt;/pre&gt;
&lt;p&gt;&lt;img src="http://www.sascha-dittmann.de/image.axd?picture=2012%2f04%2fHadoopCS_01.png" alt="Azure Hadoop - Upload a file" /&gt;&lt;/p&gt;
&lt;p&gt;Dann noch eine kurze Kontrolle, ob alles erfolgreich in Hadoop gelandet ist:&lt;/p&gt;
&lt;pre class="brush: plain;"&gt;js&amp;gt; #ls texte
Found 17 items
-rw-r--r-- 3 Sascha supergroup  366 2012-04-26 16:48 /user/Sascha/texte/Faust_01.txt
-rw-r--r-- 3 Sascha supergroup  351 2012-04-26 16:48 /user/Sascha/texte/Faust_02.txt
-rw-r--r-- 3 Sascha supergroup  340 2012-04-26 16:48 /user/Sascha/texte/Faust_03.txt
-rw-r--r-- 3 Sascha supergroup  358 2012-04-26 16:48 /user/Sascha/texte/Faust_04.txt
-rw-r--r-- 3 Sascha supergroup 1071 2012-04-26 16:48 /user/Sascha/texte/Faust_05.txt
-rw-r--r-- 3 Sascha supergroup  335 2012-04-26 16:48 /user/Sascha/texte/Faust_06.txt
-rw-r--r-- 3 Sascha supergroup  353 2012-04-26 16:48 /user/Sascha/texte/Faust_07.txt
-rw-r--r-- 3 Sascha supergroup  583 2012-04-26 16:49 /user/Sascha/texte/Faust_08.txt
-rw-r--r-- 3 Sascha supergroup  659 2012-04-26 16:49 /user/Sascha/texte/Faust_09.txt
-rw-r--r-- 3 Sascha supergroup  170 2012-04-26 16:49 /user/Sascha/texte/Faust_10.txt
-rw-r--r-- 3 Sascha supergroup 1056 2012-04-26 16:49 /user/Sascha/texte/Faust_11.txt
-rw-r--r-- 3 Sascha supergroup  995 2012-04-26 16:49 /user/Sascha/texte/Faust_12.txt
-rw-r--r-- 3 Sascha supergroup 1128 2012-04-26 16:49 /user/Sascha/texte/Faust_13.txt
-rw-r--r-- 3 Sascha supergroup  489 2012-04-26 16:49 /user/Sascha/texte/Faust_14.txt
-rw-r--r-- 3 Sascha supergroup  609 2012-04-26 16:49 /user/Sascha/texte/Faust_15.txt
-rw-r--r-- 3 Sascha supergroup  611 2012-04-26 16:49 /user/Sascha/texte/Faust_16.txt
-rw-r--r-- 3 Sascha supergroup  444 2012-04-26 16:49 /user/Sascha/texte/Faust_17.txt

js&amp;gt; #ls /example/apps
Found 2 items
-rw-r--r-- 3 Sascha supergroup 5120 2012-04-26 16:46 /example/apps/WordCountMapper.exe
-rw-r--r-- 3 Sascha supergroup 5120 2012-04-26 16:46 /example/apps/WordCountReducer.exe

&amp;nbsp;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3&gt;Bestimmen der NameNode IP Adresse&lt;/h3&gt;
&lt;p&gt;Um die hochgeladenen Dateien im HDFS eindeutig angeben zu k&amp;ouml;nnen, ben&amp;ouml;tigen wir noch die IP Adresse des HDFS Verzeichnisservers, genauer gesagt die des &lt;em&gt;HDFS Name-Nodes&lt;/em&gt;.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Eine Einf&amp;uuml;hrung in den Aufbau und die Funktionsweise des HDFS werde ich in einem der kommenden Blog Post nachreichen.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Hierzu verbinden wir uns am Besten mit dem Name-Node-Server via Remote Desktop Connection:&lt;/p&gt;
&lt;p&gt;&lt;img src="http://www.sascha-dittmann.de/image.axd?picture=2012%2f04%2fHadoopCS_02.png" alt="Azure Hadoop - Dashboard - Remote Desktop" /&gt;&lt;/p&gt;
&lt;p&gt;Dieser enth&amp;auml;lt die Hadoop Konfigurationsdateien unter &lt;strong&gt;C:\Apps\dist\conf&lt;/strong&gt;. &lt;br /&gt;Die f&amp;uuml;r uns interessante Konfigurationsdatei ist die &lt;em&gt;&lt;strong&gt;core-site.xml&lt;/strong&gt;&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;&lt;img src="http://www.sascha-dittmann.de/image.axd?picture=2012%2f04%2fHadoopCS_03.png" alt="Azure Hadoop - Hadoop Konfigurationsdateien" /&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Diese enth&amp;auml;lt u.a. die &lt;strong&gt;&lt;em&gt;fs.default.name&lt;/em&gt;&lt;/strong&gt; Einstellung:&lt;/p&gt;
&lt;p&gt;&lt;img src="http://www.sascha-dittmann.de/image.axd?picture=2012%2f04%2fHadoopCS_04.png" alt="Azure Hadoop - Hadoop Konfigurationsdateien" /&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3&gt;Ausf&amp;uuml;hren des MapReduce Jobs&lt;/h3&gt;
&lt;p&gt;Nachdem nun alle Vorbereitungen abgeschlossen sind, kann via JavaScript Konsole der Job gestartet werden:&lt;/p&gt;
&lt;pre class="brush: plain;"&gt;js&amp;gt; runJar('apps/hadoop-streaming.jar', 
  '-files "hdfs://10.186.148.116:9000/example/apps/WordCountMapper.exe,
  hdfs://10.186.148.116:9000/example/apps/WordCountReducer.exe"
  -mapper "WordCountMapper.exe" -reducer "WordCountReducer.exe"
  -input "texte" -output "Woerter"')&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3&gt;Das MapReduce Protokoll&lt;/h3&gt;
&lt;p&gt;Das dabei entstehende Log, sieht wie folgt aus:&lt;/p&gt;
&lt;pre class="brush: plain;"&gt;packageJobJar: [] [/C:/Apps/dist/lib/hadoop-streaming.jar] D:\Users\Sascha\AppData\Local\Temp\streamjob1630339583880296337.jar tmpDir=null
12/04/26 17:18:06 INFO mapred.FileInputFormat: Total input paths to process : 17
12/04/26 17:18:08 INFO streaming.StreamJob: getLocalDirs(): [/hdfs/mapred/local]
12/04/26 17:18:08 INFO streaming.StreamJob: Running job: job_201204261607_0002
12/04/26 17:18:08 INFO streaming.StreamJob: To kill this job, run:
12/04/26 17:18:08 INFO streaming.StreamJob: C:\Apps\dist/bin/hadoop job  -Dmapred.job.tracker=10.186.148.116:9010 -kill job_201204261607_0002
12/04/26 17:18:08 INFO streaming.StreamJob: Tracking URL: http://10.186.148.116:50030/jobdetails.jsp?jobid=job_201204261607_0002
12/04/26 17:18:09 INFO streaming.StreamJob:  map 0%  reduce 0%
12/04/26 17:18:33 INFO streaming.StreamJob:  map 18%  reduce 0%
12/04/26 17:18:34 INFO streaming.StreamJob:  map 82%  reduce 0%
12/04/26 17:18:35 INFO streaming.StreamJob:  map 100%  reduce 0%
12/04/26 17:18:54 INFO streaming.StreamJob:  map 100%  reduce 100%
12/04/26 17:19:06 INFO streaming.StreamJob: Job complete: job_201204261607_0002
12/04/26 17:19:06 INFO streaming.StreamJob: Output: Woerter

&amp;nbsp;&lt;/pre&gt;
&lt;h3&gt;Das Ergebnis&lt;/h3&gt;
&lt;p&gt;Das Ergebnis kann, wie gewohnt, mit &lt;strong&gt;fs.read(...)&lt;/strong&gt; angezeigt werden:&lt;/p&gt;
&lt;pre class="brush: plain;"&gt;js&amp;gt; fs.read("Woerter")
ab              1
abendrot        1
aber            1
abgesponnen     1
ach             2
akkorden        1
alle            4
allein          1
allen           1
allenfalls      1
aller           1
allerliebste    1
allerschlimmste 1
alles           1
allgemeinen     1
als             2
alte            1
alten           1
alter           1
am              3
an              10
anblick         1
andern          1
angefochten     1
...&lt;/pre&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/SaschaDittmann?a=QGX7vAYVcJQ:S4OSGSgZkbI:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SaschaDittmann?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SaschaDittmann?a=QGX7vAYVcJQ:S4OSGSgZkbI:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SaschaDittmann?i=QGX7vAYVcJQ:S4OSGSgZkbI:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SaschaDittmann?a=QGX7vAYVcJQ:S4OSGSgZkbI:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SaschaDittmann?i=QGX7vAYVcJQ:S4OSGSgZkbI:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SaschaDittmann?a=QGX7vAYVcJQ:S4OSGSgZkbI:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SaschaDittmann?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/SaschaDittmann/~4/QGX7vAYVcJQ" height="1" width="1"/&gt;</description>
      <link>http://www.sascha-dittmann.de/post/Apache-Hadoop-fur-Windows-Azure-MapReduce-mit-CSharp.aspx</link>
      <comments>http://www.sascha-dittmann.de/post/Apache-Hadoop-fur-Windows-Azure-MapReduce-mit-CSharp.aspx#comment</comments>
      <guid>http://www.sascha-dittmann.de/post.aspx?id=cb48f82b-c6e2-49d9-be6e-7d51dfdb092d</guid>
      <pubDate>Fri, 27 Apr 2012 08:33:00 +0200</pubDate>
      <category>.NET</category>
      <category>Cloud Computing</category>
      <dc:publisher>Sascha</dc:publisher>
      <pingback:server>http://www.sascha-dittmann.de/pingback.axd</pingback:server>
      <pingback:target>http://www.sascha-dittmann.de/post.aspx?id=cb48f82b-c6e2-49d9-be6e-7d51dfdb092d</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://www.sascha-dittmann.de/trackback.axd?id=cb48f82b-c6e2-49d9-be6e-7d51dfdb092d</trackback:ping>
      <wfw:comment>http://www.sascha-dittmann.de/post/Apache-Hadoop-fur-Windows-Azure-MapReduce-mit-CSharp.aspx#comment</wfw:comment>
      <wfw:commentRss>http://www.sascha-dittmann.de/syndication.axd?post=cb48f82b-c6e2-49d9-be6e-7d51dfdb092d</wfw:commentRss>
    </item>
    <item>
      <title>Die Blogs der deutschen Cloud Computing Community</title>
      <description>&lt;p style="display: inline-block; font-weight: bold;"&gt;&lt;img style="float: left;" src="http://www.sascha-dittmann.de/image.axd?picture=2012%2f01%2fSammelpunkt.png" alt="Sammelpunkt" /&gt;Die "&lt;a href="http://www.sascha-dittmann.de/post/Azure-Blogger-vereinigt-Euch.aspx" target="_blank"&gt;Azure Blogger vereinigt Euch&lt;/a&gt;" Initiative geht in die n&amp;auml;chste Runde: &lt;br /&gt;In Zusammenarbeit mit &lt;a href="http://chrison.net/" rel="friend" target="_blank"&gt;Christoph Wille&lt;/a&gt; und &lt;a href="http://blog.alexonasp.net" rel="friend" target="_blank"&gt;Alexander Zeitler&lt;/a&gt; ist ein News-Aggregator, f&amp;uuml;r die deutschsprachige Cloud Computing Community, entstanden.&lt;/p&gt;
&lt;p&gt;Neben den bereits bekannten Portalen, wie &lt;a href="http://blogs.dotnetgerman.com/" rel="friend" target="_blank"&gt;DotNetGeman Bloggers&lt;/a&gt;, &lt;a href="http://sqlserverblogs.de/" rel="friend" target="_blank"&gt;SQLServerBlogs.de&lt;/a&gt; oder &lt;a href="http://itproblogs.de/" rel="friend" target="_blank"&gt;itproblogs.de&lt;/a&gt;, existiert seit wenigen Tagen ein neuer News-Aggregator f&amp;uuml;r die Blogs der deutschen Cloud Computing-Community:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://cloudbloggers.de/" rel="friend" target="_blank"&gt;&lt;img style="margin: 0px 10px 5px 0px; border-width: 0px;" src="http://cloudbloggers.de/images/cloudbloggers400x97.png" alt="CloudBloggers.de Logo" /&gt;&lt;br /&gt;http://cloudbloggers.de&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Hier sollen Blog Posts &amp;uuml;ber Themen, wie z.B. die Windows Azure Plattform, Office 365 oder auch Windows Intune zu einem gemeinsamen News-Stream zusammengefasst werden.&lt;/p&gt;
&lt;p&gt;Noch ist die Anzahl der aggregierten Blogs recht &amp;uuml;berschaubar, aber ich hoffe das sich das schnell &amp;auml;ndern wird.&lt;/p&gt;
&lt;p&gt;F&amp;uuml;r weitere Ideen, die diese Initiative vorantreiben k&amp;ouml;nnen, sind wir Euch dankbar. &lt;br /&gt;Hinterlasst einfach einen Kommentar auf diesem Blog Post.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/SaschaDittmann?a=iJfF3mq7TQo:vhhrTDR7d4w:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SaschaDittmann?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SaschaDittmann?a=iJfF3mq7TQo:vhhrTDR7d4w:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SaschaDittmann?i=iJfF3mq7TQo:vhhrTDR7d4w:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SaschaDittmann?a=iJfF3mq7TQo:vhhrTDR7d4w:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SaschaDittmann?i=iJfF3mq7TQo:vhhrTDR7d4w:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SaschaDittmann?a=iJfF3mq7TQo:vhhrTDR7d4w:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SaschaDittmann?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/SaschaDittmann/~4/iJfF3mq7TQo" height="1" width="1"/&gt;</description>
      <link>http://www.sascha-dittmann.de/post/Die-Blogs-der-deutschen-Cloud-Computing-Community.aspx</link>
      <comments>http://www.sascha-dittmann.de/post/Die-Blogs-der-deutschen-Cloud-Computing-Community.aspx#comment</comments>
      <guid>http://www.sascha-dittmann.de/post.aspx?id=212754d8-ca6c-4af2-b4c9-65149ea230f5</guid>
      <pubDate>Mon, 02 Apr 2012 09:10:00 +0200</pubDate>
      <category>.NET</category>
      <category>Cloud Computing</category>
      <category>SQL Server</category>
      <dc:publisher>Sascha</dc:publisher>
      <pingback:server>http://www.sascha-dittmann.de/pingback.axd</pingback:server>
      <pingback:target>http://www.sascha-dittmann.de/post.aspx?id=212754d8-ca6c-4af2-b4c9-65149ea230f5</pingback:target>
      <slash:comments>8</slash:comments>
      <trackback:ping>http://www.sascha-dittmann.de/trackback.axd?id=212754d8-ca6c-4af2-b4c9-65149ea230f5</trackback:ping>
      <wfw:comment>http://www.sascha-dittmann.de/post/Die-Blogs-der-deutschen-Cloud-Computing-Community.aspx#comment</wfw:comment>
      <wfw:commentRss>http://www.sascha-dittmann.de/syndication.axd?post=212754d8-ca6c-4af2-b4c9-65149ea230f5</wfw:commentRss>
    </item>
    <item>
      <title>Vorträge 2011: Einführung in die Windows Azure Plattform für Entwickler</title>
      <description>&lt;p style="display: inline-block;"&gt;&lt;img style="padding-right: 10px; padding-bottom: 10px; float: left;" src="http://www.sascha-dittmann.de/image.axd?picture=2012%2f03%2fWAVortrag2011_Teaser.png" alt="Die Windows Azure Plattform - Eine Einf&amp;uuml;hrung f&amp;uuml;r Entwickler" /&gt;&lt;strong&gt;In 2011 habe ich den Vortrag "Die Windows Azure Plattform - Eine Einf&amp;uuml;hrung f&amp;uuml;r Entwickler" bei der &lt;a href="http://online-usergroup.de/termine.20110815.ashx" rel="friend" target="_blank"&gt;.NET Online User Group (15. August 2011)&lt;/a&gt;, sowie bei der &lt;a href="http://dotnet-rhein-neckar.posterous.com/" rel="friend" target="_blank"&gt;.NET Usergroup Rhein-Neckar (05. Oktober 2011)&lt;/a&gt;, gehalten.&lt;br /&gt;Da vergangenen Samstag die Videoaufzeichnung des Vortrags online gestellt wurde, m&amp;ouml;chte ich die Gelegenheit nutzen, die Aufzeichnung, sowie aktualisierten Slides, in diesem Post zur Verf&amp;uuml;gung zu stellen.&lt;/strong&gt;&lt;/p&gt;
&lt;h2&gt;Synopse&lt;/h2&gt;
&lt;p&gt;Die Windows Azure Plattform hatte ihren offiziellen Start am 01. Februar 2010 und wird seitdem stetig erweitert.&lt;br /&gt;Dennoch wissen bislang wenige Entwickler welche M&amp;ouml;glichkeiten Windows Azure bietet.&lt;/p&gt;
&lt;p&gt;Dieser Vortrag liefert einen &amp;Uuml;berblick &amp;uuml;ber die Konzepte bzw. Dienste der Windows Azure Plattform, wie z.B. die Windows Azure Rollen, Azure Storage &amp;amp; SQL Azure, die Azure Management API sowie die Windows Azure AppFabric.&lt;/p&gt;
&lt;p&gt;Kombiniert mit einigen &lt;a href="http://www.sascha-dittmann.de/page/Serie-Erste-Schritte-mit-Windows-Azure.aspx" target="_blank"&gt;Code Beispielen&lt;/a&gt; und Erfahrungen aus der Praxis, soll so der Einstieg in die Softwareentwicklung mit Windows Azure vereinfacht werden.&lt;/p&gt;
&lt;h2&gt;.NET Online User Group&lt;/h2&gt;
&lt;p&gt;&lt;iframe src="http://player.vimeo.com/video/37849956?title=0&amp;amp;byline=0&amp;amp;portrait=0&amp;amp;color=59a5d1" frameborder="0" width="585" height="330"&gt;&lt;/iframe&gt;&lt;/p&gt;
&lt;h2&gt;.NET User Group Rhein-Neckar&lt;/h2&gt;
&lt;p&gt;&lt;iframe src="http://www.slideshare.net/slideshow/embed_code/10468068" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" width="585" height="489"&gt;&lt;/iframe&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/SaschaDittmann?a=GOy7fGc5TYc:t8n2UncsMQM:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SaschaDittmann?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SaschaDittmann?a=GOy7fGc5TYc:t8n2UncsMQM:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SaschaDittmann?i=GOy7fGc5TYc:t8n2UncsMQM:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SaschaDittmann?a=GOy7fGc5TYc:t8n2UncsMQM:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SaschaDittmann?i=GOy7fGc5TYc:t8n2UncsMQM:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SaschaDittmann?a=GOy7fGc5TYc:t8n2UncsMQM:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SaschaDittmann?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/SaschaDittmann/~4/GOy7fGc5TYc" height="1" width="1"/&gt;</description>
      <link>http://www.sascha-dittmann.de/post/Vortraege-2011-Einfuehrung-in-die-Windows-Azure-Plattform-fuer-Entwickler.aspx</link>
      <comments>http://www.sascha-dittmann.de/post/Vortraege-2011-Einfuehrung-in-die-Windows-Azure-Plattform-fuer-Entwickler.aspx#comment</comments>
      <guid>http://www.sascha-dittmann.de/post.aspx?id=65732f57-ac58-451a-8be4-dd7c5562bc39</guid>
      <pubDate>Mon, 05 Mar 2012 13:38:00 +0200</pubDate>
      <category>.NET</category>
      <category>Cloud Computing</category>
      <dc:publisher>Sascha</dc:publisher>
      <pingback:server>http://www.sascha-dittmann.de/pingback.axd</pingback:server>
      <pingback:target>http://www.sascha-dittmann.de/post.aspx?id=65732f57-ac58-451a-8be4-dd7c5562bc39</pingback:target>
      <slash:comments>1</slash:comments>
      <trackback:ping>http://www.sascha-dittmann.de/trackback.axd?id=65732f57-ac58-451a-8be4-dd7c5562bc39</trackback:ping>
      <wfw:comment>http://www.sascha-dittmann.de/post/Vortraege-2011-Einfuehrung-in-die-Windows-Azure-Plattform-fuer-Entwickler.aspx#comment</wfw:comment>
      <wfw:commentRss>http://www.sascha-dittmann.de/syndication.axd?post=65732f57-ac58-451a-8be4-dd7c5562bc39</wfw:commentRss>
    </item>
    <item>
      <title>Dateien blockweise im Windows Azure Blob Storage speichern</title>
      <description>&lt;p style="display: inline-block;"&gt;&lt;img style="padding-right: 10px; float: left;" src="http://www.sascha-dittmann.de/image.axd?picture=2012%2f02%2fBlockBlobsTeaser.jpg" alt="Lastentr&amp;auml;ger (Nepal)" /&gt;&lt;strong&gt;In letzter Zeit stehe ich regelm&amp;auml;&amp;szlig;ig vor der Herausforderung gr&amp;ouml;&amp;szlig;ere Dateien, &amp;uuml;ber eine langsame und teilweise instabile Verbindung, in den Windows Azure Blog Storage &amp;uuml;bertragen zu m&amp;uuml;ssen. &lt;br /&gt;Hierbei kommt es zwangsl&amp;auml;ufig zu Timeouts, sowie diversen Fehlermeldungen. &lt;br /&gt;Eine M&amp;ouml;glichkeit, mit dieser Herausforderung umzugehen, ist es die Dateien blockweise zu &amp;uuml;bertragen.&lt;/strong&gt;&lt;/p&gt;
&lt;h2&gt;Dateien in einem St&amp;uuml;ck &amp;uuml;bertragen&lt;/h2&gt;
&lt;p&gt;Um eine Datei im Windows Azure Blob Storage zu speichern, w&amp;uuml;rde man normalerweise wie folgt vorgehen:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Blob Client Objekt erzeugen.&lt;/li&gt;
&lt;li&gt;Blob Referenz erzeugen und ggf. Meta-Daten angeben, wie z.B. den Content Type.&lt;/li&gt;
&lt;li&gt;Blob mit der UploadFile Methode speichern.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class="brush: c-sharp;"&gt;var storageAccount = CloudStorageAccount
  .FromConfigurationSetting("AzureStorageConnectionString");
var blobClient = storageAccount.CreateCloudBlobClient();

var blob = blobClient.GetBlobReference("container/datei.bin");
blob.Properties.ContentType = "application/octet-stream";

blob.UploadFile(@"C:\datei.bin");&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2&gt;Dateien Block f&amp;uuml;r Block &amp;uuml;bertragen&lt;/h2&gt;
&lt;p&gt;Was mache ich aber, wenn die Datei gr&amp;ouml;&amp;szlig;er als 64 MB ist, &lt;br /&gt;oder ich nur eine langsame, instabile Verbindung nutzen kann?&lt;/p&gt;
&lt;h3&gt;Die L&amp;ouml;sung hei&amp;szlig;t Block Blob's&lt;/h3&gt;
&lt;p&gt;Hier bieten sich die Eigenschaften eines Block Blob's an, da dieser aus einer Sequenz von Bl&amp;ouml;cken besteht.&lt;/p&gt;
&lt;p&gt;&lt;img src="http://www.sascha-dittmann.de/image.axd?picture=2012%2f01%2fErsteAzureAppBlobs_02.png" alt="Windows Azure Storage - Block Blob" /&gt;&lt;/p&gt;
&lt;p&gt;Genauer gesagt:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Diese Bl&amp;ouml;cke k&amp;ouml;nnen einzeln &amp;uuml;bertragen werden und unterschiedlich gro&amp;szlig; sein (Max. 4MB).&lt;/li&gt;
&lt;li&gt;Mehrere Bl&amp;ouml;cke k&amp;ouml;nnen gleichzeitig hochgeladen werden.&lt;/li&gt;
&lt;li&gt;Einzelne Bl&amp;ouml;cke k&amp;ouml;nnen auch mehrfach &amp;uuml;bertragen werden, wie z.B. bei fehlerhaften &amp;Uuml;bertragen.&lt;/li&gt;
&lt;li&gt;Sobald alle Bl&amp;ouml;cke &amp;uuml;bertragen wurden, kann der Vorgang durch einen &lt;em&gt;Commit&lt;/em&gt; abgeschlossen werden.&lt;/li&gt;
&lt;li&gt;Dieser &amp;Uuml;bertragungsvorgang kann jederzeit unterbrochen, und zu einem sp&amp;auml;teren Zeitpunkt fortgef&amp;uuml;hrt, werden. &lt;br /&gt;Nach einer Woche werden unbest&amp;auml;tigte Bl&amp;ouml;cke automatisch verworfen.&lt;/li&gt;
&lt;li&gt;Ein Block Blob kann aus maximal 50.000 best&amp;auml;tigten Bl&amp;ouml;cken bzw. 100.000 unbest&amp;auml;tigten Bl&amp;ouml;cken bestehen.&lt;/li&gt;
&lt;li&gt;Jeder dieser Bl&amp;ouml;cke wird &amp;uuml;ber eine eindeutige, 64 Byte gro&amp;szlig;e, Block ID identifiziert.&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;Bei Dateien, die gr&amp;ouml;&amp;szlig;er als 200MB und kleiner als 1TB sind, bieten sich Page Blobs an.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3&gt;Datei aufteilen und &amp;uuml;bertragen&lt;/h3&gt;
&lt;p&gt;Um eine Datei in Bl&amp;ouml;cke zu zerteilen und diese einzeln zu &amp;uuml;bertragen, kann man wie folgt vorgehen:&lt;/p&gt;
&lt;pre class="brush: c-sharp;"&gt;using (var fileStream = new FileStream(fileName, 
  FileMode.Open, FileAccess.Read))
{
  var blockIdList = new List&amp;lt;string&amp;gt;();
  var blockId = 0;

  while(fileStream.Position &amp;lt; fileStream.Length)
  {
    // Buffergr&amp;ouml;&amp;szlig;e anhand der gew&amp;uuml;nschten Blockgr&amp;ouml;&amp;szlig;e (in KB)
    // bzw. anhand der restlichen Datenmenge bestimmen.
    var bufferSize = 
      blockSize * 1024 &amp;lt; fileStream.Length - fileStream.Position
      ? blockSize * 1024
      : fileStream.Length - fileStream.Position;
    var buffer = new byte[bufferSize];

    // Daten in das Bufferarray einlesen
    fileStream.Read(buffer, 0, buffer.Length);

    // Block zum Windows Azure Blob Storage &amp;uuml;bertragen
    using (var stream = new MemoryStream(buffer))
    {
      // Block ID konvertieren.
      var blockIdBase64 =
        Convert.ToBase64String(
          Encoding.UTF8.GetBytes(
            blockId.ToString(CultureInfo.InvariantCulture)
            .PadLeft(64, '0')));

      // Optional kann bei der PutBlock Methode ein
      // MD5 Hash zur Validierung angegeben werden.
      blob.PutBlock(blockIdBase64, stream, null);
      blockList.Add(blockIdBase64);
      blockId++;
    }
  }
}&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3&gt;Bl&amp;ouml;cke wieder zusammenf&amp;uuml;hren&lt;/h3&gt;
&lt;p&gt;Nach der erfolgreichen &amp;Uuml;bertragung aller Bl&amp;ouml;cke, m&amp;uuml;ssen diese beim Windows Azure Blob Storage als "vollst&amp;auml;ndig" best&amp;auml;tigt werden:&lt;/p&gt;
&lt;pre class="brush: c-sharp;"&gt;// Hierbei ist die richtige Reihenfolge der Block-ID's entscheidend!
blob.PutBlockList(blockList);&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Erst jetzt steht der Blob, wie gewohnt, zum Download zur Verf&amp;uuml;gung.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3&gt;Beispielprojekt&lt;/h3&gt;
&lt;p&gt;Um das Ganze auch mal Live erleben zu k&amp;ouml;nnen, habe ich diesem Blog Post ein Beispielprojekt angeh&amp;auml;ngt.&lt;/p&gt;
&lt;p&gt;&lt;img src="http://www.sascha-dittmann.de/image.axd?picture=2012%2f02%2fBlockBlobs_01.png" alt="Beispielprojekt - Block Blob Storage Demo 1" /&gt;&lt;/p&gt;
&lt;p&gt;Je nach Installationsverzeichnis des Windows Azure SDK, muss der Pfad zum Windows Azure Storage Emulator, in der &lt;em&gt;UploadBlockBlobStorageForm.cs&lt;/em&gt;, angepasst werden:&lt;/p&gt;
&lt;pre class="brush: c-sharp;"&gt;#region Private Felder

private const string WindowsAzureEmulator = 
  @"C:\Program Files\Windows Azure Emulator\emulator\csrun.exe";

#endregion&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr /&gt;
&lt;table border="0"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;img src="http://www.sascha-dittmann.de/image.axd?picture=Shared%2fdownload.jpg" alt="Download" /&gt;&lt;/td&gt;
&lt;td&gt;Download der Beispielanwendung: &lt;br /&gt;&lt;a href="http://www.sascha-dittmann.de/file.axd?file=2012%2f02%2fWABlockBlobStorageDemo1.zip"&gt;WABlockBlobStorageDemo1.zip (107,29 kb)&lt;/a&gt; &lt;br /&gt; &lt;br /&gt;Weitere Informationen &lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.sascha-dittmann.de/post/Erste-Schritte-mit-Windows-Azure-Der-Blob-Storage.aspx" target="_blank"&gt;Erste Schritte mit Windows Azure (Teil 3) - Der Blob Storage&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/ee772903.aspx" rel="nofollow" target="_blank"&gt;MSDN: CloudBlockBlob.PutBlock Method&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/ee758411.aspx" rel="nofollow" target="_blank"&gt;MSDN: CloudBlockBlob.PutBlockList Method&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr /&gt;
&lt;p&gt;&lt;strong&gt;Verwendete Bildquellen:&lt;/strong&gt;&lt;br /&gt;&amp;copy; Dieter Sch&amp;uuml;tz / PIXELIO&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/SaschaDittmann?a=Fg2-SEMzlLE:IP44vNEg_Rs:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SaschaDittmann?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SaschaDittmann?a=Fg2-SEMzlLE:IP44vNEg_Rs:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SaschaDittmann?i=Fg2-SEMzlLE:IP44vNEg_Rs:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SaschaDittmann?a=Fg2-SEMzlLE:IP44vNEg_Rs:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SaschaDittmann?i=Fg2-SEMzlLE:IP44vNEg_Rs:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SaschaDittmann?a=Fg2-SEMzlLE:IP44vNEg_Rs:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SaschaDittmann?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/SaschaDittmann/~4/Fg2-SEMzlLE" height="1" width="1"/&gt;</description>
      <link>http://www.sascha-dittmann.de/post/Dateien-blockweise-im-Windows-Azure-Blob-Storage-speichern.aspx</link>
      <comments>http://www.sascha-dittmann.de/post/Dateien-blockweise-im-Windows-Azure-Blob-Storage-speichern.aspx#comment</comments>
      <guid>http://www.sascha-dittmann.de/post.aspx?id=d4d0f73f-dc95-4a07-95aa-a92c54a15fb7</guid>
      <pubDate>Thu, 23 Feb 2012 15:53:00 +0200</pubDate>
      <category>.NET</category>
      <category>Cloud Computing</category>
      <dc:publisher>Sascha</dc:publisher>
      <pingback:server>http://www.sascha-dittmann.de/pingback.axd</pingback:server>
      <pingback:target>http://www.sascha-dittmann.de/post.aspx?id=d4d0f73f-dc95-4a07-95aa-a92c54a15fb7</pingback:target>
      <slash:comments>1</slash:comments>
      <trackback:ping>http://www.sascha-dittmann.de/trackback.axd?id=d4d0f73f-dc95-4a07-95aa-a92c54a15fb7</trackback:ping>
      <wfw:comment>http://www.sascha-dittmann.de/post/Dateien-blockweise-im-Windows-Azure-Blob-Storage-speichern.aspx#comment</wfw:comment>
      <wfw:commentRss>http://www.sascha-dittmann.de/syndication.axd?post=d4d0f73f-dc95-4a07-95aa-a92c54a15fb7</wfw:commentRss>
    </item>
    <item>
      <title>Apache Hadoop für Windows Azure - MapReduce mit JavaScript</title>
      <description>&lt;p style="display: inline-block;"&gt;&lt;img style="padding-right: 10px; float: left;" src="http://www.sascha-dittmann.de/image.axd?picture=2012%2f02%2fHadoopJSLogo.png" alt="Azure Hadoop Logo" /&gt;&lt;strong&gt;Meine Reise mit der Developer Preview des neuen Cloud Speicherdienstes "&lt;a href="http://www.hadooponazure.com/" rel="nofollow" target="_blank"&gt;Apache&amp;trade; Hadoop&amp;trade;-based Services for Windows Azure&lt;/a&gt;" geht weiter: &lt;br /&gt;Diesmal stehen die Interaktive Konsole und ein einfacher &lt;a href="http://de.wikipedia.org/wiki/MapReduce" rel="nofollow" target="_blank"&gt;MapReduce&lt;/a&gt;-Algorithmus mit JavaScript auf dem Plan.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Im meinem letzten Blog Post "&lt;a href="http://www.sascha-dittmann.de/post/Apache-Hadoop-Dienste-fuer-Windows-Azure-Developer-Preview.aspx"&gt;Apache Hadoop Dienste f&amp;uuml;r Windows Azure (Developer Preview)&lt;/a&gt;"&amp;nbsp;hatte ich von der Erstellung eines eigenen Hadoop Clusters berichtet.&lt;br /&gt;Nachdem dieses dann einsatzbereit war, wollte ich mich auf den Weg zu ein wenig Quellcode machen.&lt;/p&gt;
&lt;p&gt;Doch eine grundlegende Frage besch&amp;auml;ftigte mich:&lt;/p&gt;
&lt;h2&gt;Was ist MapReduce?&lt;/h2&gt;
&lt;p&gt;Eine kurz Suche im Internet ergab, dass es sich um einen von Google entwickelten Algorithmus handelt, mit dessen Hilfe man verteile Berechnungen &amp;uuml;ber gro&amp;szlig;e Datenmengen (im &lt;a href="http://de.wikipedia.org/wiki/Petabyte" rel="nofollow" target="_blank"&gt;Petabyte&lt;/a&gt;-Bereich) durchf&amp;uuml;hren kann.&lt;/p&gt;
&lt;p&gt;Hierzu m&amp;uuml;ssen eine Map- sowie eine Reduce-Funktion zur Verf&amp;uuml;gung gestellt werden. &lt;br /&gt;Optional kann zus&amp;auml;tzlich eine Combine-Funktion angegeben werden.&lt;/p&gt;
&lt;h3&gt;Die Map-Funktion&lt;/h3&gt;
&lt;p&gt;Die Map-Funktion berechnet dann, pro Knoten im Cluster, einen Teil des Gesamtergebnisses. &lt;br /&gt;Die so entstehenden Zwischenergebnisse, werden in einer Liste von Schl&amp;uuml;ssel-Wert-Paaren (&lt;em&gt;Key-Value-Pairs&lt;/em&gt;) zur&amp;uuml;ckgegeben.&lt;/p&gt;
&lt;h3&gt;Die Combine-Funktion&lt;/h3&gt;
&lt;p&gt;Falls eine Combine-Funktion implementiert wurde, wird dieses auf dem gleichen Clusterknoten wie die Map-Funktion ausgef&amp;uuml;hrt.&lt;/p&gt;
&lt;p&gt;Ziel ist es hierbei die Menge der Zwischenergebnisse zu verkleinern, um die darauffolgende Netzwerkbelastung, die bei der &amp;Uuml;bertragung der Zwischenergebnisse entsteht,&amp;nbsp; zu minimieren.&lt;/p&gt;
&lt;h3&gt;Die Reduce-Funktion&lt;/h3&gt;
&lt;p&gt;Wurden alle Map- und Combine-Funktionen erfolgreich durchgef&amp;uuml;hrt, beginnt die Reduce-Phase.&lt;/p&gt;
&lt;p&gt;Hierbei berechnet die Reduce-Funktion aus den Zwischenergebnismengen die Gesamtergebnismenge.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2&gt;Doch wie funktioniert dies in der Praxis?&lt;/h2&gt;
&lt;p&gt;Als einfaches Beispiel m&amp;ouml;chte ich das W&amp;ouml;rterz&amp;auml;hlen in Textdateien aufgreifen.&lt;/p&gt;
&lt;h3&gt;Die Interaktive Konsole&lt;/h3&gt;
&lt;p&gt;Zu Beginn loggte ich mich also in mein Cluster der &lt;a href="http://www.hadooponazure.com/" rel="nofollow" target="_blank"&gt;Apache&amp;trade; Hadoop&amp;trade;-based Services for Windows Azure&lt;/a&gt; ein.&lt;/p&gt;
&lt;p&gt;Im Dashboard w&amp;auml;hlte ich anschlie&amp;szlig;end die Interaktive Konsole aus:&lt;/p&gt;
&lt;p&gt;&lt;img src="http://www.sascha-dittmann.de/image.axd?picture=2012%2f02%2fHadoopJS_01.png" alt="Azure Hadoop - Dashboard" /&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Mit der Interaktiven Konsole kann, mittels JavaScript Funktionen bzw. UNIX-&amp;auml;hnlichen Befehlen, auf das verteilte Dateisystem zugegriffen werden. Au&amp;szlig;erdem stehen weitere Funktionalit&amp;auml;ten, wie z.B. das Starten von Berechnungen oder die Anzeige von einfachen Graphen, zur Verf&amp;uuml;gung.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;img src="http://www.sascha-dittmann.de/image.axd?picture=2012%2f02%2fHadoopJS_02.png" alt="Azure Hadoop - Interaktive Konsole" /&gt;&lt;/p&gt;
&lt;h3&gt;Die Vorbereitungen&lt;/h3&gt;
&lt;p&gt;Um ein wenig Text zum analysieren zu haben, bediente ich mich einiger Passagen aus &lt;a title="Johann Wolfgang von Goethe: Faust, Der Trag&amp;ouml;die erster Teil" href="http://www.digbib.org/Johann_Wolfgang_von_Goethe_1749/Faust_I" rel="nofollow" target="_blank"&gt;Goethes Faust I&lt;/a&gt;. &lt;br /&gt;Diese speicherte ich absatzweise in einzelne Textdateien.&lt;/p&gt;
&lt;p&gt;In der Konsole musste ich dann nur noch ein Verzeichnis f&amp;uuml;r die Texte erstellen, ...&lt;/p&gt;
&lt;pre class="brush: plain;"&gt;js&amp;gt; #mkdir texte&lt;/pre&gt;
&lt;p&gt;... sowie die einzelnen Dateien in das Hadoop Dateisystem (HDFS) hochladen.&lt;/p&gt;
&lt;pre class="brush: plain;"&gt;js&amp;gt; fs.put()
File uploaded.&lt;/pre&gt;
&lt;p&gt;&lt;img src="http://www.sascha-dittmann.de/image.axd?picture=2012%2f02%2fHadoopJS_03.png" alt="Azure Hadoop - File Upload Dialog" /&gt;&lt;/p&gt;
&lt;p&gt;Dann noch eine kurze Kontrolle, ob alles erfolgreich in Hadoop gelandet ist ...&lt;/p&gt;
&lt;pre class="brush: plain;"&gt;js&amp;gt; #ls
Found 2 items
drwxr-xr-x - MyUser supergroup    0 2012-02-12 /user/MyUser/.oink
drwxr-xr-x - MyUser supergroup    0 2012-02-12 /user/MyUser/texte

js&amp;gt; #ls texte
Found 17 items
-rw-r--r-- 3 MyUser supergroup  366 2012-02-12 /user/MyUser/texte/Faust_01.txt
-rw-r--r-- 3 MyUser supergroup  351 2012-02-12 /user/MyUser/texte/Faust_02.txt
-rw-r--r-- 3 MyUser supergroup  340 2012-02-12 /user/MyUser/texte/Faust_03.txt
-rw-r--r-- 3 MyUser supergroup  358 2012-02-12 /user/MyUser/texte/Faust_04.txt
-rw-r--r-- 3 MyUser supergroup 1071 2012-02-12 /user/MyUser/texte/Faust_05.txt
-rw-r--r-- 3 MyUser supergroup  335 2012-02-12 /user/MyUser/texte/Faust_06.txt
-rw-r--r-- 3 MyUser supergroup  351 2012-02-12 /user/MyUser/texte/Faust_07.txt
-rw-r--r-- 3 MyUser supergroup  581 2012-02-12 /user/MyUser/texte/Faust_08.txt
-rw-r--r-- 3 MyUser supergroup  657 2012-02-12 /user/MyUser/texte/Faust_09.txt
-rw-r--r-- 3 MyUser supergroup  168 2012-02-12 /user/MyUser/texte/Faust_10.txt
-rw-r--r-- 3 MyUser supergroup 1054 2012-02-12 /user/MyUser/texte/Faust_11.txt
-rw-r--r-- 3 MyUser supergroup  993 2012-02-12 /user/MyUser/texte/Faust_12.txt
-rw-r--r-- 3 MyUser supergroup 1126 2012-02-12 /user/MyUser/texte/Faust_13.txt
-rw-r--r-- 3 MyUser supergroup  487 2012-02-12 /user/MyUser/texte/Faust_14.txt
-rw-r--r-- 3 MyUser supergroup  609 2012-02-12 /user/MyUser/texte/Faust_15.txt
-rw-r--r-- 3 MyUser supergroup  611 2012-02-12 /user/MyUser/texte/Faust_16.txt
-rw-r--r-- 3 MyUser supergroup  444 2012-02-12 /user/MyUser/texte/Faust_17.txt&lt;/pre&gt;
&lt;p&gt;... und schon konnte ich zum eigentlich &lt;em&gt;Coding&lt;/em&gt; &amp;uuml;bergehen.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3&gt;MapReduce mit JavaScript&lt;/h3&gt;
&lt;h4&gt;Die Map-Funktion&lt;/h4&gt;
&lt;p&gt;Die Map-Funktion generiert f&amp;uuml;r jedes Wort in der Textdatei einen Eintrag (&lt;em&gt;Key-Value-Pair&lt;/em&gt;) und f&amp;uuml;gt diesen der Zwischenergebnismenge hinzu. &lt;br /&gt;Hierzu wird ein Regul&amp;auml;rer Ausdruck, sowie eine Schleife, benutzt.&lt;/p&gt;
&lt;pre class="brush: js;"&gt;var map = function (key, value, context)
{
  var words = value.split(/[^a-zA-Z]/);
  for (var i = 0; i &amp;lt; words.length; i++) {
    if (words[i] !== "") {
      context.write(words[i].toLowerCase(), 1);
    }
  }
};&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4&gt;Die Combine-Funktion&lt;/h4&gt;
&lt;p&gt;Da f&amp;uuml;r jedes Wort ein &lt;em&gt;Key-Value-Pair&lt;/em&gt; mit der Anzahl &lt;strong&gt;1&lt;/strong&gt; erstellt wird, k&amp;ouml;nnen diese in der Combine-Funktion bereits vorsummiert werden.&lt;/p&gt;
&lt;p&gt;Au&amp;szlig;erdem k&amp;ouml;nnen unerw&amp;uuml;nschte W&amp;ouml;rter herausgefiltert werden, wie z.B. "und", "der", "die", "das", etc., da auf Grund der unterschiedlichen H&amp;auml;ufigkeit von W&amp;ouml;rtern in der nat&amp;uuml;rlichen Sprache, bei einem deutschen Text sehr oft eine Ausgabe in der Form ("und", 1) erzeugt werden w&amp;uuml;rde.&lt;/p&gt;
&lt;pre class="brush: js;"&gt;var combine = function (key, values, context) {
  var sum = 0;
  if (key == 'und' 
     || key == 'der'
     || key == 'die' 
     || key == 'das') return;
  while (values.hasNext()) {
    sum += parseInt(values.next());
  }
  context.write(key, sum);
};&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4&gt;Die Reduce-Funktion&lt;/h4&gt;
&lt;p&gt;Identisch zur Combine-Funktion, werden bei der Reduce-Funktion die Zwischenergebnisse aufsummiert, um die Gesamtsummen aller Textdateien zu erhalten.&lt;/p&gt;
&lt;pre class="brush: js;"&gt;var reduce = function (key, values, context) {
  var sum = 0;
  while (values.hasNext()) {
    sum += parseInt(values.next());
  }
  context.write(key, sum);
};&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3&gt;JavaScript Funktionen ausf&amp;uuml;hren&lt;/h3&gt;
&lt;p&gt;Die nun definierten Funktionen k&amp;ouml;nnen auf unterschiedliche Arten ausgef&amp;uuml;hrt werden:&lt;/p&gt;
&lt;h4&gt;Direkt&lt;/h4&gt;
&lt;p&gt;Die erste M&amp;ouml;glichkeit, die ich hierbei vorstellen m&amp;ouml;chte, ben&amp;ouml;tigt in der hochgeladenen JavaScript Datei eine Funktion, die als Hauptprogramm dient.&lt;/p&gt;
&lt;p&gt;Dies k&amp;ouml;nnte in unserem Beispiel wie folgt aussehen:&lt;/p&gt;
&lt;pre class="brush: js;"&gt;var main = function (factory) {
    var job = factory.createJob("woerterZaehlen", "map", "reduce");
    job.setCombiner("combine");
    job.waitForCompletion(true);
};&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Anschlie&amp;szlig;end kann man das Ganze, unter Angabe der JavaScript Datei, sowie einem Quell- und Zielverzeichnis, starten:&lt;/p&gt;
&lt;pre class="brush: plain;"&gt;js&amp;gt; #ls
Found 3 items
drwxr-xr-x - MyUser supergroup   0 2012-02-13 13:40 /user/MyUser/.oink
-rw-r--r-- 3 MyUser supergroup 661 2012-02-13 16:52 /user/MyUser/WordCount.js
drwxr-xr-x - MyUser supergroup   0 2012-02-13 15:10 /user/MyUser/texte

js&amp;gt; runJs("WordCount.js", "texte", "woerter")
View Log&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4&gt;Mit Pig verfeinern&lt;/h4&gt;
&lt;p&gt;Eine weitere M&amp;ouml;glichkeit stellt das Einbetten in &lt;a href="http://pig.apache.org/" rel="nofollow" target="_blank"&gt;Apache Pig&lt;/a&gt; dar.&lt;br /&gt; Hierbei kann der &lt;em&gt;Output-Stream&lt;/em&gt; des eingebetteten MapReduce-Algorithmus, mittels des&amp;nbsp;&lt;em&gt;Pig Latin&lt;/em&gt; Syntax, weiter verfeinert werden.&lt;/p&gt;
&lt;pre class="brush: plain;"&gt;js&amp;gt; pig.from("texte").mapReduce("WordCount.js", "word, count:long")
    .orderBy("count DESC").take(15).to("Top15Woerter")
View Log&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Im hier gezeigten Beispiel wird nach "count" sortiert und nur die ersten 15 Schl&amp;uuml;ssel/Wert-Paare im &lt;em&gt;Output-Stream&lt;/em&gt; gespeichert.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Die Live-Ansicht des Protokolls, kann &amp;uuml;ber den Link "View Log" angezeigt werden.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3&gt;Ergebnisse Anzeigen&lt;/h3&gt;
&lt;p&gt;Nachdem der MapReduce-Job erfolgreich beendet wurde, kann die Ergebnismenge mit folgendem Befehl angezeigt werden (inkl. Objektreferent zur weiteren Verarbeitung):&lt;/p&gt;
&lt;pre class="brush: plain;"&gt;js&amp;gt; ergebnisse = fs.read("Top15Woerter")
ihr	25
ein	23
sich	22
was	20
es	19
ich	17
nicht	16
zu	16
euch	16
ist	16
in	15
sie	14
man	14
so	14
mit	13&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Diese Ergebnismenge kann anschlie&amp;szlig;end, mit Hilfe der o.g. Objektreferenz, in ein JSON-Objekt umgewandelt, ...&lt;/p&gt;
&lt;pre class="brush: plain;"&gt;js&amp;gt; daten = parse(ergebnisse.data,"W&amp;ouml;rter, Anzahl:long")
[
    0: {
        W&amp;ouml;rter: "ihr"
        Anzahl: 25
    }
    1: {
        W&amp;ouml;rter: "ein"
        Anzahl: 23
    }
    2: {
        W&amp;ouml;rter: "sich"
        Anzahl: 22
    }
    3: {
        W&amp;ouml;rter: "was"
        Anzahl: 20
    }
    4: {
        W&amp;ouml;rter: "es"
        Anzahl: 19
    }
    5: {
        W&amp;ouml;rter: "ich"
        Anzahl: 17
    }
    6: {
        W&amp;ouml;rter: "nicht"
        Anzahl: 16
    }
    7: {
        W&amp;ouml;rter: "zu"
        Anzahl: 16
    }
    8: {
        W&amp;ouml;rter: "euch"
        Anzahl: 16
    }
    9: {
        W&amp;ouml;rter: "ist"
        Anzahl: 16
    }
    10: {
        W&amp;ouml;rter: "in"
        Anzahl: 15
    }
    11: {
        W&amp;ouml;rter: "sie"
        Anzahl: 14
    }
    12: {
        W&amp;ouml;rter: "man"
        Anzahl: 14
    }
    13: {
        W&amp;ouml;rter: "so"
        Anzahl: 14
    }
    14: {
        W&amp;ouml;rter: "mit"
        Anzahl: 13
    }
]&lt;/pre&gt;
&lt;p&gt;sowie als Balkengrafik angezeigt werden.&lt;/p&gt;
&lt;pre class="brush: plain;"&gt;js&amp;gt; metadaten = { title: "Top 15 W&amp;ouml;rter", orientation: 30, x: "W&amp;ouml;rter", y: "Anzahl" }
{
    title: "Top 15 W&amp;ouml;rter"
    orientation: 30
    x: "W&amp;ouml;rter"
    y: "Anzahl"
}

js&amp;gt; graph.bar(daten, metadaten)&lt;/pre&gt;
&lt;p&gt;&lt;img src="http://www.sascha-dittmann.de/image.axd?picture=2012%2f02%2fHadoopJS_04.png" alt="Azure Hadoop - Balkengrafik der Ergebnismenge" /&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/SaschaDittmann?a=Z-GrwkBn-AA:68SzhWSModA:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SaschaDittmann?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SaschaDittmann?a=Z-GrwkBn-AA:68SzhWSModA:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SaschaDittmann?i=Z-GrwkBn-AA:68SzhWSModA:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SaschaDittmann?a=Z-GrwkBn-AA:68SzhWSModA:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SaschaDittmann?i=Z-GrwkBn-AA:68SzhWSModA:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SaschaDittmann?a=Z-GrwkBn-AA:68SzhWSModA:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SaschaDittmann?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/SaschaDittmann/~4/Z-GrwkBn-AA" height="1" width="1"/&gt;</description>
      <link>http://www.sascha-dittmann.de/post/Apache-Hadoop-fuer-Windows-Azure-MapReduce-mit-JavaScript.aspx</link>
      <comments>http://www.sascha-dittmann.de/post/Apache-Hadoop-fuer-Windows-Azure-MapReduce-mit-JavaScript.aspx#comment</comments>
      <guid>http://www.sascha-dittmann.de/post.aspx?id=14bfdc79-56de-4a05-88c6-60c9a822dc45</guid>
      <pubDate>Tue, 14 Feb 2012 07:56:00 +0200</pubDate>
      <category>.NET</category>
      <category>Cloud Computing</category>
      <dc:publisher>Sascha</dc:publisher>
      <pingback:server>http://www.sascha-dittmann.de/pingback.axd</pingback:server>
      <pingback:target>http://www.sascha-dittmann.de/post.aspx?id=14bfdc79-56de-4a05-88c6-60c9a822dc45</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://www.sascha-dittmann.de/trackback.axd?id=14bfdc79-56de-4a05-88c6-60c9a822dc45</trackback:ping>
      <wfw:comment>http://www.sascha-dittmann.de/post/Apache-Hadoop-fuer-Windows-Azure-MapReduce-mit-JavaScript.aspx#comment</wfw:comment>
      <wfw:commentRss>http://www.sascha-dittmann.de/syndication.axd?post=14bfdc79-56de-4a05-88c6-60c9a822dc45</wfw:commentRss>
    </item>
    <item>
      <title>Apache Hadoop Dienste für Windows Azure (Developer Preview)</title>
      <description>&lt;p style="display: inline-block;"&gt;&lt;img style="padding-right: 10px; float: left;" src="http://www.sascha-dittmann.de/image.axd?picture=2012%2f02%2fHadoopLogo.png" alt="Azure Hadoop Logo" /&gt;&lt;strong&gt;Eine weitere &lt;a href="http://de.wikipedia.org/wiki/NoSQL" rel="nofollow" target="_blank"&gt;NoSQL&lt;/a&gt; Implementierung f&amp;uuml;r die Windows Azure Plattform k&amp;uuml;ndigt sich an: &lt;br /&gt;Zum bisherigen Key-Value-Pair Speicher, dem &lt;a title="Erste Schritte mit Windows Azure (Teil 2) - Der Table Storage" href="http://www.sascha-dittmann.de/post/Erste-Schritte-mit-Windows-Azure-Der-Table-Storage.aspx"&gt;Windows Azure Table Storage&lt;/a&gt;, wird in Zukunft ein weiterer Speicher f&amp;uuml;r gro&amp;szlig;e Datenmengen (&lt;a href="http://de.wikipedia.org/wiki/Big_Data" rel="nofollow" target="_blank"&gt;Big Data&lt;/a&gt;, &lt;a href="http://de.wikipedia.org/wiki/Petabyte" rel="nofollow" target="_blank"&gt;Petabyte&lt;/a&gt;-Bereich) hinzukommen. &lt;br /&gt;Dieser Speicherdienst baut auf dem &lt;a href="http://hadoop.apache.org" rel="nofollow" target="_blank"&gt;Apache&amp;trade; Hadoop&amp;trade;&lt;/a&gt; Framework auf.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Diese Meldung erreichte mich Ende Letzten Jahres und erweckte mein Interesse. &lt;br /&gt;Doch was ist eigentlich Hadoop?&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2&gt;Apache&amp;trade; Hadoop&amp;trade;&lt;/h2&gt;
&lt;p&gt;&lt;a href="http://hadoop.apache.org" rel="nofollow" target="_blank"&gt;Apache&amp;trade; Hadoop&amp;trade;&lt;/a&gt; ist ein freies, in Java geschriebenes Framework f&amp;uuml;r skalierbare, verteilt arbeitende Software. Es basiert auf dem bekannten &lt;a href="http://de.wikipedia.org/wiki/MapReduce" rel="nofollow" target="_blank"&gt;MapReduce&lt;/a&gt;-Algorithmus von Google Inc., sowie auf Vorschl&amp;auml;gen des &lt;a href="http://de.wikipedia.org/wiki/Google_File_System" rel="nofollow" target="_blank"&gt;Google-Dateisystems&lt;/a&gt;. Hadoop wurde urspr&amp;uuml;nglich durch den Lucene-Erfinder &lt;em&gt;Doug Cutting&lt;/em&gt; initiiert. &lt;br /&gt;Am 23. Januar 2008 wurde es zum Top-Level-Projekt der Apache Software Foundation. &lt;br /&gt;&lt;span style="font-size: xx-small;"&gt;&lt;em&gt;Quelle: &lt;/em&gt;&lt;/span&gt;&lt;a href="http://de.wikipedia.org/wiki/Hadoop" rel="nofollow" target="_blank"&gt;&lt;span style="font-size: xx-small;"&gt;&lt;em&gt;http://de.wikipedia.org/wiki/Hadoop&lt;/em&gt;&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2&gt;Anmelden zur Developer Preview&lt;/h2&gt;
&lt;p&gt;Mitte Dezember war es dann soweit. &lt;br /&gt;Die &lt;a href="http://www.hadooponazure.com/" rel="nofollow" target="_blank"&gt;Apache&amp;trade; Hadoop&amp;trade;-based Services for Windows Azure&lt;/a&gt; standen als Developer Preview zur Verf&amp;uuml;gung.&lt;/p&gt;
&lt;p&gt;Um einen der begehrten Zug&amp;auml;nge zu bekommen, musste man sich unter folgendem Link bewerben: &lt;br /&gt;&lt;a href="http://connect.microsoft.com/SQLServer/Survey/Survey.aspx?SurveyID=13697" rel="nofollow" target="_blank"&gt;Microsoft Connect: Apache Hadoop for Azure &amp;amp; Windows Server&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Gesagt - Getan!&lt;/p&gt;
&lt;p&gt;Einige Tage sp&amp;auml;ter traf dann auch die Willkommens-Email ein.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2&gt;Erstellen eines Hadoop Clusters&lt;/h2&gt;
&lt;p&gt;Um die &lt;a href="http://www.hadooponazure.com/" rel="nofollow" target="_blank"&gt;Hadoop Dienste f&amp;uuml;r Windows Azure&lt;/a&gt; dann auch testen zu k&amp;ouml;nnen, muss man zuerst ein Cluster anfordern:&lt;/p&gt;
&lt;p&gt;&lt;img src="http://www.sascha-dittmann.de/image.axd?picture=2012%2f02%2fHadoop_01.png" alt="Apache Hadoop f&amp;uuml;r Windows Azure - Neues Cluster anfordern" /&gt;&lt;/p&gt;
&lt;p&gt;Hierzu m&amp;uuml;ssen ein DNS Name, eine Cluster Gr&amp;ouml;&amp;szlig;e und ein Benutzerkonto f&amp;uuml;r das Cluster angegeben werden.&lt;/p&gt;
&lt;p&gt;Anschlie&amp;szlig;end dauert es einige Minuten bis die einzelnen Clusterknoten ...&lt;/p&gt;
&lt;p&gt;&lt;img style="border: black 1px solid;" src="http://www.sascha-dittmann.de/image.axd?picture=2012%2f02%2fHadoop_02.png" alt="Apache Hadoop f&amp;uuml;r Windows Azure - Clusterknoten werden erzeugt" /&gt;&lt;/p&gt;
&lt;p&gt;... und Netzwerkeinstellungen erstellt wurden.&lt;/p&gt;
&lt;p&gt;&lt;img style="border: black 1px solid;" src="http://www.sascha-dittmann.de/image.axd?picture=2012%2f02%2fHadoop_03.png" alt="Apache Hadoop f&amp;uuml;r Windows Azure - DNS-Einstellungen f&amp;uuml;r das Cluster werden erzeugt" /&gt;&lt;/p&gt;
&lt;blockquote&gt;W&amp;auml;hrend dieses Erstellungsprozesses, kann der Browser zwischenzeitlich geschlossen werden.&lt;/blockquote&gt;
&lt;p&gt;Nachdem das Cluster erstellt wurde, kann dieses f&amp;uuml;r 2 Tage genutzt werden, bevor es automatisch gel&amp;ouml;scht wird:&lt;/p&gt;
&lt;p&gt;&lt;img src="http://www.sascha-dittmann.de/image.axd?picture=2012%2f02%2fHadoop_04.png" alt="Apache Hadoop f&amp;uuml;r Windows Azure - Clusterverwaltung" /&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2&gt;Wie geht es weiter?&lt;/h2&gt;
&lt;p&gt;In den n&amp;auml;chsten Wochen werde ich mich mit diesen neuen Diensten f&amp;uuml;r Azure besch&amp;auml;ftigen. &lt;br /&gt;Besonders die MapReduce Implementierung und das verteilte Dateisystem (HDFS) stehen im Fokus.&lt;/p&gt;
&lt;p&gt;Gibt es noch weitere Themen, die ich mir in diesem Zusammenhang ansehen sollte? &lt;br /&gt;Wenn ja, k&amp;ouml;nnen diese gerne als Kommentar, am Ende dieses Artikels, hinterlassen werden.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/SaschaDittmann?a=iVjoLV2CYSo:jGc-36SzyX0:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SaschaDittmann?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SaschaDittmann?a=iVjoLV2CYSo:jGc-36SzyX0:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SaschaDittmann?i=iVjoLV2CYSo:jGc-36SzyX0:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SaschaDittmann?a=iVjoLV2CYSo:jGc-36SzyX0:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SaschaDittmann?i=iVjoLV2CYSo:jGc-36SzyX0:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SaschaDittmann?a=iVjoLV2CYSo:jGc-36SzyX0:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SaschaDittmann?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/SaschaDittmann/~4/iVjoLV2CYSo" height="1" width="1"/&gt;</description>
      <link>http://www.sascha-dittmann.de/post/Apache-Hadoop-Dienste-fuer-Windows-Azure-Developer-Preview.aspx</link>
      <comments>http://www.sascha-dittmann.de/post/Apache-Hadoop-Dienste-fuer-Windows-Azure-Developer-Preview.aspx#comment</comments>
      <guid>http://www.sascha-dittmann.de/post.aspx?id=c84fe7e2-ce1a-49a0-bd66-f403c2729d16</guid>
      <pubDate>Tue, 07 Feb 2012 07:26:00 +0200</pubDate>
      <category>.NET</category>
      <category>Cloud Computing</category>
      <dc:publisher>Sascha</dc:publisher>
      <pingback:server>http://www.sascha-dittmann.de/pingback.axd</pingback:server>
      <pingback:target>http://www.sascha-dittmann.de/post.aspx?id=c84fe7e2-ce1a-49a0-bd66-f403c2729d16</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://www.sascha-dittmann.de/trackback.axd?id=c84fe7e2-ce1a-49a0-bd66-f403c2729d16</trackback:ping>
      <wfw:comment>http://www.sascha-dittmann.de/post/Apache-Hadoop-Dienste-fuer-Windows-Azure-Developer-Preview.aspx#comment</wfw:comment>
      <wfw:commentRss>http://www.sascha-dittmann.de/syndication.axd?post=c84fe7e2-ce1a-49a0-bd66-f403c2729d16</wfw:commentRss>
    </item>
    <item>
      <title>Welcher Browser unterstützt welche HTML5-Features</title>
      <description>&lt;p style="display: inline-block;"&gt;&lt;img style="float: left;" src="http://www.sascha-dittmann.de/image.axd?picture=2012%2f02%2fHTML5_Logo.png" alt="HTML5 Logo" /&gt;&lt;strong&gt;Je mehr ich mich in letzter Zeit mit den umfangreichen und spannenden Funktionen von HTML5 und CSS3 besch&amp;auml;ftige, desto h&amp;auml;ufiger stelle ich mir die Frage: &lt;br /&gt;Welcher Browser unterst&amp;uuml;tzt eigentlich welche HTML5-Features?&lt;/strong&gt;&lt;br /&gt;Abhilfe schaffen u.a. zwei Suchmaschinen, die die HTML5- bzw. CSS3 Browserkompatibilit&amp;auml;t detailliert darstellen.&lt;/p&gt;
&lt;p&gt;Eine rein technische Sicht der Dinge liefert hierbei die &lt;a href="http://caniuse.com/" rel="nofollow" target="_blank"&gt;When can I use...&lt;/a&gt; Seite. &lt;br /&gt;&amp;Uuml;ber die Suchmaske kann nach HTML5-, CSS3- und SVG-Befehlen gesucht werden.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://caniuse.com/" rel="nofollow" target="_blank"&gt;&lt;img src="http://www.sascha-dittmann.de/image.axd?picture=2012%2f02%2fHTML5Features_01.png" alt="When can I use..." border="0" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Wer noch zus&amp;auml;tzlich ein paar Tipps &amp;amp; Tricks gezeigt haben m&amp;ouml;chte, findet bei dem Community Projekt &lt;a href="http://html5please.us/" rel="nofollow" target="_blank"&gt;HTML5 Please&lt;/a&gt; Rat:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://html5please.us/" rel="nofollow" target="_blank"&gt;&lt;img src="http://www.sascha-dittmann.de/image.axd?picture=2012%2f02%2fHTML5Features_02.png" alt="HTML5 Please" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/SaschaDittmann?a=gh6m_utbHyM:ZT9_PE3zGO8:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SaschaDittmann?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SaschaDittmann?a=gh6m_utbHyM:ZT9_PE3zGO8:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SaschaDittmann?i=gh6m_utbHyM:ZT9_PE3zGO8:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SaschaDittmann?a=gh6m_utbHyM:ZT9_PE3zGO8:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SaschaDittmann?i=gh6m_utbHyM:ZT9_PE3zGO8:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SaschaDittmann?a=gh6m_utbHyM:ZT9_PE3zGO8:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SaschaDittmann?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/SaschaDittmann/~4/gh6m_utbHyM" height="1" width="1"/&gt;</description>
      <link>http://www.sascha-dittmann.de/post/Welcher-Browser-unterstuetzt-welche-HTML5-Features.aspx</link>
      <comments>http://www.sascha-dittmann.de/post/Welcher-Browser-unterstuetzt-welche-HTML5-Features.aspx#comment</comments>
      <guid>http://www.sascha-dittmann.de/post.aspx?id=43654141-64b1-4f5d-b86e-d78848c3b4bf</guid>
      <pubDate>Fri, 03 Feb 2012 08:07:00 +0200</pubDate>
      <category>.NET</category>
      <dc:publisher>Sascha</dc:publisher>
      <pingback:server>http://www.sascha-dittmann.de/pingback.axd</pingback:server>
      <pingback:target>http://www.sascha-dittmann.de/post.aspx?id=43654141-64b1-4f5d-b86e-d78848c3b4bf</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://www.sascha-dittmann.de/trackback.axd?id=43654141-64b1-4f5d-b86e-d78848c3b4bf</trackback:ping>
      <wfw:comment>http://www.sascha-dittmann.de/post/Welcher-Browser-unterstuetzt-welche-HTML5-Features.aspx#comment</wfw:comment>
      <wfw:commentRss>http://www.sascha-dittmann.de/syndication.axd?post=43654141-64b1-4f5d-b86e-d78848c3b4bf</wfw:commentRss>
    </item>
  </channel>
</rss>

