<?xml version="1.0" encoding="utf-8"?>
<rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
  version="2.0">
  <channel>
    <title>mwinkle.blog</title>
    <atom:link
      href="https://docs.microsoft.com/archive/blogs/mwinkle/feed.xml"
      rel="self"
      type="application/rss+xml" />
    <link>https://docs.microsoft.com/archive/blogs/mwinkle/feed.xml</link>
    <description />
    <lastBuildDate>Tue, 16 Apr 2019 05:19:42 GMT</lastBuildDate>
    <language>en-US</language>
    <sy:updatePeriod>hourly</sy:updatePeriod>
    <sy:updateFrequency>1</sy:updateFrequency>
    <item>
      <title>Azure HDInsight Job Logging</title>
      <link>https://docs.microsoft.com/archive/blogs/mwinkle/azure-hdinsight-job-logging</link>
      <pubDate>Thu, 11 Jul 2013 09:48:31 GMT</pubDate>
      <dc:creator><![CDATA[Matt Winkler -- MSFT]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/mwinkle/2013/07/11/azure-hdinsight-job-logging/</guid>
      <description><![CDATA[We’ve made a nice fix to the Templeton job submission service that runs on the HDInsight clusters...]]></description>
      <content:encoded><![CDATA[<p>We’ve made a nice fix to the Templeton job submission service that runs on the HDInsight clusters for remote job submission.&#160; We’ve talked with a number of customers who want to be able to get access to the logs for the jobs remotely as well.&#160; This typically requires access directly to the cluster.&#160; We’ve updated Templeton to support dropping the job logs directly into ASV as part of the status directory.</p>  <p>The way to do this is to pass “<font face="Consolas">enablelogs</font>” as a query string parameter set to true.&#160; Here’s the what the request looks like:</p>  <p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/62/69/metablogapi/3858.image_65C2DB22.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-62-69-metablogapi/3858.image_5F00_65C2DB22.png"><img title="image" style="display: inline; background-image: none;" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/62/69/metablogapi/4530.image_thumb_0C90F163.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-62-69-metablogapi/4530.image_5F00_thumb_5F00_0C90F163.png" width="720" height="243" /></a></p>  <p>Upon job completion, the logs will be moved into the status directory, under a logs folder with the following structure:</p>  <p><font face="Consolas">$log_root/list.xml (summary of jobs)     <br />$log_root/stderr (frontend stderr)      <br />$log_root/stdout (frontend stdout)      <br />$log_root/$job_id (directory home for a job)      <br />$log_root/$job_id/job.xml.html      <br />$log_root/$job_id/$attempt_id (directory home for a attempt)      <br />$log_root/$job_id/$attempt_id/stderr      <br />$log_root/$job_id/$attempt_id/stdout      <br />$log_root/$job_id/$attempt_id/syslog</font></p>  <p>Here’s a screen shot from Storage Studio that shows the folder structure:</p>  <p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/62/69/metablogapi/3056.image_6C75E4A5.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-62-69-metablogapi/3056.image_5F00_6C75E4A5.png"><img title="image" style="display: inline; background-image: none;" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/62/69/metablogapi/4035.image_thumb_453B9B70.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-62-69-metablogapi/4035.image_5F00_thumb_5F00_453B9B70.png" width="720" height="428" /></a></p>  <p>If you look in the syslog file here, you’ll see a bunch of goodness about your job execution.&#160; For more complex jobs that spin off multiple map/reduce jobs (eg, Pig, hive, Cascading), you will see the set of jobs recorded there. The root directory will also contain a list.txt with the details of all the jobs, and each jbo will contain a jobs.xml.html which contains all of the details, environment variables, and configuration of the job.&#160; All of this information is useful in debugging and tuning your jobs. </p>  <p>We will be updating the SDK to support this parameter in the next release, but for now, you can submit jobs directly to the cluster and add this parameter to get job logs. </p>  <p>Here’s the text from my execution of a simple Hive query:</p>  <p><font face="Consolas">2013-07-11 02:48:56,632 INFO org.apache.hadoop.util.NativeCodeLoader: Loaded the native-hadoop library      <br /> 2013-07-11 02:48:56,726 INFO org.apache.hadoop.mapred.TaskRunner: Creating symlink: c:/hdfs/mapred/local/taskTracker/distcache/1562199005048822745_1328179698_1268869633/namenodehost/hive/scratch/hive_2013-07-11_02-48-38_757_5240085401495207012/-mr-10003/34a2bf31-e18b-440d-8d91-be8d0e445d2e &lt;- c:\hdfs\mapred\local\taskTracker\admin\jobcache\job_201307110233_0003\attempt_201307110233_0003_m_000000_0\work\HIVE_PLAN34a2bf31-e18b-440d-8d91-be8d0e445d2e       <br /> 2013-07-11 02:48:56,992 WARN org.apache.hadoop.metrics2.impl.MetricsSystemImpl: Source name ugi already exists!       <br /> 2013-07-11 02:48:57,289 INFO org.apache.hadoop.mapred.Task:&#160; Using ResourceCalculatorPlugin : org.apache.hadoop.util.WindowsResourceCalculatorPlugin@a4f5b6d       <br /> 2013-07-11 02:48:57,726 WARN org.apache.hadoop.hive.conf.HiveConf: hive-site.xml not found on CLASSPATH       <br /> 2013-07-11 02:48:57,961 WARN org.apache.hadoop.io.compress.snappy.LoadSnappy: Snappy native library not loaded       <br /> 2013-07-11 02:48:58,101 INFO org.apache.hadoop.hive.ql.io.HiveContextAwareRecordReader: Processing file asv://mwinkletemp37@mwinkle.blob.core.windows.net/hive/warehouse/hivesampletable/HiveSampleData.txt       <br /> 2013-07-11 02:48:58,101 INFO org.apache.hadoop.mapred.MapTask: numReduceTasks: 0       <br /> 2013-07-11 02:48:58,117 INFO ExecMapper: maximum memory = 954466304       <br /> 2013-07-11 02:48:58,117 INFO ExecMapper: conf classpath = [file:/C:/hdfs/mapred/local/taskTracker/admin/jobcache/job_201307110233_0003/attempt_201307110233_0003_m_000000_0/classpath-5670276484193870096.jar]       <br /> 2013-07-11 02:48:58,117 INFO ExecMapper: thread classpath = [file:/C:/hdfs/mapred/local/taskTracker/admin/jobcache/job_201307110233_0003/attempt_201307110233_0003_m_000000_0/classpath-5670276484193870096.jar]       <br /> 2013-07-11 02:48:58,164 INFO org.apache.hadoop.hive.ql.exec.MapOperator: Adding alias hivesampletable to work list for file asv://mwinkletemp37@mwinkle.blob.core.windows.net/hive/warehouse/hivesampletable       <br /> 2013-07-11 02:48:58,164 INFO org.apache.hadoop.hive.ql.exec.MapOperator: dump TS struct&lt;clientid:string,querytime:string,market:string,deviceplatform:string,devicemake:string,devicemodel:string,state:string,country:string,querydwelltime:double,sessionid:bigint,sessionpagevieworder:bigint&gt;       <br /> 2013-07-11 02:48:58,164 INFO ExecMapper:       <br />&lt; MAP&gt;Id =4       <br />&#160; &lt;Children&gt;       <br />&#160;&#160;&#160; &lt;TS&gt;Id =3       <br />&#160;&#160;&#160;&#160;&#160;&#160; &lt;Children&gt;       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;FIL&gt;Id =2       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;Children&gt;       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;SEL&gt;Id =1       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;Children&gt;       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;FS&gt;Id =0       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;Parent&gt;Id = 1 null&lt;\Parent&gt;       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt; \FS&gt;       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;\Children&gt;       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;Parent&gt;Id = 2 null&lt;\Parent&gt;       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;\SEL&gt;       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;\Children&gt;       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;Parent&gt;Id = 3 null&lt;\Parent&gt;       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;\FIL&gt;       <br />&#160;&#160;&#160;&#160;&#160; &lt;\Children&gt;       <br />&#160;&#160;&#160;&#160;&#160; &lt;Parent&gt;Id = 4 null&lt;\Parent&gt;       <br />&#160;&#160;&#160; &lt;\TS&gt;       <br />&#160; &lt;\Children&gt;       <br />&lt; \MAP&gt;       <br /> 2013-07-11 02:48:58,164 INFO org.apache.hadoop.hive.ql.exec.MapOperator: Initializing Self 4 MAP       <br /> 2013-07-11 02:48:58,164 INFO org.apache.hadoop.hive.ql.exec.TableScanOperator: Initializing Self 3 TS       <br /> 2013-07-11 02:48:58,164 INFO org.apache.hadoop.hive.ql.exec.TableScanOperator: Operator 3 TS initialized       <br /> 2013-07-11 02:48:58,164 INFO org.apache.hadoop.hive.ql.exec.TableScanOperator: Initializing children of 3 TS       <br /> 2013-07-11 02:48:58,164 INFO org.apache.hadoop.hive.ql.exec.FilterOperator: Initializing child 2 FIL       <br /> 2013-07-11 02:48:58,164 INFO org.apache.hadoop.hive.ql.exec.FilterOperator: Initializing Self 2 FIL       <br /> 2013-07-11 02:48:58,179 INFO org.apache.hadoop.hive.ql.exec.FilterOperator: Operator 2 FIL initialized       <br /> 2013-07-11 02:48:58,179 INFO org.apache.hadoop.hive.ql.exec.FilterOperator: Initializing children of 2 FIL       <br /> 2013-07-11 02:48:58,179 INFO org.apache.hadoop.hive.ql.exec.SelectOperator: Initializing child 1 SEL       <br /> 2013-07-11 02:48:58,179 INFO org.apache.hadoop.hive.ql.exec.SelectOperator: Initializing Self 1 SEL       <br /> 2013-07-11 02:48:58,179 INFO org.apache.hadoop.hive.ql.exec.SelectOperator: SELECT struct&lt;clientid:string,querytime:string,market:string,deviceplatform:string,devicemake:string,devicemodel:string,state:string,country:string,querydwelltime:double,sessionid:bigint,sessionpagevieworder:bigint&gt;       <br /> 2013-07-11 02:48:58,179 INFO org.apache.hadoop.hive.ql.exec.SelectOperator: Operator 1 SEL initialized       <br /> 2013-07-11 02:48:58,179 INFO org.apache.hadoop.hive.ql.exec.SelectOperator: Initializing children of 1 SEL       <br /> 2013-07-11 02:48:58,179 INFO org.apache.hadoop.hive.ql.exec.FileSinkOperator: Initializing child 0 FS       <br /> 2013-07-11 02:48:58,179 INFO org.apache.hadoop.hive.ql.exec.FileSinkOperator: Initializing Self 0 FS       <br /> 2013-07-11 02:48:58,195 INFO org.apache.hadoop.hive.ql.exec.FileSinkOperator: Operator 0 FS initialized       <br /> 2013-07-11 02:48:58,195 INFO org.apache.hadoop.hive.ql.exec.FileSinkOperator: Initialization Done 0 FS       <br /> 2013-07-11 02:48:58,195 INFO org.apache.hadoop.hive.ql.exec.SelectOperator: Initialization Done 1 SEL       <br /> 2013-07-11 02:48:58,195 INFO org.apache.hadoop.hive.ql.exec.FilterOperator: Initialization Done 2 FIL       <br /> 2013-07-11 02:48:58,195 INFO org.apache.hadoop.hive.ql.exec.TableScanOperator: Initialization Done 3 TS       <br /> 2013-07-11 02:48:58,195 INFO org.apache.hadoop.hive.ql.exec.MapOperator: Initialization Done 4 MAP       <br /> 2013-07-11 02:48:58,601 INFO org.apache.hadoop.hive.ql.exec.MapOperator: Processing alias hivesampletable for file asv://mwinkletemp37@mwinkle.blob.core.windows.net/hive/warehouse/hivesampletable       <br /> 2013-07-11 02:48:58,601 INFO org.apache.hadoop.hive.ql.exec.MapOperator: 4 forwarding 1 rows       <br /> 2013-07-11 02:48:58,601 INFO org.apache.hadoop.hive.ql.exec.TableScanOperator: 3 forwarding 1 rows       <br /> 2013-07-11 02:48:58,617 INFO ExecMapper: ExecMapper: processing 1 rows: used memory = 87647896       <br /> 2013-07-11 02:48:58,617 INFO org.apache.hadoop.hive.ql.exec.MapOperator: 4 forwarding 10 rows       <br /> 2013-07-11 02:48:58,617 INFO org.apache.hadoop.hive.ql.exec.TableScanOperator: 3 forwarding 10 rows       <br /> 2013-07-11 02:48:58,617 INFO ExecMapper: ExecMapper: processing 10 rows: used memory = 87647896       <br /> 2013-07-11 02:48:58,617 INFO org.apache.hadoop.hive.ql.exec.MapOperator: 4 forwarding 100 rows       <br /> 2013-07-11 02:48:58,617 INFO org.apache.hadoop.hive.ql.exec.TableScanOperator: 3 forwarding 100 rows       <br /> 2013-07-11 02:48:58,617 INFO ExecMapper: ExecMapper: processing 100 rows: used memory = 87647896       <br /> 2013-07-11 02:48:58,632 INFO org.apache.hadoop.hive.ql.exec.MapOperator: 4 forwarding 1000 rows       <br /> 2013-07-11 02:48:58,632 INFO org.apache.hadoop.hive.ql.exec.TableScanOperator: 3 forwarding 1000 rows       <br /> 2013-07-11 02:48:58,632 INFO ExecMapper: ExecMapper: processing 1000 rows: used memory = 87647896       <br /> 2013-07-11 02:48:58,804 INFO org.apache.hadoop.hive.ql.exec.MapOperator: 4 forwarding 10000 rows       <br /> 2013-07-11 02:48:58,804 INFO org.apache.hadoop.hive.ql.exec.TableScanOperator: 3 forwarding 10000 rows       <br /> 2013-07-11 02:48:58,804 INFO ExecMapper: ExecMapper: processing 10000 rows: used memory = 87647896       <br /> 2013-07-11 02:48:59,211 INFO org.apache.hadoop.hive.ql.exec.MapOperator: 4 finished. closing...       <br /> 2013-07-11 02:48:59,211 INFO org.apache.hadoop.hive.ql.exec.MapOperator: 4 forwarded 59793 rows       <br /> 2013-07-11 02:48:59,211 INFO org.apache.hadoop.hive.ql.exec.MapOperator: DESERIALIZE_ERRORS:0       <br /> 2013-07-11 02:48:59,211 INFO org.apache.hadoop.hive.ql.exec.TableScanOperator: 3 finished. closing...       <br /> 2013-07-11 02:48:59,211 INFO org.apache.hadoop.hive.ql.exec.TableScanOperator: 3 forwarded 59793 rows       <br /> 2013-07-11 02:48:59,226 INFO org.apache.hadoop.hive.ql.exec.FilterOperator: 2 finished. closing...       <br /> 2013-07-11 02:48:59,226 INFO org.apache.hadoop.hive.ql.exec.FilterOperator: 2 forwarded 0 rows       <br /> 2013-07-11 02:48:59,226 INFO org.apache.hadoop.hive.ql.exec.FilterOperator: PASSED:0       <br /> 2013-07-11 02:48:59,226 INFO org.apache.hadoop.hive.ql.exec.FilterOperator: FILTERED:59793       <br /> 2013-07-11 02:48:59,226 INFO org.apache.hadoop.hive.ql.exec.SelectOperator: 1 finished. closing...       <br /> 2013-07-11 02:48:59,226 INFO org.apache.hadoop.hive.ql.exec.SelectOperator: 1 forwarded 0 rows       <br /> 2013-07-11 02:48:59,226 INFO org.apache.hadoop.hive.ql.exec.FileSinkOperator: 0 finished. closing...       <br /> 2013-07-11 02:48:59,226 INFO org.apache.hadoop.hive.ql.exec.FileSinkOperator: 0 forwarded 0 rows       <br /> 2013-07-11 02:48:59,226 INFO org.apache.hadoop.hive.ql.exec.FileSinkOperator: Final Path: FS hdfs://namenodehost:9000/hive/scratch/hive_2013-07-11_02-48-38_757_5240085401495207012/_tmp.-ext-10001/000000_0       <br /> 2013-07-11 02:48:59,226 INFO org.apache.hadoop.hive.ql.exec.FileSinkOperator: Writing to temp file: FS hdfs://namenodehost:9000/hive/scratch/hive_2013-07-11_02-48-38_757_5240085401495207012/_task_tmp.-ext-10001/_tmp.000000_0       <br /> 2013-07-11 02:48:59,226 INFO org.apache.hadoop.hive.ql.exec.FileSinkOperator: New Final Path: FS hdfs://namenodehost:9000/hive/scratch/hive_2013-07-11_02-48-38_757_5240085401495207012/_tmp.-ext-10001/000000_0       <br /> 2013-07-11 02:48:59,336 INFO org.apache.hadoop.hive.ql.exec.SelectOperator: 1 Close done       <br /> 2013-07-11 02:48:59,336 INFO org.apache.hadoop.hive.ql.exec.FilterOperator: 2 Close done       <br /> 2013-07-11 02:48:59,336 INFO org.apache.hadoop.hive.ql.exec.TableScanOperator: 3 Close done       <br /> 2013-07-11 02:48:59,336 INFO org.apache.hadoop.hive.ql.exec.MapOperator: 4 Close done       <br /> 2013-07-11 02:48:59,336 INFO ExecMapper: ExecMapper: processed 59793 rows: used memory = 96526440       <br /> 2013-07-11 02:48:59,336 INFO org.apache.hadoop.mapred.Task: Task:attempt_201307110233_0003_m_000000_0 is done. And is in the process of commiting       <br /> 2013-07-11 02:48:59,382 INFO org.apache.hadoop.mapred.Task: Task 'attempt_201307110233_0003_m_000000_0' done.       <br /> 2013-07-11 02:48:59,414 INFO org.apache.hadoop.mapred.TaskLogsTruncater: Initializing logs' truncater with mapRetainSize=-1 and reduceRetainSize=-1       <br /> 2013-07-11 02:48:59,476 INFO org.apache.hadoop.io.nativeio.NativeIO: Initialized cache for UID to User mapping with a cache timeout of 14400 seconds.</font></p>]]></content:encoded>
    </item>
    <item>
      <title>Microsoft HDInsight Installation &amp; Dependency Management</title>
      <link>https://docs.microsoft.com/archive/blogs/mwinkle/microsoft-hdinsight-installation-dependency-management</link>
      <pubDate>Sun, 16 Dec 2012 13:58:11 GMT</pubDate>
      <dc:creator><![CDATA[Matt Winkler -- MSFT]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/mwinkle/2012/12/16/microsoft-hdinsight-installation-dependency-management/</guid>
      <description><![CDATA[It’s a rainy Saturday afternoon here in Seattle, and the kids are keeping themselves busy running...]]></description>
      <content:encoded><![CDATA[<p>It’s a rainy Saturday afternoon here in Seattle, and the kids are keeping themselves busy running around the Christmas tree, so I’ve got a little time to put together a post that addresses some questions that have come up a few times in the <a href="http://social.msdn.microsoft.com/Forums/en-US/hdinsight">forums</a> as well as in our internal discussion aliases for our on-premises install of HDInisght.</p>  <p>We currently use the <a href="http://www.microsoft.com/web/downloads/platform.aspx">Web Platform Installer</a> to take care of dependency management of the installation.&#160; </p>  <p>It’s important to point out that there are actually two key pieces that get installed</p>  <ul>   <li>The installation of the <a href="http://hortonworks.com/products/hortonworksdataplatform/">Hortonworks Data Platform</a> for Windows</li>    <li>The installation for <a href="http://blogs.technet.com/b/serverandtools/archive/2012/10/24/microsoft-hdinsight-server-for-windows-and-windows-azure-hdinsight-service-announced.aspx">Microsoft HDInsight</a></li> </ul>  <p>The second has a dependency on the first.&#160; The WebPI feed also contains a number of pre-requisites required to set up IIS and a few other things for the HDInsight dashboard.&#160; Here’s what it looks like on a completely fresh Windows Server 2012 machine.&#160; Most developer machines likely have some or most of the IIS pre-reqs installed.&#160; We’re also working to clean up some of this to minimize installation &amp; setup. </p>  <p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/62/69/metablogapi/6545.image_09C1BA4B.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-62-69-metablogapi/6545.image_5F00_09C1BA4B.png"><img title="image" style="display: inline; background-image: none;" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/62/69/metablogapi/5481.image_thumb_344D755B.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-62-69-metablogapi/5481.image_5F00_thumb_5F00_344D755B.png" width="566" height="718" /></a></p>  <p>&#160;</p>  <p>Let’s talk a little bit about what’s in each one.</p>  <h1>Hortonworks Data Platform installer</h1>  <p>This msi includes the core Hadoop bits (Map/Reduce, HDFS), as well as a number of other Apache projects in the Hadoop ecosystem.&#160; The full list included in the current installer are:</p>  <ul>   <li>Map Reduce</li>    <li>HDFS</li>    <li>Hive</li>    <li>Pig</li>    <li>HCatalog</li> </ul>  <p>Each of these projects is packaged into a zip file that contains a PowerShell script that automates the installation and setup of the component.&#160; There are more components in Hortonworks Data Platform, and the teams are working to get these packaged and included.</p>  <h1>Microsoft HDInisght Installer</h1>  <p>This msi contains bits that are Microsoft specific, and may also contain additional Hadoop projects.&#160; The current install (as of today) contains:</p>  <ul>   <li>HDInsight dashboard</li>    <li>Sqoop</li>    <li>Isotope.js</li>    <li>Getting Started content </li> </ul>  <p>These are packaged the same way as the Hadoop projects above.&#160; Additionally, there is an installation PowerShell script here which will do some initialization of the single node installer, such as starting the services for the Hadoop components.</p>  <h1>Alternate Approaches</h1>  <p>The team discussed a number of potential factorings, and we very much welcome feedback here.&#160; A few ideas that we’ve thought about:</p>  <ul>   <li>Stable and Experimental packages.&#160; This would allow us to set expectations around quality and stability of the bits.&#160; </li>    <li>Decomposing every project into an individual msi</li>    <li>Integrating and building a <a href="http://chocolatey.org/">Chocolatey package</a> for these      <br /></li> </ul>  <h1>What Does This Mean For Me?</h1>  <p>What this means is that when you install HDInsight out of WebPI, you are installing two different msi’s.&#160; We are revving the Microsoft msi every two weeks to pull in bug fixes (and very shortly include some experimental features).&#160; The Hortonworks msi will be revved on a different schedule, as the team there decides to release an update.&#160; We are partnering closely with the team there and so we will coordinate releases so that the combined installation will always work. </p>  <p>More directly, this implies that if you want to uninstall completely, you will need to uninstall both packages from Add/Remove Programs:</p>  <p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/62/69/metablogapi/0513.image_71FA5D17.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-62-69-metablogapi/0513.image_5F00_71FA5D17.png"><img title="image" style="display: inline; background-image: none;" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/62/69/metablogapi/0284.image_thumb_231997B8.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-62-69-metablogapi/0284.image_5F00_thumb_5F00_231997B8.png" width="780" height="182" /></a></p>    <p>This also means that when we issue an update for the Microsoft HDInsight package, you don’t have to “lose” your cluster by uninstalling both products.&#160; You should be able to simply uninstall &amp; update the Microsoft HDInsight package.&#160; </p>  <p>The team would love to get more feedback on this approach, so, let us know what you think!</p>]]></content:encoded>
    </item>
    <item>
      <title>Updating HDInsight Preview</title>
      <link>https://docs.microsoft.com/archive/blogs/mwinkle/updating-hdinsight-preview</link>
      <pubDate>Tue, 04 Dec 2012 08:50:24 GMT</pubDate>
      <dc:creator><![CDATA[Matt Winkler -- MSFT]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/mwinkle/2012/12/04/updating-hdinsight-preview/</guid>
      <description><![CDATA[Today we’ve shipped an update to the single node HDInsight Server Preview that is installable via...]]></description>
      <content:encoded><![CDATA[<p>Today we’ve shipped an update to the single node HDInsight Server Preview that is installable via <a href="http://www.microsoft.com/web/handlers/webpi.ashx/getinstaller/HDINSIGHT-PREVIEW.appids">Web Platform Installer</a>.&#160;&#160; </p>  <h3>What Are We Doing? </h3>  <p>Every two weeks, we’re going to take a snapshot of the work in progress and update the public installer with this (provided it passes a basic level of validation).&#160; This gives us the opportunity to rapidly get new bits in front of customers, experiment with new features, and address bugs in a timely fashion.&#160; </p>  <p>We’ve also snapped versions such that releases of the <a href="http://hadoopsdk.codeplex.com/">SDK</a> as well as the One-Box installer will all share the same version.&#160; As such, we’ve versioned the msi as 0.2.0.0. </p>  <h3>How do I Get This?</h3>  <p>Simply by installing HDInisght out of WebPI onto a new machine after uninstalling (in place upgrade is not currently supported).&#160; To completely uninstall previous versions, you will want first uninstall “Microsoft HDInsight Community Technology Preview” and then the “Hortonworks Data Platform”.&#160; <b>We will not preserve data in HDFS using uninstall/reinstall</b>, so archive that prior to uninstalling. </p>  <p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/62/69/metablogapi/1641.clip_image002_3B740D48.jpg" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-62-69-metablogapi/1641.clip_5F00_image002_5F00_3B740D48.jpg"><img title="clip_image002" style="display: inline; background-image: none;" border="0" alt="clip_image002" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/62/69/metablogapi/8507.clip_image002_thumb_3454D0D0.jpg" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-62-69-metablogapi/8507.clip_5F00_image002_5F00_thumb_5F00_3454D0D0.jpg" width="691" height="150" /></a></p>  <h3>What’s New?</h3>  <p>There are no new features in this release, we’ve worked to improve some of the install and setup experience to address some bugs that have been reported on this alias as well as the forums. </p>  <ul>   <li>IIS / Dashboard setup issues experienced on certain OS SKU’s</li>    <li>Addition of HDInsight Dashboard link into Start Menu</li>    <li>Fix to Hive console for multiple line input errors</li>    <li>Clean up some uninstall issues</li>    <li>Minor changes to getting started content </li> </ul>  <p>Hortonworks has also shipped an update to the <a href="http://hortonworks.com/products/hortonworksdataplatform/">HDP</a> installation to address the bug encountered on Friday (documented <a href="http://social.msdn.microsoft.com/Forums/en-US/hdinsight/thread/28a57efb-082b-424b-8d9e-731b1fe135de">here</a>).&#160; By removing both installations above and re-installing, you will get updated bits here.</p>  <h3>What if Something Doesn’t Work?</h3>  <p>Please report issues on the <a href="http://social.msdn.microsoft.com/Forums/en-US/hdinsight/thread/28a57efb-082b-424b-8d9e-731b1fe135de">forums</a>.&#160; We’re also tracking a set of known issues via the <a href="http://gettingstarted.hadooponazure.com/releaseNotes.html">release notes</a>.</p>  <h3>When Will These Bits Be Updated In Azure?</h3>  <p>We’re using this as an opportunity to ship these bits early and often, and they will find their way into future service updates to <a href="http://www.hadooponazure.com/">Azure HDInsight</a>, typically in the next monthly update.</p>  <h3>What’s Next?</h3>  <p>We’ll continue to address common issues as they are reported.&#160; From a feature perspective, we hope the next update will include updates to the dashboard to include a new and improved Hive console. </p>]]></content:encoded>
    </item>
    <item>
      <title>Getting Up and Running with Piggybank on HDInsight</title>
      <link>https://docs.microsoft.com/archive/blogs/mwinkle/getting-up-and-running-with-piggybank-on-hdinsight</link>
      <pubDate>Fri, 02 Nov 2012 17:17:41 GMT</pubDate>
      <dc:creator><![CDATA[Matt Winkler -- MSFT]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/mwinkle/2012/11/02/getting-up-and-running-with-piggybank-on-hdinsight/</guid>
      <description><![CDATA[It’s been a fun couple of weeks launching HDInsight, and I’m going to be getting back into doing...]]></description>
      <content:encoded><![CDATA[<p>It’s been a fun couple of weeks launching HDInsight, and I’m going to be getting back into doing some more technical blogging.&#160; There are a few easy topics off the bat that we’ve heard requested from customers.&#160; The first one involves <a href="https://cwiki.apache.org/confluence/display/PIG/PiggyBank">Piggybank</a>, which is a user contributed collection of useful <a href="http://pig.apache.org/">Pig</a> user defined functions (UDF’s).</p>  <p>This assumes your machine is set up with:</p>  <ul>   <li>HDInsight (grab from WebPI <a href="http://www.microsoft.com/web/handlers/webpi.ashx?command=GetInstallerRedirect&amp;appid=HDINSIGHT-PREVIEW&amp;mode=new">here</a>)</li>    <li>Java build tools (<a href="http://ant.apache.org/manual/install.html">Ant</a> and <a href="http://ant.apache.org/ivy/history/latest-milestone/install.html">Ivy</a> on your command path)</li> </ul>  <p>Next, let’s build Piggybank by grabbing the Pig source code and checking out the 0.9 branch</p>  <ul>   <li><font face="Consolas">git clone </font><a href="https://github.com/apache/pig.git"><font face="Consolas">https://github.com/apache/pig.git</font></a></li>    <li><font face="Consolas">git checkout -b branch-0.9 remotes/origin/branch-0.9</font></li> </ul>  <p>&#160;</p>  <p>At this point, you should now have a pig directory, move to that and type <font face="Consolas">ant</font> in order to build.</p>  <p>Next, navigate to .\contrib\piggybank\java, and again, type ant in order to build.&#160; This will produce piggybank.jar.</p>  <p>Next, open your HDInsight console window and type pig.&#160; This brings up Grunt, the interactive pig shell. </p>  <p>At this point, you can now use the following in your script:</p>  <p>&#160;</p>  <blockquote>   <p><font face="Consolas">REGISTER C:\Your\Path\To\piggybank.jar ;</font></p>    <p><font face="Consolas">foo = FOREACH entry GENERATE org.apache.pig.piggybank.evaluation.string.UPPER(item_name);</font></p> </blockquote>  <p>&#160;</p>  <p>At this point, you can now take advantage of all of the functions in piggybank, and if you’re interested in contributing your own, details are <a href="http://wiki.apache.org/pig/UDFManual">here</a>.</p>]]></content:encoded>
    </item>
    <item>
      <title>Every Day is a Good Day When You Paint</title>
      <link>https://docs.microsoft.com/archive/blogs/mwinkle/every-day-is-a-good-day-when-you-paint</link>
      <pubDate>Mon, 30 Jul 2012 09:37:57 GMT</pubDate>
      <dc:creator><![CDATA[Matt Winkler -- MSFT]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/mwinkle/2012/07/30/every-day-is-a-good-day-when-you-paint/</guid>
      <description><![CDATA[Slightly off-topic, but a friend of mine posted a video on Facebook that struck me as being very...]]></description>
      <content:encoded><![CDATA[<p>Slightly off-topic, but a friend of mine posted a video on Facebook that struck me as being very relevant to our space.&#160; </p>  <div id="scid:5737277B-5D6D-4f48-ABFC-DD9C333F4C5D:61225bc1-ff2b-492d-8e7e-33f4e89030e3" class="wlWriterEditableSmartContent" style="margin: 0px; padding: 0px; float: none; display: inline;"><div><object width="448" height="252"><param name="movie" value="https://www.youtube.com/v/YLO7tCdBVrA?hl=en&amp;hd=1"></param><embed src="https://www.youtube.com/v/YLO7tCdBVrA?hl=en&amp;hd=1" type="application/x-shockwave-flash" width="448" height="252"></embed></object></div></div>  <p>&#160;</p>  <p>At the same time I saw this, another friend and co-worker was having a fairly crummy day with lots of crazy meetings and requests from co-workers, but that day was made a lot better by sitting down and solving a fun little deployment script problem.&#160; The deployment script is neither here nor there, it was more that so many of the folks in this industry love solving a problem, whether that is getting a query right, chasing down a pesky bug, or getting that a-ha moment when you are trying to design something.&#160; That’s “painting” for a lot of us.&#160; </p>  <p>Every day is a good day when you paint.</p>  <p>[and working auto-tuned Bob Ross into a blog post was just too good to pass up]</p>]]></content:encoded>
    </item>
    <item>
      <title>Writing a Map/Reduce Job for Hadoop using Windows PowerShell</title>
      <link>https://docs.microsoft.com/archive/blogs/mwinkle/writing-a-mapreduce-job-for-hadoop-using-windows-powershell</link>
      <pubDate>Fri, 20 Jul 2012 18:25:21 GMT</pubDate>
      <dc:creator><![CDATA[Matt Winkler -- MSFT]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/mwinkle/2012/07/20/writing-a-mapreduce-job-for-hadoop-using-windows-powershell/</guid>
      <description><![CDATA[I had a little bit of time on my hand and wanted to whip up a quick sample using PowerShell for a...]]></description>
      <content:encoded><![CDATA[<p>I had a little bit of time on my hand and wanted to whip up a quick sample using PowerShell for a Hadoop job.</p>  <p>This uses the Hadoop <a href="http://hadoop.apache.org/common/docs/r1.0.3/streaming.html">streaming</a> capability, which essentially allows for mappers and reducers to be written as arbitrary executables that operate on standard input and output.</p>  <p>The .ps1 scripts are pretty simple, these operate over a set of airline data that looks like this:</p>  <pre class="csharpcode">0,EV,18,0,MIA,2011-12-18T00:00:00,12,TPA,1227859,2011    
0,EV,17,0,MIA,2011-12-17T00:00:00,12,TPA,1227860,2011    
6,EV,17,4,CLE,2011-12-17T00:00:00,12,ATL,1227861,2011</pre>


<p>The schema here is a comma separated set of US flights with delays. </p>

<p>The goal of my job is to pull out the airlines, the number of flights, and then some very basic (min and max) statistics on the arrival and departure delays.&#160; </p>

<p>My mapper:</p>

<div class="csharpcode">
  <pre><span class="lnum">   1:  </span><span class="kwrd">function</span> Map-Airline </pre>

  <pre><span class="lnum">   2:  </span>{</pre>

  <pre><span class="lnum">   3:  </span>    [Console]::Error.WriteLine( <span class="str">&quot;reporter:counter:powershell,invocations,1&quot;</span>)</pre>

  <pre><span class="lnum">   4:  </span>    $line = [Console]::ReadLine()</pre>

  <pre><span class="lnum">   5:  </span>    <span class="kwrd">while</span> ($line <span class="preproc">-ne</span> $null) </pre>

  <pre><span class="lnum">   6:  </span>    {</pre>

  <pre><span class="lnum">   7:  </span>        [Console]::WriteLine($line.Split(<span class="str">&quot;,&quot;</span>)[1] + <span class="str">&quot;`t&quot;</span> + $line)</pre>

  <pre><span class="lnum">   8:  </span>        [Console]::Error.WriteLine(<span class="str">&quot;reporter:counter:powershell,record,1&quot;</span>)</pre>

  <pre><span class="lnum">   9:  </span>        $line = [Console]::ReadLine()</pre>

  <pre><span class="lnum">  10:  </span>    }  </pre>

  <pre><span class="lnum">  11:  </span>}</pre>

  <pre><span class="lnum">  12:  </span> </pre>

  <pre><span class="lnum">  13:  </span>&#160;</pre>

  <pre><span class="lnum">  14:  </span>Map-Airline </pre>
</div>


<p>My reducer:</p>

<div class="csharpcode">
  <pre><span class="lnum">   1:  </span><span class="kwrd">function</span> Reduce-Airlines</pre>

  <pre><span class="lnum">   2:  </span>{</pre>

  <pre><span class="lnum">   3:  </span>    $line = <span class="str">&quot;&quot;</span></pre>

  <pre><span class="lnum">   4:  </span>    $oldLine = <span class="str">&quot;&lt;initial invalid row value&gt;&quot;</span></pre>

  <pre><span class="lnum">   5:  </span>    $count = 0</pre>

  <pre><span class="lnum">   6:  </span>    $minArrDelay = 10000</pre>

  <pre><span class="lnum">   7:  </span>    $maxArrDelay = 0</pre>

  <pre><span class="lnum">   8:  </span>    $minDepDelay = 10000 </pre>

  <pre><span class="lnum">   9:  </span>    $maxDepDelay = 0 </pre>

  <pre><span class="lnum">  10:  </span>&#160;</pre>

  <pre><span class="lnum">  11:  </span>    $line = [Console]::ReadLine()</pre>

  <pre><span class="lnum">  12:  </span>&#160;</pre>

  <pre><span class="lnum">  13:  </span>    <span class="kwrd">while</span>  ($line <span class="preproc">-ne</span> $null)</pre>

  <pre><span class="lnum">  14:  </span>    {</pre>

  <pre><span class="lnum">  15:  </span>        <span class="kwrd">if</span> (($oldLine <span class="preproc">-eq</span> $line.Split(<span class="str">&quot;`t&quot;</span>)[0]) -or ($oldLine <span class="preproc">-eq</span> <span class="str">&quot;&lt;initial invalid row value&gt;&quot;</span>))</pre>

  <pre><span class="lnum">  16:  </span>        {</pre>

  <pre><span class="lnum">  17:  </span>            $flightRecord = $line.Split(<span class="str">&quot;`t&quot;</span>)[1].Split(<span class="str">','</span>)</pre>

  <pre><span class="lnum">  18:  </span>            <span class="kwrd">if</span> ([Int32]::Parse($flightRecord[0]) <span class="preproc">-ne</span> 0) </pre>

  <pre><span class="lnum">  19:  </span>            {</pre>

  <pre><span class="lnum">  20:  </span>                $minArrDelay = [Math]::Min($minArrDelay, $flightRecord[0])</pre>

  <pre><span class="lnum">  21:  </span>            }</pre>

  <pre><span class="lnum">  22:  </span>            <span class="kwrd">if</span> ([Int32]::Parse($flightRecord[3]) <span class="preproc">-ne</span> 0) </pre>

  <pre><span class="lnum">  23:  </span>            {</pre>

  <pre><span class="lnum">  24:  </span>                $minDepDelay = [Math]::Min($minDepDelay, [Int32]::Parse($flightRecord[3]))</pre>

  <pre><span class="lnum">  25:  </span>            }</pre>

  <pre><span class="lnum">  26:  </span>            $maxArrDelay = [Math]::Max($maxArrDelay, $flightRecord[0])</pre>

  <pre><span class="lnum">  27:  </span>            $maxDepDelay = [Math]::Max($maxDepDelay, $flightRecord[3])</pre>

  <pre><span class="lnum">  28:  </span>            $count = $count+ 1</pre>

  <pre><span class="lnum">  29:  </span>            [Console]::Error.WriteLine( <span class="str">&quot;reporter:counter:powershell,&quot;</span>+$oldLine + <span class="str">&quot;,1&quot;</span>)</pre>

  <pre><span class="lnum">  30:  </span>        }</pre>

  <pre><span class="lnum">  31:  </span>        <span class="kwrd">else</span></pre>

  <pre><span class="lnum">  32:  </span>        {</pre>

  <pre><span class="lnum">  33:  </span>            [Console]::WriteLine($oldLine + <span class="str">&quot;`t&quot;</span> + $count + <span class="str">&quot;,&quot;</span> + $minArrDelay + <span class="str">&quot;,&quot;</span> +$maxArrDelay + <span class="str">&quot;,&quot;</span> + $minDepDelay +<span class="str">&quot;,&quot;</span>+ $maxDepDelay)</pre>

  <pre><span class="lnum">  34:  </span>            $count = 1</pre>

  <pre><span class="lnum">  35:  </span>            $minArrDelay = 10000</pre>

  <pre><span class="lnum">  36:  </span>            $maxArrDelay = 0</pre>

  <pre><span class="lnum">  37:  </span>            $minDepDelay = 10000 </pre>

  <pre><span class="lnum">  38:  </span>            $maxDepDelay = 0 </pre>

  <pre><span class="lnum">  39:  </span>            [Console]::Error.WriteLine(<span class="str">&quot;reporter:counter:powershell,&quot;</span>+$oldLine + <span class="str">&quot;,1&quot;</span>)           </pre>

  <pre><span class="lnum">  40:  </span>        }</pre>

  <pre><span class="lnum">  41:  </span>        $oldLine = $line.Split(<span class="str">&quot;`t&quot;</span>)[0]</pre>

  <pre><span class="lnum">  42:  </span>        $line = [Console]::ReadLine()</pre>

  <pre><span class="lnum">  43:  </span>    }</pre>

  <pre><span class="lnum">  44:  </span>    [Console]::WriteLine($oldLine + <span class="str">&quot;`t&quot;</span> + $count + <span class="str">&quot;,&quot;</span> + $minArrDelay + <span class="str">&quot;,&quot;</span> +$maxArrDelay + <span class="str">&quot;,&quot;</span> + $minDepDelay +<span class="str">&quot;,&quot;</span>+ $maxDepDelay)</pre>

  <pre><span class="lnum">  45:  </span>}</pre>

  <pre><span class="lnum">  46:  </span>&#160;</pre>

  <pre><span class="lnum">  47:  </span>Reduce-Airlines</pre>
</div>


<p>One thing to note on the reducer is that we use the $oldLine variable in order to keep tabs on when our group of results is moving to the next one.&#160; When using Java, your reduce function will be invoked once per group and so you can reset the state at the beginning of each of those.&#160; With streaming, you will never have groups that split reducers, but your executable will only be spun up once per reducer (which, in the sample here, is one).&#160; You can also see that I’m writing out to STDERR in order to get a few counters recorded as well. </p>

<p>The next trick is to get these to execute.&#160; The process spawned by the Streaming job does not know about .ps1 files, it’s basically just cmd.exe.&#160; To get around that we will also create a small driver .cmd file and upload the file with the –file directive from the command line.</p>

<p>&#160;</p>

<p>AirlineMapperPs.cmd</p>

<pre class="csharpcode">@call c:\windows\system32\WindowsPowerShell\v1.0\powershell -file ..\..\jars\AirlineMapper.ps1</pre>


<p>&#160;</p>

<p>AirlineReducerPs.cmd</p>

<pre class="csharpcode">@call c:\windows\system32\WindowsPowerShell\v1.0\powershell -file ..\..\jars\AirlineReducer.ps1</pre>


<p>&#160;</p>

<p>The ..\..\jars directory is where the –file directive will place the files when they execute</p>

<p>And now we execute:</p>

<pre class="csharpcode">hadoop jar %HADOOP_HOME%\lib\hadoop-streaming.jar 
    -mapper d:\dev\_full_path_\AirlineMapperPs.cmd 
    -reducer d:\dev\_full_path_\AirlineReducerPs.cmd 
    -input fixed_flights 
    -output psMapReduce3 
    -file d:\dev\_full_path_\AirlineMapper.ps1 
    -file d:\dev\_full_path_\AirlineReducer.ps1</pre>


<p>And we get our results.</p>

<p>There is still some work to be done here, I’d like to make it a little easier to get these running (so possibly wrapping submission in a script which takes care of the wrapping for me).&#160; Also, on Azure, we either need to sign the scripts, or log into each of the machines and allow script execution.&#160; As I get that wrapped up, I’ll drop it along side our other samples.&#160; We’ll also work to make this easier to get up and running on Azure if that’s interesting for folks.</p>]]></content:encoded>
    </item>
    <item>
      <title>Talking About Hadoop on Windows</title>
      <link>https://docs.microsoft.com/archive/blogs/mwinkle/talking-about-hadoop-on-windows</link>
      <pubDate>Sat, 09 Jun 2012 10:20:00 GMT</pubDate>
      <dc:creator><![CDATA[Matt Winkler -- MSFT]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/mwinkle/2012/06/09/talking-about-hadoop-on-windows/</guid>
      <description><![CDATA[A few folks have asked, so I decided to put the data in one place. &nbsp;We'll be talking more about...]]></description>
      <content:encoded><![CDATA[<p>A few folks have asked, so I decided to put the data in one place. &nbsp;We'll be talking more about Hadoop at <a href="https://channel9.msdn.com/Events/TechEd/NorthAmerica/2012">TechEd North America</a> and <a href="http://hadoopsummit.org/">Hadoop Summit</a> next week, and then later in the month at<a href="http://europe.msteched.com/"> TechEd Europe</a>. &nbsp;</p>
<p>Here are the sessions we're presenting:</p>
<ul>
<li>TechEd (<a href="https://channel9.msdn.com/Events/TechEd/NorthAmerica/2012?sort=sequential&amp;direction=desc&amp;term=Hadoop">NA</a> and <a href="http://europe.msteched.com/Sessions?q=hadoop">Europe</a>, links are to NA sessions)</li>
<ul>
<li><a href="https://channel9.msdn.com/Events/TechEd/NorthAmerica/2012/AZR325">Learn Big Data Application Development on Windows Azure</a> -- Wenming Ye</li>
<ul>
<li>Web 2.0 companies have been fully taking advantage of Hadoop based open source tools to tackle Big Data needs. Microsoft now offers the best of both worlds with its own Hadoop solution on Windows Azure with full compatibility and additional rich toolsets. This session is a "getting-started" tutorial on developing Big Data applications on Windows Azure. We cover application scenarios, Hadoop on Azure, tools, and applied data analytics. More importantly, we show you how to put everything together with a couple of sample applications</li>
</ul>
<li><a href="https://channel9.msdn.com/Events/TechEd/NorthAmerica/2012/DBI209">Big Data, Big Deal?</a> -- Gert Drapers</li>
<ul>
<li>Are you ready for the exploding world of big data? Do you know the difference between Hive and Pig? Do you know why MapReduce is being taught in many universities rather than SQL? If not, pay attention because this talk will help get you started in understanding this new world. While sometimes the Hadoop toolkit (which includes HDFS, MapReduce, Hive, Pig, and Sqoop) is used as an alternative to relational database systems such as SQL Server, more frequently customers are using it as a complementary tool. Sometimes it may be used as an ETL tool or to perform an initial analysis of a freshly acquired data set to determine whether or not it is worth loading into the data warehouse, and sometimes to process massive data sets that are too big to even contemplate loading into all but the very largest data warehouses. In addition to covering the basics of the various parts of the Hadoop stack, this talk discusses the strengths and weakness of the Hadoop approach compared to that provided by relational database systems and explores how the two technologies can be used productively in conjunction with one another.</li>
</ul>
<li><a href="https://channel9.msdn.com/Events/TechEd/NorthAmerica/2012/DBI210">Harnessing Big Data With Hadoop</a></li>
<ul>
<li>Attend this session to learn about the Hadoop Big Data solution from Microsoft that unlocks insights on all your data, including structured and unstructured data of any size. Accelerate your analytics with a Hadoop service that offers integration with Microsoft BI and the ability to enrich your models with publicly available data. Finally, learn about our roadmap for Hadoop on Windows Server and Windows Azure and for broadening access to Hadoop through simplified deployment, management and programming, including JavaScript integration</li>
</ul>
</ul>
<li>Hadoop Summit</li>
<ul>
<li>Unleash Insights On All Data With Microsoft Big Data -- Tim Mallalieu</li>
<ul>
<li>Do you plan to extract insights from mountains of data, including unstructured data that is growing faster than ever? Attend this session to learn about Microsoft&rsquo;s Big Data solution that unlocks insights on all your data, including structured and unstructured data of any size. Accelerate your analytics with a Hadoop service that offers deep integration with Microsoft BI and the ability to enrich your models with publicly available data from outside your firewall. Come and see how Microsoft is broadening access to Hadoop through dramatically simplified deployment, management and programming, including full support for JavaScript.</li>
</ul>
<li>How Klout is changing the landscape of social media with Hadoop and BI --<a href="http://dennyglee.com/"> Denny Lee</a>, David Mariani (VP of Engineering, Klout)</li>
<ul>
<li>In this age of Big Data, data volumes grow exceedingly larger while the technical problems and business scenarios become more complex. Compounding these complexities, data consumers are demanding faster analysis to common business questions asked of their Big Data. This session provides concrete examples of how to address this challenge. We will highlight the use of Big Data technologies&mdash;including Hadoop and Hive &mdash;with classic BI systems such as SQL Server Analysis Services.<br /><br />Session takeaways:<br />&bull; Understand the architectural components surrounding Hadoop, Hive, Classic BI, and the Tier-1 BI ecosystem<br />&bull; Get strategies for addressing the technical issues when working with extremely large cubes<br />&bull; See how to address the technical issues when working with Big Data systems from the DBA perspective</li>
</ul>
</ul>
</ul>
<p>I think that there is a pretty nice mix of Hadoop, Microsoft plans, and applications across these sessions. &nbsp;Hope you get a chance to see them (or watch them after the events!)</p>]]></content:encoded>
    </item>
    <item>
      <title>Tap, tap, tap, is this thing on?</title>
      <link>https://docs.microsoft.com/archive/blogs/mwinkle/tap-tap-tap-is-this-thing-on</link>
      <pubDate>Tue, 08 May 2012 14:25:53 GMT</pubDate>
      <dc:creator><![CDATA[Matt Winkler -- MSFT]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/mwinkle/2012/05/08/tap-tap-tap-is-this-thing-on/</guid>
      <description><![CDATA[I'll be back to bloging here in a bit. &nbsp;Since you last visited, I've had a fun journey working...]]></description>
      <content:encoded><![CDATA[<p>I'll be back to bloging here in a bit. &nbsp;Since you last visited, I've had a fun journey working further on Workflow, Azure and now I've landed in the SQL team working on Hadoop, in particular, the developer story.</p>
<p>Not a lot to say right now, but make sure to check out <a href="http://www.hadooponAzure.com">hadoopOnAzure.com</a> !</p>]]></content:encoded>
    </item>
    <item>
      <title>Thoughts on Flowchart</title>
      <link>https://docs.microsoft.com/archive/blogs/mwinkle/thoughts-on-flowchart</link>
      <pubDate>Fri, 13 Aug 2010 15:45:26 GMT</pubDate>
      <dc:creator><![CDATA[Matt Winkler -- MSFT]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/mwinkle/2010/08/13/thoughts-on-flowchart/</guid>
      <description><![CDATA[Last night I saw that Maurice had a few tweets that caught my attention about flowchart, but this is...]]></description>
      <content:encoded><![CDATA[<p>Last night I saw that Maurice had a few tweets that caught my attention about flowchart, but this is the one that I want to talk about:</p>  <blockquote>   <p><a><em><font color="#d16349"></font></em></a></p>    <p><em><font color="#d16349">Come to think of it I also really mis a parallel execution in a flowchart. But other than that flowcharts rock! </font></em><a href="https://twitter.com/search?q=%23wf4"><em><font color="#d16349">#wf4</font></em></a><em><font color="#d16349"> </font></em><a href="https://twitter.com/search?q=%23dm"><em><font color="#d16349">#dm</font></em></a><a href="https://twitter.com/mauricedb/status/21049127741"><em><font color="#d16349">about 13&#160;&#160;&#160; </font></em></a><em><font color="#d16349">hours ago</font></em><em><font color="#d16349"> via web</font></em></p> </blockquote>  <p>I thought about replying on twitter, but it’s a bit of a longer topic.&#160;&#160; When we were building the flowchart for VS2010, we considered a number of possible capabilities, but ultimately the capabilities customers were looking for fell into two categories:</p>  <ul>   <li>Arbitrary rework patterns</li>    <li>Coordination patterns</li> </ul>  <h1></h1>  <h1><strong><em></em></strong></h1>  <h1>Arbitrary Rework</h1>  <p>We can describe the model of execution in the current flowchart to be one that supports arbitrary rework.&#160; You could also refer to this as GOTO.&#160;&#160; One benefit (and downside) of breaking out of the tightly scoped, hierarchical execution model that we see with the Sequential style of workflows (and in most procedural languages) is the fact there exists more freedom in terms of defining the “next” step to be taken.&#160; The simplest way to think about this is the following flowchart:</p>  <p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/62/69/metablogapi/4578.image_4E51B0FE.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-00-62-69-metablogapi/4578.image_5F00_4E51B0FE.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" class="wlDisabledImage" title="image" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/62/69/metablogapi/4643.image_thumb_1F1FC567.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-00-62-69-metablogapi/4643.image_5F00_thumb_5F00_1F1FC567.png" width="597" height="387" /></a></p>  <p>Now, this isn’t particularly interesting, and most folks who look at this will simply ask “why not a loop?”&#160; which in this case is a valid question.&#160; As a process gets more sophisticated (or if humans tend to be involved), the number of possible loops required gets rather tricky to manage in a sequential flow (consider the following rework scenario which includes “next steps” across conditional boundaries, and from some branches but not others. </p>  <p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/62/69/metablogapi/7128.image_73DB2E5F.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-00-62-69-metablogapi/7128.image_5F00_73DB2E5F.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" class="wlDisabledImage" title="image" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/62/69/metablogapi/4478.image_thumb_4CA0E52A.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-00-62-69-metablogapi/4478.image_5F00_thumb_5F00_4CA0E52A.png" width="579" height="604" /></a></p>  <p> Now, mathematically, we can describe the machinery in both of these machines as a set of valid transitions, and it is likely possible that there exists a complete mapping from any flowchart into procedural.</p>  <h1>Coordination</h1>  <p>The second pattern we consistently saw was the use of a free form style of execution in order to build complex coordination patterns.&#160; The example I consistently return to (pointing back to a <a href="http://blogs.msdn.com/b/mwinkle/archive/2007/05/24/different-execution-patterns-with-wf-or-going-beyond-sequential-and-state-machine.aspx">blog post</a> I made back in the WF3 days)</p>  <p><img alt="image" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_msdn/mwinkle/WindowsLiveWriter/DifferentExecutionPatternswithWForGoingb_CCEE/image_thumb.png" original-url="http://blogs.msdn.com/blogfiles/mwinkle/WindowsLiveWriter/DifferentExecutionPatternswithWForGoingb_CCEE/image_thumb.png" />    <br /></p>    <br />  <p>Here I want to be able to coordinate a few different things, namely that 3 executes when 1 completes, 5 when 2, 4 when 1 <strong>AND</strong> 2, 6 when 3 <strong>AND</strong> 4 <strong>AND</strong> 5 complete.&#160; Here we’ve created a dependency graph that can’t be handled with the procedural constructs that we have.&#160; How could this happen? Imagine we’re trying to model the ranking process for a series of horse races.&#160; Task 3 can happen when Race 1 completes, as Task 5 can happen when Race 2 completes.&#160; Task 4 represents some work that requires the data from both Races.&#160; When those 3 tasks (3, 4, and 5) complete, I can move forward and take some action (like bet on the next race).&#160; </p>  <p>This type of pattern can be very powerful, and is often described by <a href="http://en.wikipedia.org/wiki/Petri_net">petri-nets</a>.&#160; There exists a multitude of join semantics from simple AND joins to conditional joins (ranging from a simple “count” to a condition based on data).&#160; </p>  <h1>How’d we get to where we are today?</h1>  <p>Today, the flowchart in the .NET framework only supports the former pattern, that of arbitrary rework.&#160; How’d we get there.&#160; While we found a lot of value in both patterns what we found when we tried to compose them, we often got into places that became very hard to have predictable execution semantics.&#160;&#160; The basic crux of the design issue gets to the “re-arming” of a join.&#160; If I decide to jump back to task 3 at some point, what does it mean for 3 to complete?&#160; Do I execute 6 again right away, do I wait for 4 and 5 to complete a second time?&#160; What happens if I jump to 3 a second time?&#160; Now, there certainly exist formal models for this, and things like Petri-net define a set of semantics for these things.&#160; What we found though was that any expression of the model that took these things into account required a pretty deep understanding of the process model, and we lost one of the key benefits we see from a flowchart, which is that it is a simple, approachable model.&#160; This is not to say that we don’t think that the Coordination pattern is useful, or that petri-nets don’t ultimately hold the unified approach,&#160; we just did not have the time to implement a coordination pattern in VS 2010, and creating an approachable petri-net backed flowchart modeling style was something we’d need more time to get correct.&#160; </p>  <h1>Where does this leave us? </h1>  <p>If you’re looking at this and saying, “but I want coordination (or a full blown petri-net)”, there are a couple of options:</p>  <ul>   <li>Roll up your sleeves and write that activity.&#160; In the blog <a href="http://blogs.msdn.com/b/mwinkle/archive/2007/05/24/different-execution-patterns-with-wf-or-going-beyond-sequential-and-state-machine.aspx">post</a> above, I outline how you could go about building the coordination pattern, and with the new activity model, this would be simpler.&#160; The harder part is still writing a designer, and there is now some good guidance on free form designers in the source of the <a href="http://wf.codeplex.com/releases/view/43586">state machine</a> on codeplex.&#160; </li>    <li>Provide feedback on <a href="http://connect.microsoft.com/wf">connect</a>, when you do this it opens a bug in our bug database that our team is looking at daily.&#160; Describe your scenario, what you’re trying to do, and what you’d like to see.&#160; This type of customer feedback is vital to helping us plan the right features for the next release.&#160;&#160; </li> </ul>]]></content:encoded>
    </item>
    <item>
      <title>Improving ModelItem with Dynamic</title>
      <link>https://docs.microsoft.com/archive/blogs/mwinkle/improving-modelitem-with-dynamic</link>
      <pubDate>Wed, 11 Aug 2010 10:22:40 GMT</pubDate>
      <dc:creator><![CDATA[Matt Winkler -- MSFT]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/mwinkle/2010/08/11/improving-modelitem-with-dynamic/</guid>
      <description><![CDATA[Hi all, I’m back, and apologize for the delay, things have been crazy here and I’ve taken a little...]]></description>
      <content:encoded><![CDATA[<p>Hi all, I’m back, and apologize for the delay, things have been crazy here and I’ve taken a little time off following shipping VS2010, so I’m getting back into it.&#160; I’d like to talk about one of my favorite late additions to the WF4 designer programming model.&#160; We added this change sometime in the RC/RTM timeframe in response to some feedback that we had gotten about the verbose-ness of programming against ModelItem. </p>  <p>If you recall from this <a href="http://bit.ly/bkUKuP">post</a>, ModelItem exists to serve as a INotifyPropertyChanged (INPC) aware proxy to the underlying instance being edited within the designer. In exchange for this fairly flexible proxy layer, you get in return a pretty verbose way in which one has to interact to actually get to the data.&#160; Often times there are fairly long incantations of myModelItem.Properties[“foo”].Value.Properties[“bar”].Value.GetCurrentValue() in order to actually return the data (or be able to set the value).&#160; From the beginning, we had decided we wanted to optimize for the WPF XAML consumer of the model item, and so we chose to implement <a href="http://bit.ly/acrBuh">ICustomTypeDescriptor</a> so that WPF binding would be pretty simple (the above would result in a binding syntax of ModelItem.foo.bar).&#160; </p>  <blockquote>   <p><em>One quick note, looking at the definition of ModelItem itself will show that only the INPC interface is implemented.&#160; However, ModelItem is an abstract type, and the implementation subclass ModelItemImpl contains the definition and implementation of the following interfaces ModelItem, IModelTreeItem, ICustomTypeDescriptor, IDynamicMetaObjectProvider</em></p> </blockquote>  <p>As we worked with some of our customers, it became clear that they were frequently using ModelItem in code as well, and so the programming model was becoming more of a problem (we had somewhat hoped that the majority of customers would be using XAML).&#160; We initially went with the idea that we would create a series of Design time peers to all of the common types in WF (making a SequenceDesign, ParallelDesign, etc) which provided an identical programming surface to its peer, but under the covers in the property getters and setters would redirect to an underlying ModelItem.&#160; This has the advantage that we could create the appearance of a strongly typed API surface, but has the downside that it introduces an extra type for every activity we ship, and it requires customers to create two types as well, and not just for activities, you would want one for customer too.&#160; The other approach we kicked around was using the Dynamic capabilities introduced in .NET 4.</p>  <p>It’s important to note that these are ultimately complimentary approaches, that is, it’s possible in a future framework release (or in a codeplex project if anyone is looking to for a little fun on the side) you could release the strongly typed design time peers. From a timing perspective, it was not likely that we could introduce 30+ new types in the RC/RTM release, and we had questions about the long term sustainability of requiring an additional type for activities.&#160; So, we went ahead with the plan for dynamic support.&#160;&#160; In order to do this, we had to add an implementation of IDynamicMetaObjectProvider.&#160; <a href="http://srtsolutions.com/public/blog/243888">Bill Wagner</a> has a good article <a href="http://bit.ly/dzWh1v">here</a> on the basics of doing this.&#160; This requires us to implement one method, <a href="http://bit.ly/ct47dp">GetMetaObject</a>.&#160; In our case, we have an internal, nested ModelItemMetaObject type which inherits from System.Dynamic.DynamicMetaObject.&#160; </p>  <p>In our case, there are basically two important methods that we care about, BindGetMember and BindSetMember.&#160; These wire up to two methods on ModelItemImpl to get and set based on the property name.&#160; The net result of this is that the following code</p>  <pre class="brush: csharp; gutter: false; toolbar: false;">root.Properties[&quot;Residence&quot;].
        Value.
        Properties[&quot;StreetAddress&quot;].
        Value.GetCurrentValue()</pre>

<p>Can now be written as</p>

<pre class="brush: csharp; gutter: false; toolbar: false;">dynamic mi = root;
Console.WriteLine(root.Residence.StreetAddress)</pre>

<p>Now, with anything there are some tradeoffs, the biggest one is that this is dynamic, I don’t get compile time checking, and I could have a type that will result in an exception being thrown (that said, that problem exists in the verbose form as well).&#160; This does let me write much more succinct code when programming the model item tree though for both gets and sets.&#160; As an added bonus, we found there is actually a decent perf improvement from the WPF XAML data binding that now leverages the IDynamicMetaObjectProvider (mentioned in ScottGu’s post <a href="http://bit.ly/d8zn1Z">here</a>) in the way that the runtime will only compute the way to resolve the property once (as opposed to every time when it goes through the ICustomTypeDescriptor code path). </p>

<p>&#160;</p>

<p>Enjoy! </p>]]></content:encoded>
    </item>
  </channel>
</rss>