<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Hayes Davis &#187; Development</title>
	<atom:link href="http://hayesdavis.net/category/development/feed/" rel="self" type="application/rss+xml" />
	<link>http://hayesdavis.net</link>
	<description></description>
	<lastBuildDate>Mon, 02 Aug 2010 17:07:21 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>ActiveSupport Considered Harmful</title>
		<link>http://hayesdavis.net/2010/07/26/activesupport-considered-harmful/</link>
		<comments>http://hayesdavis.net/2010/07/26/activesupport-considered-harmful/#comments</comments>
		<pubDate>Mon, 26 Jul 2010 16:22:13 +0000</pubDate>
		<dc:creator>Hayes</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Ruby]]></category>

		<guid isPermaLink="false">http://hayesdavis.net/?p=64</guid>
		<description><![CDATA[This an open letter to my fellow ruby gem authors and maintainers. Hi Everybody, It&#8217;s been a while. You&#8217;re doing awesome stuff; all this great code out there making Ruby do all sorts of nifty things. It&#8217;s a big reason &#8211; maybe the reason &#8211; why being a Rubyist is so great. But yeah, there&#8217;s [...]]]></description>
			<content:encoded><![CDATA[<p><em>This an open letter to my fellow ruby gem authors and maintainers.</em></p>
<p>Hi Everybody,</p>
<p>It&#8217;s been a while. You&#8217;re doing awesome stuff; all this great code out there making Ruby do all sorts of nifty things. It&#8217;s a big reason &#8211; maybe the reason &#8211; why being a Rubyist is so great. But yeah, there&#8217;s just one thing that&#8217;s been bugging me&#8230; we need to talk about <a href="http://rubygems.org/gems/activesupport" onclick="pageTracker._trackPageview('/outgoing/rubygems.org/gems/activesupport?referer=');">ActiveSupport</a>.</p>
<p>ActiveSupport is great, don&#8217;t get me wrong. I love <code>try</code> and <code>tap</code> and <code>sum</code> as much as the next guy. It sure saves me some lines of code. But the problem is it&#8217;s, well, a little invasive. Many of us love Ruby precisely because it&#8217;s more flexible than a Russian gymnast. But just because you can reopen Object and add</p>
<pre>class Object
  def your_great_method
    puts "HEY I'M CHANGING OBJECT"
  end
end</pre>
<p>doesn&#8217;t mean you always should. As we all know, ActiveSupport is one giant ball of I&#8217;M CHANGING OBJECT (and Enumerable and Array and String and, well, you get the picture). This is a pretty awesome idea in a controlled environment like <a href="http://rubyonrails.org/" onclick="pageTracker._trackPageview('/outgoing/rubyonrails.org/?referer=');">Rails</a>. Rails is all-encompassing. When you write Rails, you&#8217;re not really in Ruby anymore, you&#8217;re 3 layers deep, <a href="http://www.imdb.com/title/tt1375666/" onclick="pageTracker._trackPageview('/outgoing/www.imdb.com/title/tt1375666/?referer=');">Inception</a> style, inside DHH&#8217;s dream of web programming. In that world, Object can do magic things and Strings can inflect right back on themselves. And so, of course, ActiveSupport is an integral part of Rails (more on that in a moment).</p>
<p>The problem comes when you decide you just can&#8217;t  live without <code>tap</code> or a few of these other modern conveniences and so you throw in the ol&#8217; ActiveSupport dependency in the gemspec. The first effect of this is that whatever project your users are working on now much bring in this giant ball o&#8217; Ruby changin&#8217; with its various invasions, idiosyncrasies and <a href="http://stackoverflow.com/questions/683989/how-do-you-deal-with-the-conflict-between-activesupportjson-and-the-json-gem" onclick="pageTracker._trackPageview('/outgoing/stackoverflow.com/questions/683989/how-do-you-deal-with-the-conflict-between-activesupportjson-and-the-json-gem?referer=');">occasional incompatibilities</a>.</p>
<p>But, you say, most people are using Ruby for Rails and Rails has ActiveSupport baked right in. We&#8217;re good right? Well, no, actually. This is where it gets really painful. When you&#8217;re gemspecin&#8217; and you decide to throw in that latest version of ActiveSupport, well, you&#8217;re basically telling every Rails user out there that&#8217;s not on the latest version that they need to upgrade their entire environment just to use your gem. Now, the Ruby community is made up of people who are pretty early adopters so many people are on the latest and won&#8217;t even notice. However, as Ruby gets more mature and lots of people have lots of versions of things out there, not everyone can just upgrade at the drop of a hat. You&#8217;re cutting off those people from your gem awesomeness unless they either a) upgrade (which isn&#8217;t always immediately possible) or b) resort to horrifying monkey patches. And all this because you just love <code>sum</code> so much.</p>
<p>So, my fellow gem authors, I ask you to think twice next time you really want to use that convenience method that&#8217;s only in ActiveSupport N.N.N. Perhaps a little helper method would do? Maybe one that&#8217;s in your gem&#8217;s own namespace perhaps? Your users will thank you.</p>
<p>Sincerely,</p>
<p>Hayes</p>
]]></content:encoded>
			<wfw:commentRss>http://hayesdavis.net/2010/07/26/activesupport-considered-harmful/feed/</wfw:commentRss>
		<slash:comments>12</slash:comments>
		</item>
		<item>
		<title>Using MongoDB and a Relational Database Together</title>
		<link>http://hayesdavis.net/2010/03/28/using-mongodb-and-a-relational-database-together/</link>
		<comments>http://hayesdavis.net/2010/03/28/using-mongodb-and-a-relational-database-together/#comments</comments>
		<pubDate>Sun, 28 Mar 2010 18:02:28 +0000</pubDate>
		<dc:creator>Hayes</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[cheaptweet]]></category>
		<category><![CDATA[mongodb]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[nosql]]></category>
		<category><![CDATA[rails]]></category>

		<guid isPermaLink="false">http://hayesdavis.net/?p=38</guid>
		<description><![CDATA[Below is the presentation I gave to the Austin MongoDB Day on 3/27/2010. I talked about the design decisions one needs to make when determining whether to introduce a document database like MongoDB into an existing application built on a relational database. I give a few examples of how we&#8217;ve made MongoDB and our MySQL [...]]]></description>
			<content:encoded><![CDATA[<p>Below is the presentation I gave to the <a href="http://geekaustin.org/mongodb-day-austin" onclick="pageTracker._trackPageview('/outgoing/geekaustin.org/mongodb-day-austin?referer=');">Austin MongoDB Day</a> on 3/27/2010. I talked about the design decisions one needs to make when determining whether to introduce a document database like <a href="http://www.mongodb.org" onclick="pageTracker._trackPageview('/outgoing/www.mongodb.org?referer=');">MongoDB</a> into an existing application built on a relational database. I give a few examples of how we&#8217;ve made MongoDB and our MySQL database live together in harmony inside <a href="http://cheaptweet.com" onclick="pageTracker._trackPageview('/outgoing/cheaptweet.com?referer=');">CheapTweet</a>.</p>
<p>Thanks to <a href="http://twitter.com/linearb" onclick="pageTracker._trackPageview('/outgoing/twitter.com/linearb?referer=');">Lynn Bender</a> of <a href="http://geekaustin.org/" onclick="pageTracker._trackPageview('/outgoing/geekaustin.org/?referer=');">GeekAustin</a>, <a href="http://cospaceatx.com/" onclick="pageTracker._trackPageview('/outgoing/cospaceatx.com/?referer=');">CoSpace</a>, and the folks at <a href="http://www.10gen.com/" onclick="pageTracker._trackPageview('/outgoing/www.10gen.com/?referer=');">10Gen</a> for putting on a great event.</p>
<div id="__ss_3579241" style="width: 425px;"><strong style="display: block; margin: 12px 0 4px;"><a title="Using MongoDB and a Relational Database at MongoDB Day" href="http://www.slideshare.net/hayesdavis/using-mongodb-and-a-relational-database-at-mongodb-day" onclick="pageTracker._trackPageview('/outgoing/www.slideshare.net/hayesdavis/using-mongodb-and-a-relational-database-at-mongodb-day?referer=');">Using MongoDB and a Relational Database at MongoDB Day</a></strong><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="425" height="355" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowScriptAccess" value="always" /><param name="src" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=mongodbday-100328123513-phpapp01&amp;stripped_title=using-mongodb-and-a-relational-database-at-mongodb-day" /><param name="allowfullscreen" value="true" /><embed type="application/x-shockwave-flash" width="425" height="355" src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=mongodbday-100328123513-phpapp01&amp;stripped_title=using-mongodb-and-a-relational-database-at-mongodb-day" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>
<div style="padding: 5px 0 12px;">View more <a href="http://www.slideshare.net/" onclick="pageTracker._trackPageview('/outgoing/www.slideshare.net/?referer=');">presentations</a> from <a href="http://www.slideshare.net/hayesdavis" onclick="pageTracker._trackPageview('/outgoing/www.slideshare.net/hayesdavis?referer=');">hayesdavis</a>.</div>
</div>
]]></content:encoded>
			<wfw:commentRss>http://hayesdavis.net/2010/03/28/using-mongodb-and-a-relational-database-together/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Introduction to Sphinx and Thinking Sphinx: 10 Minute Talk at Austin on Rails</title>
		<link>http://hayesdavis.net/2009/07/29/introduction-to-sphinx-and-thinking-sphinx-10-minute-talk-at-austin-on-rails/</link>
		<comments>http://hayesdavis.net/2009/07/29/introduction-to-sphinx-and-thinking-sphinx-10-minute-talk-at-austin-on-rails/#comments</comments>
		<pubDate>Wed, 29 Jul 2009 15:53:38 +0000</pubDate>
		<dc:creator>Hayes</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[rails]]></category>
		<category><![CDATA[sphinx]]></category>
		<category><![CDATA[thinkingsphinx]]></category>

		<guid isPermaLink="false">http://hayesdavis.net/?p=36</guid>
		<description><![CDATA[I did a quick talk at Austin on Rails last night about my experience using Sphinx and Thinking Sphinx for doing full-text search on CheapTweet. We did a series of short talks last night so this is only a 10 minute overview. Hope some of you will find it helpful. Quick Introduction to Sphinx and [...]]]></description>
			<content:encoded><![CDATA[<p>I did a quick talk at <a href="http://www.austinonrails.org/past/2009/3/19/meeting_tuesday_march_24_2009_79_pm/" onclick="pageTracker._trackPageview('/outgoing/www.austinonrails.org/past/2009/3/19/meeting_tuesday_march_24_2009_79_pm/?referer=');">Austin on Rails</a> last night about my experience using <a href="http://www.sphinxsearch.com/" onclick="pageTracker._trackPageview('/outgoing/www.sphinxsearch.com/?referer=');">Sphinx</a> and <a href="http://freelancing-god.github.com/ts/en/" onclick="pageTracker._trackPageview('/outgoing/freelancing-god.github.com/ts/en/?referer=');">Thinking Sphinx</a> for doing full-text search on <a href="http://cheaptweet.com" onclick="pageTracker._trackPageview('/outgoing/cheaptweet.com?referer=');">CheapTweet</a>. We did a series of short talks last night so this is only a 10 minute overview. Hope some of you will find it helpful.</p>
<div id="__ss_1785876" style="width: 425px; text-align: left;"><a style="font:14px Helvetica,Arial,Sans-serif;display:block;margin:12px 0 3px 0;text-decoration:underline;" title="Quick Introduction to Sphinx and Thinking Sphinx" href="http://www.slideshare.net/hayesdavis/quick-introduction-to-sphinx-and-thinking-sphinx" onclick="pageTracker._trackPageview('/outgoing/www.slideshare.net/hayesdavis/quick-introduction-to-sphinx-and-thinking-sphinx?referer=');">Quick Introduction to Sphinx and Thinking Sphinx</a><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="425" height="355" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowScriptAccess" value="always" /><param name="src" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=aorsphinxtalk-090729104212-phpapp01&amp;stripped_title=quick-introduction-to-sphinx-and-thinking-sphinx" /><embed type="application/x-shockwave-flash" width="425" height="355" src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=aorsphinxtalk-090729104212-phpapp01&amp;stripped_title=quick-introduction-to-sphinx-and-thinking-sphinx" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>
<div style="font-size: 11px; font-family: tahoma,arial; height: 26px; padding-top: 2px;">View more <a style="text-decoration:underline;" href="http://www.slideshare.net/" onclick="pageTracker._trackPageview('/outgoing/www.slideshare.net/?referer=');">presentations</a> from <a style="text-decoration:underline;" href="http://www.slideshare.net/hayesdavis" onclick="pageTracker._trackPageview('/outgoing/www.slideshare.net/hayesdavis?referer=');">hayesdavis</a>.</div>
</div>
]]></content:encoded>
			<wfw:commentRss>http://hayesdavis.net/2009/07/29/introduction-to-sphinx-and-thinking-sphinx-10-minute-talk-at-austin-on-rails/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Austin on Rails Talk: Building TweetReach with Sinatra, Tokyo Cabinet and Grackle</title>
		<link>http://hayesdavis.net/2009/03/25/austin-on-rails-talk-building-tweetreach-with-sinatra-tokyo-cabinet-and-grackle/</link>
		<comments>http://hayesdavis.net/2009/03/25/austin-on-rails-talk-building-tweetreach-with-sinatra-tokyo-cabinet-and-grackle/#comments</comments>
		<pubDate>Wed, 25 Mar 2009 15:28:46 +0000</pubDate>
		<dc:creator>Hayes</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[Twitter]]></category>
		<category><![CDATA[Austin]]></category>
		<category><![CDATA[grackle]]></category>
		<category><![CDATA[rails]]></category>
		<category><![CDATA[sinatra]]></category>
		<category><![CDATA[tokyocabinet]]></category>

		<guid isPermaLink="false">http://hayesdavis.net/?p=31</guid>
		<description><![CDATA[I gave a talk last night (3/24/2009) at Austin on Rails about building a new (yet-to-be-released) application called TweetReach using tools that are somewhat off the beaten path. These included Sinatra, Tokyo Cabinet and my new Twitter API library: Grackle (which I&#8217;ll talk about in more detail in a future blog post). Building TweetReach with [...]]]></description>
			<content:encoded><![CDATA[<p>I gave a <a href="http://www.austinonrails.org/past/2009/3/19/meeting_tuesday_march_24_2009_79_pm/" onclick="pageTracker._trackPageview('/outgoing/www.austinonrails.org/past/2009/3/19/meeting_tuesday_march_24_2009_79_pm/?referer=');">talk last night (3/24/2009) at Austin on Rails</a> about building a new (<span style="text-decoration: line-through;">yet-to-be-released</span>) application called <a href="http://tweetreach.com" onclick="pageTracker._trackPageview('/outgoing/tweetreach.com?referer=');">TweetReach</a> using tools that are somewhat off the beaten path. These included <a href="http://www.sinatrarb.com" onclick="pageTracker._trackPageview('/outgoing/www.sinatrarb.com?referer=');">Sinatra</a>, <a href="http://tokyocabinet.sourceforge.net/spex-en.html" onclick="pageTracker._trackPageview('/outgoing/tokyocabinet.sourceforge.net/spex-en.html?referer=');">Tokyo Cabinet</a> and my new <a href="http://github.com/hayesdavis/grackle" onclick="pageTracker._trackPageview('/outgoing/github.com/hayesdavis/grackle?referer=');">Twitter API library: Grackle</a> (which I&#8217;ll talk about in more detail in a future blog post).</p>
<div id="__ss_1196422" style="width: 425px; text-align: left;"><a style="font:14px Helvetica,Arial,Sans-serif;display:block;margin:12px 0 3px 0;text-decoration:underline;" title="Building TweetReach with Sinatra, Tokyo Cabinet and Grackle: Austin on Rails 2009-03-24" href="http://www.slideshare.net/hayesdavis/building-tweetreach-with-sinatra-tokyo-cabinet-and-grackle-austin-on-rails-20090324?type=powerpoint" onclick="pageTracker._trackPageview('/outgoing/www.slideshare.net/hayesdavis/building-tweetreach-with-sinatra-tokyo-cabinet-and-grackle-austin-on-rails-20090324?type=powerpoint&amp;referer=');">Building TweetReach with Sinatra, Tokyo Cabinet and Grackle: Austin on Rails 2009-03-24</a><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="425" height="355" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowScriptAccess" value="always" /><param name="src" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=aorpresentation-090325100800-phpapp02&amp;stripped_title=building-tweetreach-with-sinatra-tokyo-cabinet-and-grackle-austin-on-rails-20090324" /><embed type="application/x-shockwave-flash" width="425" height="355" src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=aorpresentation-090325100800-phpapp02&amp;stripped_title=building-tweetreach-with-sinatra-tokyo-cabinet-and-grackle-austin-on-rails-20090324" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>
<div style="font-size: 11px; font-family: tahoma,arial; height: 26px; padding-top: 2px;">View more <a style="text-decoration:underline;" href="http://www.slideshare.net/" onclick="pageTracker._trackPageview('/outgoing/www.slideshare.net/?referer=');">presentations</a> from <a style="text-decoration:underline;" href="http://www.slideshare.net/hayesdavis" onclick="pageTracker._trackPageview('/outgoing/www.slideshare.net/hayesdavis?referer=');">hayesdavis</a>.</div>
</div>
<p>I referenced some code during the &#8220;Building TweetReach&#8221; part of the presentation. If you&#8217;re interested, you can <a href="http://hayesdavis.net/wp-content/uploads/2009/03/sample_code.zip">download it</a>.</p>
<p>By the way, I was the second speaker of the night. <a href="http://www.mikeperham.com/2009/03/25/caching-and-rails/" onclick="pageTracker._trackPageview('/outgoing/www.mikeperham.com/2009/03/25/caching-and-rails/?referer=');">Mike Perham spoke before me about caching with Rails</a>. Check his stuff out as well. Thanks to everyone who came out.</p>
<p><strong>Update 4/2/2009:</strong> Launched <a href="http://tweetreach.com" onclick="pageTracker._trackPageview('/outgoing/tweetreach.com?referer=');">TweetReach</a>! Go check it out.</p>
]]></content:encoded>
			<wfw:commentRss>http://hayesdavis.net/2009/03/25/austin-on-rails-talk-building-tweetreach-with-sinatra-tokyo-cabinet-and-grackle/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Running Hadoop on Windows</title>
		<link>http://hayesdavis.net/2008/06/14/running-hadoop-on-windows/</link>
		<comments>http://hayesdavis.net/2008/06/14/running-hadoop-on-windows/#comments</comments>
		<pubDate>Sat, 14 Jun 2008 19:19:09 +0000</pubDate>
		<dc:creator>Hayes</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Social Networking]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[guides]]></category>
		<category><![CDATA[hadoop]]></category>

		<guid isPermaLink="false">http://hayesdavis.net/?p=20</guid>
		<description><![CDATA[What is Hadoop? Hadoop is a an open source Apache project written in Java and designed to provide users with two things: a distributed file system (HDFS) and a method for distributed computation. It&#8217;s based on Google&#8217;s published Google File System and MapReduce concept which discuss how to build a framework capable of executing intensive [...]]]></description>
			<content:encoded><![CDATA[<h3 style="padding-top: 10px;">What is Hadoop?</h3>
<p><a onclick="pageTracker._trackPageview('/outgoing/hadoop.apache.org/?referer=');pageTracker._trackPageview('/outgoing/hadoop.apache.org/?referer=http://hayesdavis.net/blog/wp-admin/edit.php');pageTracker._trackPageview('/outgoing/hadoop.apache.org/?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/hadoop.apache.org/?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/hadoop.apache.org/?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/hadoop.apache.org/?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/hadoop.apache.org/?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/hadoop.apache.org/?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/hadoop.apache.org/?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/hadoop.apache.org/?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/hadoop.apache.org/?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/hadoop.apache.org/?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20');pageTracker._trackPageview('/outgoing/hadoop.apache.org/?referer=http://hayesdavis.net/blog/wp-admin/edit.php?paged=2');pageTracker._trackPageview('/outgoing/hadoop.apache.org/?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20');pageTracker._trackPageview('/outgoing/hadoop.apache.org/?referer=http://hayesdavis.net/blog/wp-admin/edit.php?post_status=draft');pageTracker._trackPageview('/outgoing/hadoop.apache.org/?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/hadoop.apache.org/?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/hadoop.apache.org/?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/hadoop.apache.org/?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/hadoop.apache.org/?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/hadoop.apache.org/?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/hadoop.apache.org/?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/hadoop.apache.org/?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/hadoop.apache.org/?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/hadoop.apache.org/?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/hadoop.apache.org/?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/hadoop.apache.org/?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/hadoop.apache.org/?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/hadoop.apache.org/?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/hadoop.apache.org/?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/hadoop.apache.org/?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/hadoop.apache.org/?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');" href="http://hadoop.apache.org/">Hadoop</a> is a an open source <a onclick="pageTracker._trackPageview('/outgoing/www.apache.org/?referer=');pageTracker._trackPageview('/outgoing/www.apache.org/?referer=http://hayesdavis.net/blog/wp-admin/edit.php');pageTracker._trackPageview('/outgoing/www.apache.org/?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/www.apache.org/?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/www.apache.org/?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/www.apache.org/?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/www.apache.org/?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/www.apache.org/?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/www.apache.org/?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/www.apache.org/?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/www.apache.org/?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/www.apache.org/?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20');pageTracker._trackPageview('/outgoing/www.apache.org/?referer=http://hayesdavis.net/blog/wp-admin/edit.php?paged=2');pageTracker._trackPageview('/outgoing/www.apache.org/?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20');pageTracker._trackPageview('/outgoing/www.apache.org/?referer=http://hayesdavis.net/blog/wp-admin/edit.php?post_status=draft');pageTracker._trackPageview('/outgoing/www.apache.org/?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/www.apache.org/?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/www.apache.org/?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/www.apache.org/?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/www.apache.org/?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/www.apache.org/?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/www.apache.org/?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/www.apache.org/?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/www.apache.org/?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/www.apache.org/?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/www.apache.org/?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/www.apache.org/?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/www.apache.org/?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/www.apache.org/?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/www.apache.org/?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/www.apache.org/?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/www.apache.org/?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');" href="http://www.apache.org/">Apache</a> project written in Java and designed to provide users with two things: a distributed file system (HDFS) and a method for distributed computation. It&#8217;s based on Google&#8217;s published <a onclick="pageTracker._trackPageview('/outgoing/labs.google.com/papers/gfs.html?referer=');pageTracker._trackPageview('/outgoing/labs.google.com/papers/gfs.html?referer=http://hayesdavis.net/blog/wp-admin/edit.php');pageTracker._trackPageview('/outgoing/labs.google.com/papers/gfs.html?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/labs.google.com/papers/gfs.html?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/labs.google.com/papers/gfs.html?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/labs.google.com/papers/gfs.html?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/labs.google.com/papers/gfs.html?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/labs.google.com/papers/gfs.html?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/labs.google.com/papers/gfs.html?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/labs.google.com/papers/gfs.html?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/labs.google.com/papers/gfs.html?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/labs.google.com/papers/gfs.html?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20');pageTracker._trackPageview('/outgoing/labs.google.com/papers/gfs.html?referer=http://hayesdavis.net/blog/wp-admin/edit.php?paged=2');pageTracker._trackPageview('/outgoing/labs.google.com/papers/gfs.html?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20');pageTracker._trackPageview('/outgoing/labs.google.com/papers/gfs.html?referer=http://hayesdavis.net/blog/wp-admin/edit.php?post_status=draft');pageTracker._trackPageview('/outgoing/labs.google.com/papers/gfs.html?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/labs.google.com/papers/gfs.html?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/labs.google.com/papers/gfs.html?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/labs.google.com/papers/gfs.html?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/labs.google.com/papers/gfs.html?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/labs.google.com/papers/gfs.html?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/labs.google.com/papers/gfs.html?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/labs.google.com/papers/gfs.html?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/labs.google.com/papers/gfs.html?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/labs.google.com/papers/gfs.html?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/labs.google.com/papers/gfs.html?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/labs.google.com/papers/gfs.html?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/labs.google.com/papers/gfs.html?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/labs.google.com/papers/gfs.html?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/labs.google.com/papers/gfs.html?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/labs.google.com/papers/gfs.html?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/labs.google.com/papers/gfs.html?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');" href="http://labs.google.com/papers/gfs.html">Google File System</a> and <a onclick="pageTracker._trackPageview('/outgoing/labs.google.com/papers/mapreduce.html?referer=');pageTracker._trackPageview('/outgoing/labs.google.com/papers/mapreduce.html?referer=http://hayesdavis.net/blog/wp-admin/edit.php');pageTracker._trackPageview('/outgoing/labs.google.com/papers/mapreduce.html?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/labs.google.com/papers/mapreduce.html?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/labs.google.com/papers/mapreduce.html?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/labs.google.com/papers/mapreduce.html?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/labs.google.com/papers/mapreduce.html?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/labs.google.com/papers/mapreduce.html?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/labs.google.com/papers/mapreduce.html?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/labs.google.com/papers/mapreduce.html?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/labs.google.com/papers/mapreduce.html?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/labs.google.com/papers/mapreduce.html?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20');pageTracker._trackPageview('/outgoing/labs.google.com/papers/mapreduce.html?referer=http://hayesdavis.net/blog/wp-admin/edit.php?paged=2');pageTracker._trackPageview('/outgoing/labs.google.com/papers/mapreduce.html?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20');pageTracker._trackPageview('/outgoing/labs.google.com/papers/mapreduce.html?referer=http://hayesdavis.net/blog/wp-admin/edit.php?post_status=draft');pageTracker._trackPageview('/outgoing/labs.google.com/papers/mapreduce.html?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/labs.google.com/papers/mapreduce.html?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/labs.google.com/papers/mapreduce.html?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/labs.google.com/papers/mapreduce.html?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/labs.google.com/papers/mapreduce.html?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/labs.google.com/papers/mapreduce.html?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/labs.google.com/papers/mapreduce.html?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/labs.google.com/papers/mapreduce.html?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/labs.google.com/papers/mapreduce.html?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/labs.google.com/papers/mapreduce.html?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/labs.google.com/papers/mapreduce.html?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/labs.google.com/papers/mapreduce.html?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/labs.google.com/papers/mapreduce.html?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/labs.google.com/papers/mapreduce.html?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/labs.google.com/papers/mapreduce.html?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/labs.google.com/papers/mapreduce.html?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/labs.google.com/papers/mapreduce.html?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');" href="http://labs.google.com/papers/mapreduce.html">MapReduce</a> concept which discuss how to build a framework capable of executing intensive computations across tons of computers. Something that might, you know, be helpful in building a giant search index. Read the <a onclick="pageTracker._trackPageview('/outgoing/wiki.apache.org/hadoop/ProjectDescription?referer=');pageTracker._trackPageview('/outgoing/wiki.apache.org/hadoop/ProjectDescription?referer=http://hayesdavis.net/blog/wp-admin/edit.php');pageTracker._trackPageview('/outgoing/wiki.apache.org/hadoop/ProjectDescription?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/wiki.apache.org/hadoop/ProjectDescription?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/wiki.apache.org/hadoop/ProjectDescription?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/wiki.apache.org/hadoop/ProjectDescription?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/wiki.apache.org/hadoop/ProjectDescription?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/wiki.apache.org/hadoop/ProjectDescription?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/wiki.apache.org/hadoop/ProjectDescription?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/wiki.apache.org/hadoop/ProjectDescription?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/wiki.apache.org/hadoop/ProjectDescription?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/wiki.apache.org/hadoop/ProjectDescription?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20');pageTracker._trackPageview('/outgoing/wiki.apache.org/hadoop/ProjectDescription?referer=http://hayesdavis.net/blog/wp-admin/edit.php?paged=2');pageTracker._trackPageview('/outgoing/wiki.apache.org/hadoop/ProjectDescription?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20');pageTracker._trackPageview('/outgoing/wiki.apache.org/hadoop/ProjectDescription?referer=http://hayesdavis.net/blog/wp-admin/edit.php?post_status=draft');pageTracker._trackPageview('/outgoing/wiki.apache.org/hadoop/ProjectDescription?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/wiki.apache.org/hadoop/ProjectDescription?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/wiki.apache.org/hadoop/ProjectDescription?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/wiki.apache.org/hadoop/ProjectDescription?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/wiki.apache.org/hadoop/ProjectDescription?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/wiki.apache.org/hadoop/ProjectDescription?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/wiki.apache.org/hadoop/ProjectDescription?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/wiki.apache.org/hadoop/ProjectDescription?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/wiki.apache.org/hadoop/ProjectDescription?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/wiki.apache.org/hadoop/ProjectDescription?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/wiki.apache.org/hadoop/ProjectDescription?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/wiki.apache.org/hadoop/ProjectDescription?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/wiki.apache.org/hadoop/ProjectDescription?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/wiki.apache.org/hadoop/ProjectDescription?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/wiki.apache.org/hadoop/ProjectDescription?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/wiki.apache.org/hadoop/ProjectDescription?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/wiki.apache.org/hadoop/ProjectDescription?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');" href="http://wiki.apache.org/hadoop/ProjectDescription">Hadoop project description</a> and <a onclick="pageTracker._trackPageview('/outgoing/wiki.apache.org/hadoop/?referer=');pageTracker._trackPageview('/outgoing/wiki.apache.org/hadoop/?referer=http://hayesdavis.net/blog/wp-admin/edit.php');pageTracker._trackPageview('/outgoing/wiki.apache.org/hadoop/?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/wiki.apache.org/hadoop/?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/wiki.apache.org/hadoop/?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/wiki.apache.org/hadoop/?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/wiki.apache.org/hadoop/?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/wiki.apache.org/hadoop/?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/wiki.apache.org/hadoop/?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/wiki.apache.org/hadoop/?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/wiki.apache.org/hadoop/?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/wiki.apache.org/hadoop/?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20');pageTracker._trackPageview('/outgoing/wiki.apache.org/hadoop/?referer=http://hayesdavis.net/blog/wp-admin/edit.php?paged=2');pageTracker._trackPageview('/outgoing/wiki.apache.org/hadoop/?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20');pageTracker._trackPageview('/outgoing/wiki.apache.org/hadoop/?referer=http://hayesdavis.net/blog/wp-admin/edit.php?post_status=draft');pageTracker._trackPageview('/outgoing/wiki.apache.org/hadoop/?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/wiki.apache.org/hadoop/?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/wiki.apache.org/hadoop/?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/wiki.apache.org/hadoop/?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/wiki.apache.org/hadoop/?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/wiki.apache.org/hadoop/?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/wiki.apache.org/hadoop/?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/wiki.apache.org/hadoop/?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/wiki.apache.org/hadoop/?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/wiki.apache.org/hadoop/?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/wiki.apache.org/hadoop/?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/wiki.apache.org/hadoop/?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/wiki.apache.org/hadoop/?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/wiki.apache.org/hadoop/?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/wiki.apache.org/hadoop/?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/wiki.apache.org/hadoop/?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/wiki.apache.org/hadoop/?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');" href="http://wiki.apache.org/hadoop/">wiki</a> for more information and background on Hadoop.</p>
<h3>What&#8217;s the big deal about running it on Windows?</h3>
<div style="border: solid 1px #999; float: right; width: 250px; padding: 5px; margin: 10px 0 10px 20px;"><strong>Looking for Linux?</strong> If you&#8217;re looking for a comprehensive guide to getting Hadoop running on Linux, please check out Michael Noll&#8217;s excellent guides: <a onclick="pageTracker._trackPageview('/outgoing/www.michael-noll.com/wiki/Running_Hadoop_On_Ubuntu_Linux_28Single-Node_Cluster_29?referer=');pageTracker._trackPageview('/outgoing/www.michael-noll.com/wiki/Running_Hadoop_On_Ubuntu_Linux_28Single-Node_Cluster_29?referer=http://hayesdavis.net/blog/wp-admin/edit.php');pageTracker._trackPageview('/outgoing/www.michael-noll.com/wiki/Running_Hadoop_On_Ubuntu_Linux_28Single-Node_Cluster_29?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/www.michael-noll.com/wiki/Running_Hadoop_On_Ubuntu_Linux_28Single-Node_Cluster_29?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/www.michael-noll.com/wiki/Running_Hadoop_On_Ubuntu_Linux_28Single-Node_Cluster_29?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/www.michael-noll.com/wiki/Running_Hadoop_On_Ubuntu_Linux_28Single-Node_Cluster_29?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/www.michael-noll.com/wiki/Running_Hadoop_On_Ubuntu_Linux_28Single-Node_Cluster_29?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/www.michael-noll.com/wiki/Running_Hadoop_On_Ubuntu_Linux_28Single-Node_Cluster_29?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/www.michael-noll.com/wiki/Running_Hadoop_On_Ubuntu_Linux_28Single-Node_Cluster_29?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/www.michael-noll.com/wiki/Running_Hadoop_On_Ubuntu_Linux_28Single-Node_Cluster_29?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/www.michael-noll.com/wiki/Running_Hadoop_On_Ubuntu_Linux_28Single-Node_Cluster_29?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/www.michael-noll.com/wiki/Running_Hadoop_On_Ubuntu_Linux_28Single-Node_Cluster_29?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20');pageTracker._trackPageview('/outgoing/www.michael-noll.com/wiki/Running_Hadoop_On_Ubuntu_Linux_28Single-Node_Cluster_29?referer=http://hayesdavis.net/blog/wp-admin/edit.php?paged=2');pageTracker._trackPageview('/outgoing/www.michael-noll.com/wiki/Running_Hadoop_On_Ubuntu_Linux_28Single-Node_Cluster_29?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20');pageTracker._trackPageview('/outgoing/www.michael-noll.com/wiki/Running_Hadoop_On_Ubuntu_Linux_28Single-Node_Cluster_29?referer=http://hayesdavis.net/blog/wp-admin/edit.php?post_status=draft');pageTracker._trackPageview('/outgoing/www.michael-noll.com/wiki/Running_Hadoop_On_Ubuntu_Linux_28Single-Node_Cluster_29?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/www.michael-noll.com/wiki/Running_Hadoop_On_Ubuntu_Linux_28Single-Node_Cluster_29?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/www.michael-noll.com/wiki/Running_Hadoop_On_Ubuntu_Linux_28Single-Node_Cluster_29?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/www.michael-noll.com/wiki/Running_Hadoop_On_Ubuntu_Linux_28Single-Node_Cluster_29?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/www.michael-noll.com/wiki/Running_Hadoop_On_Ubuntu_Linux_28Single-Node_Cluster_29?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/www.michael-noll.com/wiki/Running_Hadoop_On_Ubuntu_Linux_28Single-Node_Cluster_29?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/www.michael-noll.com/wiki/Running_Hadoop_On_Ubuntu_Linux_28Single-Node_Cluster_29?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/www.michael-noll.com/wiki/Running_Hadoop_On_Ubuntu_Linux_28Single-Node_Cluster_29?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/www.michael-noll.com/wiki/Running_Hadoop_On_Ubuntu_Linux_28Single-Node_Cluster_29?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/www.michael-noll.com/wiki/Running_Hadoop_On_Ubuntu_Linux_28Single-Node_Cluster_29?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/www.michael-noll.com/wiki/Running_Hadoop_On_Ubuntu_Linux_28Single-Node_Cluster_29?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/www.michael-noll.com/wiki/Running_Hadoop_On_Ubuntu_Linux_28Single-Node_Cluster_29?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/www.michael-noll.com/wiki/Running_Hadoop_On_Ubuntu_Linux_28Single-Node_Cluster_29?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/www.michael-noll.com/wiki/Running_Hadoop_On_Ubuntu_Linux_28Single-Node_Cluster_29?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/www.michael-noll.com/wiki/Running_Hadoop_On_Ubuntu_Linux_28Single-Node_Cluster_29?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/www.michael-noll.com/wiki/Running_Hadoop_On_Ubuntu_Linux_28Single-Node_Cluster_29?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');" href="http://www.michael-noll.com/wiki/Running_Hadoop_On_Ubuntu_Linux_%28Single-Node_Cluster%29">Running Hadoop on Ubuntu Linux (Single Node Cluster)</a> and <a onclick="pageTracker._trackPageview('/outgoing/www.michael-noll.com/wiki/Running_Hadoop_On_Ubuntu_Linux_28Multi-Node_Cluster_29?referer=');pageTracker._trackPageview('/outgoing/www.michael-noll.com/wiki/Running_Hadoop_On_Ubuntu_Linux_28Multi-Node_Cluster_29?referer=http://hayesdavis.net/blog/wp-admin/edit.php');pageTracker._trackPageview('/outgoing/www.michael-noll.com/wiki/Running_Hadoop_On_Ubuntu_Linux_28Multi-Node_Cluster_29?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/www.michael-noll.com/wiki/Running_Hadoop_On_Ubuntu_Linux_28Multi-Node_Cluster_29?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/www.michael-noll.com/wiki/Running_Hadoop_On_Ubuntu_Linux_28Multi-Node_Cluster_29?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/www.michael-noll.com/wiki/Running_Hadoop_On_Ubuntu_Linux_28Multi-Node_Cluster_29?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/www.michael-noll.com/wiki/Running_Hadoop_On_Ubuntu_Linux_28Multi-Node_Cluster_29?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/www.michael-noll.com/wiki/Running_Hadoop_On_Ubuntu_Linux_28Multi-Node_Cluster_29?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/www.michael-noll.com/wiki/Running_Hadoop_On_Ubuntu_Linux_28Multi-Node_Cluster_29?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/www.michael-noll.com/wiki/Running_Hadoop_On_Ubuntu_Linux_28Multi-Node_Cluster_29?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/www.michael-noll.com/wiki/Running_Hadoop_On_Ubuntu_Linux_28Multi-Node_Cluster_29?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/www.michael-noll.com/wiki/Running_Hadoop_On_Ubuntu_Linux_28Multi-Node_Cluster_29?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20');pageTracker._trackPageview('/outgoing/www.michael-noll.com/wiki/Running_Hadoop_On_Ubuntu_Linux_28Multi-Node_Cluster_29?referer=http://hayesdavis.net/blog/wp-admin/edit.php?paged=2');pageTracker._trackPageview('/outgoing/www.michael-noll.com/wiki/Running_Hadoop_On_Ubuntu_Linux_28Multi-Node_Cluster_29?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20');pageTracker._trackPageview('/outgoing/www.michael-noll.com/wiki/Running_Hadoop_On_Ubuntu_Linux_28Multi-Node_Cluster_29?referer=http://hayesdavis.net/blog/wp-admin/edit.php?post_status=draft');pageTracker._trackPageview('/outgoing/www.michael-noll.com/wiki/Running_Hadoop_On_Ubuntu_Linux_28Multi-Node_Cluster_29?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/www.michael-noll.com/wiki/Running_Hadoop_On_Ubuntu_Linux_28Multi-Node_Cluster_29?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/www.michael-noll.com/wiki/Running_Hadoop_On_Ubuntu_Linux_28Multi-Node_Cluster_29?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/www.michael-noll.com/wiki/Running_Hadoop_On_Ubuntu_Linux_28Multi-Node_Cluster_29?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/www.michael-noll.com/wiki/Running_Hadoop_On_Ubuntu_Linux_28Multi-Node_Cluster_29?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/www.michael-noll.com/wiki/Running_Hadoop_On_Ubuntu_Linux_28Multi-Node_Cluster_29?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/www.michael-noll.com/wiki/Running_Hadoop_On_Ubuntu_Linux_28Multi-Node_Cluster_29?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/www.michael-noll.com/wiki/Running_Hadoop_On_Ubuntu_Linux_28Multi-Node_Cluster_29?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/www.michael-noll.com/wiki/Running_Hadoop_On_Ubuntu_Linux_28Multi-Node_Cluster_29?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/www.michael-noll.com/wiki/Running_Hadoop_On_Ubuntu_Linux_28Multi-Node_Cluster_29?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/www.michael-noll.com/wiki/Running_Hadoop_On_Ubuntu_Linux_28Multi-Node_Cluster_29?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/www.michael-noll.com/wiki/Running_Hadoop_On_Ubuntu_Linux_28Multi-Node_Cluster_29?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/www.michael-noll.com/wiki/Running_Hadoop_On_Ubuntu_Linux_28Multi-Node_Cluster_29?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/www.michael-noll.com/wiki/Running_Hadoop_On_Ubuntu_Linux_28Multi-Node_Cluster_29?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/www.michael-noll.com/wiki/Running_Hadoop_On_Ubuntu_Linux_28Multi-Node_Cluster_29?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/www.michael-noll.com/wiki/Running_Hadoop_On_Ubuntu_Linux_28Multi-Node_Cluster_29?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');" href="http://www.michael-noll.com/wiki/Running_Hadoop_On_Ubuntu_Linux_%28Multi-Node_Cluster%29">Running Hadoop on Ubuntu Linux (Multi-Node Cluster)</a>. This post was inspired by these very informative articles.</div>
<p>Hadoop&#8217;s key design goal is to provide storage and computation on lots of homogenous &#8220;commodity&#8221; machines; usually a fairly beefy machine running Linux. With that goal in mind, the Hadoop team has logically focused on Linux platforms in their development and documentation. Their <a onclick="pageTracker._trackPageview('/outgoing/http//hadoop.apache.org/core/docs/current/quickstart.html?referer=');pageTracker._trackPageview('/outgoing/http//hadoop.apache.org/core/docs/current/quickstart.html?referer=http://hayesdavis.net/blog/wp-admin/edit.php');pageTracker._trackPageview('/outgoing/http//hadoop.apache.org/core/docs/current/quickstart.html?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/http//hadoop.apache.org/core/docs/current/quickstart.html?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/http//hadoop.apache.org/core/docs/current/quickstart.html?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/http//hadoop.apache.org/core/docs/current/quickstart.html?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/http//hadoop.apache.org/core/docs/current/quickstart.html?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/http//hadoop.apache.org/core/docs/current/quickstart.html?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/http//hadoop.apache.org/core/docs/current/quickstart.html?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/http//hadoop.apache.org/core/docs/current/quickstart.html?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/http//hadoop.apache.org/core/docs/current/quickstart.html?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/http//hadoop.apache.org/core/docs/current/quickstart.html?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20');pageTracker._trackPageview('/outgoing/http//hadoop.apache.org/core/docs/current/quickstart.html?referer=http://hayesdavis.net/blog/wp-admin/edit.php?paged=2');pageTracker._trackPageview('/outgoing/http//hadoop.apache.org/core/docs/current/quickstart.html?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20');pageTracker._trackPageview('/outgoing/http//hadoop.apache.org/core/docs/current/quickstart.html?referer=http://hayesdavis.net/blog/wp-admin/edit.php?post_status=draft');pageTracker._trackPageview('/outgoing/http//hadoop.apache.org/core/docs/current/quickstart.html?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/http//hadoop.apache.org/core/docs/current/quickstart.html?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/http//hadoop.apache.org/core/docs/current/quickstart.html?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/http//hadoop.apache.org/core/docs/current/quickstart.html?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/http//hadoop.apache.org/core/docs/current/quickstart.html?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/http//hadoop.apache.org/core/docs/current/quickstart.html?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/http//hadoop.apache.org/core/docs/current/quickstart.html?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/http//hadoop.apache.org/core/docs/current/quickstart.html?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/http//hadoop.apache.org/core/docs/current/quickstart.html?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/http//hadoop.apache.org/core/docs/current/quickstart.html?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/http//hadoop.apache.org/core/docs/current/quickstart.html?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/http//hadoop.apache.org/core/docs/current/quickstart.html?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/http//hadoop.apache.org/core/docs/current/quickstart.html?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/http//hadoop.apache.org/core/docs/current/quickstart.html?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/http//hadoop.apache.org/core/docs/current/quickstart.html?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/http//hadoop.apache.org/core/docs/current/quickstart.html?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/http//hadoop.apache.org/core/docs/current/quickstart.html?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');" href="http://http//hadoop.apache.org/core/docs/current/quickstart.html">Quickstart</a> even includes the caveat that &#8220;Win32 is supported as a <em>development platform</em>. Distributed operation has not been well tested on Win32, so this is not a <em>production platform</em>.&#8221; If you want to use Windows to run Hadoop in pseudo-distributed or distributed mode (more on these modes in a moment), you&#8217;re pretty much left on your own. Now, most people will still probably not run Hadoop in production on Windows machines, but the ability to deploy on the most widely used platform in the world is still probably a good idea for allowing Hadoop to be used by many of the developers out there that use Windows on a daily basis.</p>
<h3>Caveat Emptor</h3>
<p>I&#8217;m one of the few that has invested the time to setup an actual distributed Hadoop installation on Windows. I&#8217;ve used it for some successful development tests. I have not used this in production. Also, although I can get around in a Linux/Unix environment, I&#8217;m no expert so some of the advice below may not be the correct way to configure things. I&#8217;m also no security expert. If any of you out there have corrections or advice for me, please let me know in a comment and I&#8217;ll get it fixed.</p>
<p>This guide uses <a onclick="pageTracker._trackPageview('/outgoing/hadoop.apache.org/core/docs/r0.17.0/?referer=');pageTracker._trackPageview('/outgoing/hadoop.apache.org/core/docs/r0.17.0/?referer=http://hayesdavis.net/blog/wp-admin/edit.php');pageTracker._trackPageview('/outgoing/hadoop.apache.org/core/docs/r0.17.0/?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/hadoop.apache.org/core/docs/r0.17.0/?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/hadoop.apache.org/core/docs/r0.17.0/?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/hadoop.apache.org/core/docs/r0.17.0/?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/hadoop.apache.org/core/docs/r0.17.0/?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/hadoop.apache.org/core/docs/r0.17.0/?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/hadoop.apache.org/core/docs/r0.17.0/?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/hadoop.apache.org/core/docs/r0.17.0/?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/hadoop.apache.org/core/docs/r0.17.0/?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/hadoop.apache.org/core/docs/r0.17.0/?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20');pageTracker._trackPageview('/outgoing/hadoop.apache.org/core/docs/r0.17.0/?referer=http://hayesdavis.net/blog/wp-admin/edit.php?paged=2');pageTracker._trackPageview('/outgoing/hadoop.apache.org/core/docs/r0.17.0/?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20');pageTracker._trackPageview('/outgoing/hadoop.apache.org/core/docs/r0.17.0/?referer=http://hayesdavis.net/blog/wp-admin/edit.php?post_status=draft');pageTracker._trackPageview('/outgoing/hadoop.apache.org/core/docs/r0.17.0/?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/hadoop.apache.org/core/docs/r0.17.0/?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/hadoop.apache.org/core/docs/r0.17.0/?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/hadoop.apache.org/core/docs/r0.17.0/?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/hadoop.apache.org/core/docs/r0.17.0/?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/hadoop.apache.org/core/docs/r0.17.0/?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/hadoop.apache.org/core/docs/r0.17.0/?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/hadoop.apache.org/core/docs/r0.17.0/?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/hadoop.apache.org/core/docs/r0.17.0/?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/hadoop.apache.org/core/docs/r0.17.0/?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/hadoop.apache.org/core/docs/r0.17.0/?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/hadoop.apache.org/core/docs/r0.17.0/?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/hadoop.apache.org/core/docs/r0.17.0/?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/hadoop.apache.org/core/docs/r0.17.0/?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/hadoop.apache.org/core/docs/r0.17.0/?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/hadoop.apache.org/core/docs/r0.17.0/?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/hadoop.apache.org/core/docs/r0.17.0/?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');" href="http://hadoop.apache.org/core/docs/r0.17.0/">Hadoop v0.17</a> and assumes that you don&#8217;t have any previous Hadoop installation. I&#8217;ve also done my primary work with Hadoop on Windows XP. Where I&#8217;m aware of differences between XP and Vista, I&#8217;ve tried to note them. Please comment if something I&#8217;ve written is not appropriate for Vista.</p>
<p>Bottom line: your mileage may vary, but this guide should get you started running Hadoop on Windows.</p>
<h3>A quick note on distributed Hadoop</h3>
<p>Hadoop runs in one of three modes:</p>
<ul>
<li>Standalone: All Hadoop functionality runs in one Java process. This works &#8220;out of the box&#8221; and is trivial to use on any platform, Windows included.</li>
<li>Pseudo-Distributed: Hadoop functionality all runs on the local machine but the various components will run as separate processes. This is much more like &#8220;real&#8221; Hadoop and does require some configuration as well as SSH. It does not, however, permit distributed storage or processing across multiple machines.</li>
<li>Fully Distributed: Hadoop functionality is distributed across a &#8220;cluster&#8221; of machines. Each machine participates in somewhat different (and occasionally overlapping) roles. This allows multiple machines to contribute processing power and storage to the cluster.</li>
</ul>
<p>The <a onclick="pageTracker._trackPageview('/outgoing/hadoop.apache.org/core/docs/current/quickstart.html?referer=');pageTracker._trackPageview('/outgoing/hadoop.apache.org/core/docs/current/quickstart.html?referer=http://hayesdavis.net/blog/wp-admin/edit.php');pageTracker._trackPageview('/outgoing/hadoop.apache.org/core/docs/current/quickstart.html?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/hadoop.apache.org/core/docs/current/quickstart.html?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/hadoop.apache.org/core/docs/current/quickstart.html?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/hadoop.apache.org/core/docs/current/quickstart.html?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/hadoop.apache.org/core/docs/current/quickstart.html?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/hadoop.apache.org/core/docs/current/quickstart.html?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/hadoop.apache.org/core/docs/current/quickstart.html?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/hadoop.apache.org/core/docs/current/quickstart.html?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/hadoop.apache.org/core/docs/current/quickstart.html?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/hadoop.apache.org/core/docs/current/quickstart.html?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20');pageTracker._trackPageview('/outgoing/hadoop.apache.org/core/docs/current/quickstart.html?referer=http://hayesdavis.net/blog/wp-admin/edit.php?paged=2');pageTracker._trackPageview('/outgoing/hadoop.apache.org/core/docs/current/quickstart.html?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20');pageTracker._trackPageview('/outgoing/hadoop.apache.org/core/docs/current/quickstart.html?referer=http://hayesdavis.net/blog/wp-admin/edit.php?post_status=draft');pageTracker._trackPageview('/outgoing/hadoop.apache.org/core/docs/current/quickstart.html?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/hadoop.apache.org/core/docs/current/quickstart.html?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/hadoop.apache.org/core/docs/current/quickstart.html?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/hadoop.apache.org/core/docs/current/quickstart.html?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/hadoop.apache.org/core/docs/current/quickstart.html?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/hadoop.apache.org/core/docs/current/quickstart.html?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/hadoop.apache.org/core/docs/current/quickstart.html?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/hadoop.apache.org/core/docs/current/quickstart.html?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/hadoop.apache.org/core/docs/current/quickstart.html?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/hadoop.apache.org/core/docs/current/quickstart.html?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/hadoop.apache.org/core/docs/current/quickstart.html?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/hadoop.apache.org/core/docs/current/quickstart.html?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/hadoop.apache.org/core/docs/current/quickstart.html?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/hadoop.apache.org/core/docs/current/quickstart.html?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/hadoop.apache.org/core/docs/current/quickstart.html?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/hadoop.apache.org/core/docs/current/quickstart.html?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');" href="http://hadoop.apache.org/core/docs/current/quickstart.html">Hadoop Quickstart</a> can get you started on Standalone mode and Psuedo-Distributed (to some degree). Take a look at that if you&#8217;re not ready for Fully Distributed. This guide focuses on the Fully Distributed mode of Hadoop. After all, it&#8217;s the most interesting where you&#8217;re actually doing real distributed computing.</p>
<h3>Pre-Requisites</h3>
<h4>Java</h4>
<p>I&#8217;m assuming if you&#8217;re interested in running Hadoop that you&#8217;re familiar with Java programming and have Java installed on all the machines on which you want to run Hadoop. The Hadoop docs recommend Java 6 and require at least Java 5. Whichever you choose, you need to make sure that you have the same major Java version (5 or 6) installed on each machine. Also, any code you write for running using Hadoop&#8217;s MapReduce must be compiled with the version you choose. If you don&#8217;t have Java installed, go get it from Sun and install it. I will assume you&#8217;re using Java 6 in the rest of this guide.</p>
<h4>Cygwin</h4>
<p>As I said in the introduction, Hadoop assumes Linux (or a Unix flavor OS) is being used to run Hadoop. This assumption is buried pretty deeply. Various parts of Hadoop are executed using shell scripts that will only work on a Linux shell. It also uses passwordless secure shell (SSH) to communicate between computers in the Hadoop cluster. The best way to do these things on Windows is to make Windows act more like Linux. You can do this using <a onclick="pageTracker._trackPageview('/outgoing/www.cygwin.com/?referer=');pageTracker._trackPageview('/outgoing/www.cygwin.com/?referer=http://hayesdavis.net/blog/wp-admin/edit.php');pageTracker._trackPageview('/outgoing/www.cygwin.com/?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/www.cygwin.com/?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/www.cygwin.com/?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/www.cygwin.com/?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/www.cygwin.com/?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/www.cygwin.com/?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/www.cygwin.com/?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/www.cygwin.com/?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/www.cygwin.com/?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/www.cygwin.com/?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20');pageTracker._trackPageview('/outgoing/www.cygwin.com/?referer=http://hayesdavis.net/blog/wp-admin/edit.php?paged=2');pageTracker._trackPageview('/outgoing/www.cygwin.com/?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20');pageTracker._trackPageview('/outgoing/www.cygwin.com/?referer=http://hayesdavis.net/blog/wp-admin/edit.php?post_status=draft');pageTracker._trackPageview('/outgoing/www.cygwin.com/?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/www.cygwin.com/?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/www.cygwin.com/?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/www.cygwin.com/?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/www.cygwin.com/?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/www.cygwin.com/?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/www.cygwin.com/?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/www.cygwin.com/?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/www.cygwin.com/?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/www.cygwin.com/?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/www.cygwin.com/?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/www.cygwin.com/?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/www.cygwin.com/?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/www.cygwin.com/?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/www.cygwin.com/?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/www.cygwin.com/?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/www.cygwin.com/?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/www.cygwin.com/?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');" href="http://www.cygwin.com/">Cygwin</a>, which provides a &#8220;Linux-like environment for Windows&#8221; that allows you to use Linux-style command line utilities as well as run really useful Linux-centric software like OpenSSH. Go <a onclick="pageTracker._trackPageview('/outgoing/www.cygwin.com/?referer=');pageTracker._trackPageview('/outgoing/www.cygwin.com/?referer=http://hayesdavis.net/blog/wp-admin/edit.php');pageTracker._trackPageview('/outgoing/www.cygwin.com/?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/www.cygwin.com/?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/www.cygwin.com/?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/www.cygwin.com/?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/www.cygwin.com/?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/www.cygwin.com/?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/www.cygwin.com/?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/www.cygwin.com/?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/www.cygwin.com/?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/www.cygwin.com/?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20');pageTracker._trackPageview('/outgoing/www.cygwin.com/?referer=http://hayesdavis.net/blog/wp-admin/edit.php?paged=2');pageTracker._trackPageview('/outgoing/www.cygwin.com/?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20');pageTracker._trackPageview('/outgoing/www.cygwin.com/?referer=http://hayesdavis.net/blog/wp-admin/edit.php?post_status=draft');pageTracker._trackPageview('/outgoing/www.cygwin.com/?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/www.cygwin.com/?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/www.cygwin.com/?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/www.cygwin.com/?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/www.cygwin.com/?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/www.cygwin.com/?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/www.cygwin.com/?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/www.cygwin.com/?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/www.cygwin.com/?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/www.cygwin.com/?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/www.cygwin.com/?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/www.cygwin.com/?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/www.cygwin.com/?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/www.cygwin.com/?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/www.cygwin.com/?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/www.cygwin.com/?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/www.cygwin.com/?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/www.cygwin.com/?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');" href="http://www.cygwin.com/">download the latest version of Cygwin</a>. <strong>Don&#8217;t install it yet.</strong> I&#8217;ll describe how you need to install it below.</p>
<h4>Hadoop</h4>
<p>Go <a onclick="pageTracker._trackPageview('/outgoing/hadoop.apache.org/core/releases.html_Download?referer=');pageTracker._trackPageview('/outgoing/hadoop.apache.org/core/releases.html_Download?referer=http://hayesdavis.net/blog/wp-admin/edit.php');pageTracker._trackPageview('/outgoing/hadoop.apache.org/core/releases.html_Download?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/hadoop.apache.org/core/releases.html_Download?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/hadoop.apache.org/core/releases.html_Download?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/hadoop.apache.org/core/releases.html_Download?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/hadoop.apache.org/core/releases.html_Download?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/hadoop.apache.org/core/releases.html_Download?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');" href="http://hadoop.apache.org/core/releases.html#Download">download Hadoop core</a>. I&#8217;m writing this guide for version 0.17 and I will assume that&#8217;s what you&#8217;re using.</p>
<h4>More than one Windows PC on a LAN</h4>
<p>It should probably go without saying that to follow this guide, you&#8217;ll need to have more than one PC. I&#8217;m going to assume you have two computers and that they&#8217;re both on your LAN. Go ahead and designate one to be the Master and one to be the Slave. These machines together will be your &#8220;cluster&#8221;. The Master will be responsible for ensuring the Slaves have work to do (such as storing data or running MapReduce jobs). The Master can also do its share of this work as well. If you have more than two PCs, you can always setup Slave2, Slave3 and so on. Some of the steps below will need to be performed on all your cluster machines, some on just Master or Slaves. I&#8217;ll note which apply for each step.</p>
<h3>Step 1: Configure your hosts file (All machines)</h3>
<p>This step isn&#8217;t strictly necessary but it will make your life easier down the road if your computers change IPs. It&#8217;ll also help you keep things straight in your head as you edit configuration files. Open your Windows hosts file located at <code>c:\windows\system32\drivers\etc\hosts</code> (the file is named &#8220;hosts&#8221; with no extension) in a text editor and add the following lines (replacing the NNNs with the IP addresses of both master and slave):</p>
<pre>master NNN.NNN.NNN.NNN
slave NNN.NNN.NNN.NNN</pre>
<p>Save the file.</p>
<h3>Step 2: Install Cygwin and Configure OpenSSH sshd (All machines)</h3>
<p>Cygwin has a bit of an odd installation process because it lets you pick and choose which libraries of useful Linux-y programs and utilities you want to install. In this case, we&#8217;re really installing Cygwin to be able to run shell scripts and <a onclick="pageTracker._trackPageview('/outgoing/www.openssh.org/?referer=');pageTracker._trackPageview('/outgoing/www.openssh.org/?referer=http://hayesdavis.net/blog/wp-admin/edit.php');pageTracker._trackPageview('/outgoing/www.openssh.org/?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/www.openssh.org/?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/www.openssh.org/?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/www.openssh.org/?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/www.openssh.org/?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/www.openssh.org/?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/www.openssh.org/?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/www.openssh.org/?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/www.openssh.org/?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/www.openssh.org/?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20');pageTracker._trackPageview('/outgoing/www.openssh.org/?referer=http://hayesdavis.net/blog/wp-admin/edit.php?paged=2');pageTracker._trackPageview('/outgoing/www.openssh.org/?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20');" href="http://www.openssh.org/">OpenSSH</a>. OpenSSH is an implementation of a <a onclick="pageTracker._trackPageview('/outgoing/en.wikipedia.org/wiki/Secure_Shell?referer=');pageTracker._trackPageview('/outgoing/en.wikipedia.org/wiki/Secure_Shell?referer=http://hayesdavis.net/blog/wp-admin/edit.php');pageTracker._trackPageview('/outgoing/en.wikipedia.org/wiki/Secure_Shell?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/en.wikipedia.org/wiki/Secure_Shell?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/en.wikipedia.org/wiki/Secure_Shell?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/en.wikipedia.org/wiki/Secure_Shell?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/en.wikipedia.org/wiki/Secure_Shell?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/en.wikipedia.org/wiki/Secure_Shell?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/en.wikipedia.org/wiki/Secure_Shell?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/en.wikipedia.org/wiki/Secure_Shell?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/en.wikipedia.org/wiki/Secure_Shell?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/en.wikipedia.org/wiki/Secure_Shell?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20');pageTracker._trackPageview('/outgoing/en.wikipedia.org/wiki/Secure_Shell?referer=http://hayesdavis.net/blog/wp-admin/edit.php?paged=2');pageTracker._trackPageview('/outgoing/en.wikipedia.org/wiki/Secure_Shell?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20');" href="http://en.wikipedia.org/wiki/Secure_Shell">secure shell (SSH)</a> server (sshd) and client (ssh). If you&#8217;re not familiar with SSH, you can think of it as a secure version of telnet. With the ssh command, you can login to another computer running sshd and work with it from the command line. Instead of reinventing the wheel, I&#8217;m going to tell you to go <a onclick="pageTracker._trackPageview('/outgoing/pigtail.net/LRP/printsrv/cygwin-sshd.html?referer=');pageTracker._trackPageview('/outgoing/pigtail.net/LRP/printsrv/cygwin-sshd.html?referer=http://hayesdavis.net/blog/wp-admin/edit.php');pageTracker._trackPageview('/outgoing/pigtail.net/LRP/printsrv/cygwin-sshd.html?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/pigtail.net/LRP/printsrv/cygwin-sshd.html?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/pigtail.net/LRP/printsrv/cygwin-sshd.html?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/pigtail.net/LRP/printsrv/cygwin-sshd.html?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/pigtail.net/LRP/printsrv/cygwin-sshd.html?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/pigtail.net/LRP/printsrv/cygwin-sshd.html?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/pigtail.net/LRP/printsrv/cygwin-sshd.html?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/pigtail.net/LRP/printsrv/cygwin-sshd.html?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/pigtail.net/LRP/printsrv/cygwin-sshd.html?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/pigtail.net/LRP/printsrv/cygwin-sshd.html?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20');pageTracker._trackPageview('/outgoing/pigtail.net/LRP/printsrv/cygwin-sshd.html?referer=http://hayesdavis.net/blog/wp-admin/edit.php?paged=2');pageTracker._trackPageview('/outgoing/pigtail.net/LRP/printsrv/cygwin-sshd.html?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20');pageTracker._trackPageview('/outgoing/pigtail.net/LRP/printsrv/cygwin-sshd.html?referer=http://hayesdavis.net/blog/wp-admin/edit.php?post_status=draft');pageTracker._trackPageview('/outgoing/pigtail.net/LRP/printsrv/cygwin-sshd.html?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/pigtail.net/LRP/printsrv/cygwin-sshd.html?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/pigtail.net/LRP/printsrv/cygwin-sshd.html?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/pigtail.net/LRP/printsrv/cygwin-sshd.html?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/pigtail.net/LRP/printsrv/cygwin-sshd.html?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/pigtail.net/LRP/printsrv/cygwin-sshd.html?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/pigtail.net/LRP/printsrv/cygwin-sshd.html?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/pigtail.net/LRP/printsrv/cygwin-sshd.html?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/pigtail.net/LRP/printsrv/cygwin-sshd.html?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/pigtail.net/LRP/printsrv/cygwin-sshd.html?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/pigtail.net/LRP/printsrv/cygwin-sshd.html?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/pigtail.net/LRP/printsrv/cygwin-sshd.html?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/pigtail.net/LRP/printsrv/cygwin-sshd.html?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/pigtail.net/LRP/printsrv/cygwin-sshd.html?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/pigtail.net/LRP/printsrv/cygwin-sshd.html?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/pigtail.net/LRP/printsrv/cygwin-sshd.html?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/pigtail.net/LRP/printsrv/cygwin-sshd.html?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/pigtail.net/LRP/printsrv/cygwin-sshd.html?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');" href="http://pigtail.net/LRP/printsrv/cygwin-sshd.html">here for step-by-step instructions on how to install Cygwin on Windows and get OpenSSH&#8217;s sshd server running</a>. <strong>You can stop after instruction 6.</strong> Like the linked instructions, I&#8217;ll assume you&#8217;ve installed Cygwin to c:\cygwin though you can install it elsewhere.</p>
<p>If you&#8217;re running a firewall on your machine, you&#8217;ll need to make sure port 22 is open for incoming SSH connections. As always with firewalls, open your machine up as little as possible. If you&#8217;re using Windows firewall, make sure the open port is scoped to your LAN. Microsoft has <a onclick="pageTracker._trackPageview('/outgoing/www.microsoft.com/technet/security/smallbusiness/prodtech/windowsxp/cfgfwall.mspx?referer=');pageTracker._trackPageview('/outgoing/www.microsoft.com/technet/security/smallbusiness/prodtech/windowsxp/cfgfwall.mspx?referer=http://hayesdavis.net/blog/wp-admin/edit.php');pageTracker._trackPageview('/outgoing/www.microsoft.com/technet/security/smallbusiness/prodtech/windowsxp/cfgfwall.mspx?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/www.microsoft.com/technet/security/smallbusiness/prodtech/windowsxp/cfgfwall.mspx?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/www.microsoft.com/technet/security/smallbusiness/prodtech/windowsxp/cfgfwall.mspx?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/www.microsoft.com/technet/security/smallbusiness/prodtech/windowsxp/cfgfwall.mspx?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/www.microsoft.com/technet/security/smallbusiness/prodtech/windowsxp/cfgfwall.mspx?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/www.microsoft.com/technet/security/smallbusiness/prodtech/windowsxp/cfgfwall.mspx?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/www.microsoft.com/technet/security/smallbusiness/prodtech/windowsxp/cfgfwall.mspx?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/www.microsoft.com/technet/security/smallbusiness/prodtech/windowsxp/cfgfwall.mspx?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/www.microsoft.com/technet/security/smallbusiness/prodtech/windowsxp/cfgfwall.mspx?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/www.microsoft.com/technet/security/smallbusiness/prodtech/windowsxp/cfgfwall.mspx?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20');pageTracker._trackPageview('/outgoing/www.microsoft.com/technet/security/smallbusiness/prodtech/windowsxp/cfgfwall.mspx?referer=http://hayesdavis.net/blog/wp-admin/edit.php?paged=2');pageTracker._trackPageview('/outgoing/www.microsoft.com/technet/security/smallbusiness/prodtech/windowsxp/cfgfwall.mspx?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20');pageTracker._trackPageview('/outgoing/www.microsoft.com/technet/security/smallbusiness/prodtech/windowsxp/cfgfwall.mspx?referer=http://hayesdavis.net/blog/wp-admin/edit.php?post_status=draft');pageTracker._trackPageview('/outgoing/www.microsoft.com/technet/security/smallbusiness/prodtech/windowsxp/cfgfwall.mspx?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/www.microsoft.com/technet/security/smallbusiness/prodtech/windowsxp/cfgfwall.mspx?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/www.microsoft.com/technet/security/smallbusiness/prodtech/windowsxp/cfgfwall.mspx?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/www.microsoft.com/technet/security/smallbusiness/prodtech/windowsxp/cfgfwall.mspx?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/www.microsoft.com/technet/security/smallbusiness/prodtech/windowsxp/cfgfwall.mspx?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/www.microsoft.com/technet/security/smallbusiness/prodtech/windowsxp/cfgfwall.mspx?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/www.microsoft.com/technet/security/smallbusiness/prodtech/windowsxp/cfgfwall.mspx?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/www.microsoft.com/technet/security/smallbusiness/prodtech/windowsxp/cfgfwall.mspx?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/www.microsoft.com/technet/security/smallbusiness/prodtech/windowsxp/cfgfwall.mspx?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/www.microsoft.com/technet/security/smallbusiness/prodtech/windowsxp/cfgfwall.mspx?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/www.microsoft.com/technet/security/smallbusiness/prodtech/windowsxp/cfgfwall.mspx?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/www.microsoft.com/technet/security/smallbusiness/prodtech/windowsxp/cfgfwall.mspx?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/www.microsoft.com/technet/security/smallbusiness/prodtech/windowsxp/cfgfwall.mspx?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/www.microsoft.com/technet/security/smallbusiness/prodtech/windowsxp/cfgfwall.mspx?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/www.microsoft.com/technet/security/smallbusiness/prodtech/windowsxp/cfgfwall.mspx?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/www.microsoft.com/technet/security/smallbusiness/prodtech/windowsxp/cfgfwall.mspx?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/www.microsoft.com/technet/security/smallbusiness/prodtech/windowsxp/cfgfwall.mspx?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/www.microsoft.com/technet/security/smallbusiness/prodtech/windowsxp/cfgfwall.mspx?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');" href="http://www.microsoft.com/technet/security/smallbusiness/prodtech/windowsxp/cfgfwall.mspx">documentation</a> for how to do all this with Windows Firewall (scroll down to the section titled &#8220;Configure Exceptions for Ports&#8221;).</p>
<h3>Step 3: Configure SSH (All Machines)</h3>
<p>Hadoop uses SSH to allow the master computer(s) in a cluster to start and stop processes on the slave computers. One of the nice things about SSH is it supports several modes of secure authentication: you can use passwords or you can use public/private keys to connect without passwords (&#8220;passwordless&#8221;). Hadoop requires that you setup SSH to do the latter. I&#8217;m not going to go into great detail on how this all works, but suffice it to say that you&#8217;re going to do the following:</p>
<ol>
<li>Generate a public-private key pair for your user on each cluster machine.</li>
<li>Exchange each machine user&#8217;s public key with each other machine user in the cluster.</li>
</ol>
<h4>Generate public/private key pairs</h4>
<p>To generate a key pair, open Cygwin and issue the following commands (<code>$&gt;</code> is the command prompt):<br />
<code>$&gt; ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa</code><br />
<code>$&gt; cat ~/.ssh/id_dsa.pub &gt;&gt; ~/.ssh/authorized_keys</code></p>
<p>Now, you should be able to SSH into your local machine using the following command:<br />
<code>$&gt; ssh localhost</code></p>
<p>When prompted for your password, enter it. You&#8217;ll see something like the following in your Cygwin terminal.</p>
<p><code>hayes@localhost's password:<br />
Last login: Sun Jun  8 19:47:14 2008 from localhost</code></p>
<p>hayes@calculon ~<br />
$&gt;</p>
<p>To quit the SSH session and go back to your regular terminal, use:<br />
<code>$&gt; exit</code></p>
<p><strong> Make sure to do this on all computers in your cluster.</strong></p>
<h4>Exchange public keys</h4>
<p>Now that you have public and private key pairs on each machine in your cluster, you need to share your public keys around to permit passwordless login from one machine to the other. Once a machine has a public key, it can safely authenticate a request from a remote machine that is encrypted using the private key that matches that public key.</p>
<p>On the master issue the following command in cygwin (where &#8220;&lt;slaveusername&gt;&#8221; is the username you use to login to Windows on the slave computer):</p>
<p><code>$&gt; scp ~/.ssh/id_dsa.pub &lt;slaveusername&gt;@slave:~/.ssh/master-key.pub</code></p>
<p>Enter your password when prompted. This will copy your public key file in use on the master to the slave.</p>
<p>On the slave, issue the following command in cygwin:</p>
<p><code>$&gt; cat ~/.ssh/master-key.pub &gt;&gt; ~/.ssh/authorized_keys</code></p>
<p>This will append your public key to the set of authorized keys the slave accepts for authentication purposes.</p>
<p>Back on the master, test this out by issuing the following command in cygwin:</p>
<p><code>$&gt; ssh &lt;slaveusername&gt;@slave</code></p>
<p>If all is well, you should be logged into the slave computer with no password required.</p>
<p><strong>Repeat this process in reverse, copying the slave&#8217;s public key to the master. Also, make sure to exchange public keys between the master and any other slaves that may be in your cluster.</strong></p>
<h4>Configure SSH to use default usernames (optional)</h4>
<p>If all of your cluster machines are using the same username, you can safely skip this step. If not, read on.</p>
<p>Most Hadoop tutorials suggest that you setup a user specific to Hadoop. If you want to do that, you certainly can. Why setup a specific user for Hadoop? Well, in addition to being more secure from a file permissions and security perspective, when Hadoop uses SSH to issue commands from one machine to another it will automatically try to login to the remote machine using the same user as the current machine. If you have different users on different machines, the SSH login performed by Hadoop will fail. However, most of us on Windows typically use our machines with a single user and would probably prefer not to have to setup a new user on each machine just for Hadoop.</p>
<p>The way to allow Hadoop to work with multiple users is by configuring SSH to automatically select the appropriate user when Hadoop issues its SSH command. (You&#8217;ll also need to edit the hadoop-env.sh config file, but that comes later in this guide.) You can do this by editing the file named &#8220;config&#8221; (no extension) located in the same &#8220;.ssh&#8221; directory where you stored your public and private keys for authentication. Cygwin stores this directory under &#8220;c:\cygwin\home\&lt;windowsusername&gt;\.ssh&#8221;.</p>
<p>On the master, create a file called config and add the following lines (replacing &#8220;&lt;slaveusername&gt;&#8221; with the username you&#8217;re using on the Slave machine:<br />
<code><br />
Host slave<br />
User &lt;slaveusername&gt;<br />
</code><br />
If you have more slaves in your cluster, add Host and User lines for those as well.</p>
<p>On each slave, create a file called config and add the following lines (replacing &#8220;&lt;masterusername&gt;&#8221; with the username you&#8217;re using on the Master machine:<br />
<code><br />
Host master<br />
User &lt;masterusername&gt;<br />
</code></p>
<p>Now test this out. On the master, go to cygwin and issue the following command:</p>
<p><code>$&gt; ssh slave</code></p>
<p>You should be automatically logged into the slave machine with no username and no password required. Make sure to exit out of your ssh session.</p>
<p>For more information on this configuration file&#8217;s format and what it does, go <a onclick="pageTracker._trackPageview('/outgoing/www.hmug.org/man/5/ssh_config.php?referer=');pageTracker._trackPageview('/outgoing/www.hmug.org/man/5/ssh_config.php?referer=http://hayesdavis.net/blog/wp-admin/edit.php');pageTracker._trackPageview('/outgoing/www.hmug.org/man/5/ssh_config.php?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/www.hmug.org/man/5/ssh_config.php?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/www.hmug.org/man/5/ssh_config.php?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/www.hmug.org/man/5/ssh_config.php?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/www.hmug.org/man/5/ssh_config.php?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/www.hmug.org/man/5/ssh_config.php?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/www.hmug.org/man/5/ssh_config.php?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/www.hmug.org/man/5/ssh_config.php?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/www.hmug.org/man/5/ssh_config.php?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');" href="http://www.hmug.org/man/5/ssh_config.php">here</a> or run <code>man ssh_config</code> in cygwin.</p>
<h3>Step 4: Extract Hadoop (All Machines)</h3>
<p>If you haven&#8217;t downloaded Hadoop 0.17, go do that now. The file will have a &#8220;.tar.gz&#8221; extension which is not natively understood by Windows. You&#8217;ll need something like WinRAR to extract it. (If anyone knows something easier than WinRAR for extracting tarred-gzipped files on Windows, please leave a comment.)</p>
<p>Once you&#8217;ve got an extraction utility, extract it directly into c:\cygwin\usr\local. (Assuming you installed Cygwin to c:\cygwin as described above.)</p>
<p>The extracted folder will be named hadoop-0.17.0. Rename it to hadoop. <strong>All further steps assume you&#8217;re in this hadoop directory and will use relative paths for configuration files and shell scripts.</strong></p>
<h3>Step 5: Configure hadoop-env.sh (All Machines)</h3>
<p>The conf/hadoop-env.sh file is a shell script that sets up various environment variables that Hadoop needs to run. Open conf/hadoop-env.sh in a text editor. Look for the line that starts with &#8220;#export JAVA_HOME&#8221;. Change that line to something like the following:</p>
<p>export JAVA_HOME=c:\\Program\ Files\\Java\\jdk1.6.0_06</p>
<p>This should be the home directory of your Java installation. Note that you need to remove the leading &#8220;#&#8221; (comment) symbol and that you need to escape both backslashes and spaces with a backslash.</p>
<p>Next, locate the line that starts with &#8220;#export HADOOP_IDENT_STRING&#8221;. Change it to something like the following:</p>
<p>export HADOOP_IDENT_STRING=MYHADOOP</p>
<p>Where MYHADOOP can be anything you want to identify your Hadoop cluster with. Just make sure each machine in your cluster uses the same value.</p>
<p>To test these changes issue the following commands in cygwin:<br />
<code><br />
$&gt; cd /usr/local/hadoop<br />
$&gt; bin/hadoop version<br />
</code><br />
You should see output similar to this:</p>
<p><code>Hadoop 0.17.0<br />
Subversion http://svn.apache.org/repos/asf/hadoop/core/branches/branch-0.17 -r 656523<br />
Compiled by hadoopqa on Thu May 15 07:22:55 UTC 2008</code></p>
<p>If you see output like this:</p>
<p><code>bin/hadoop: line 166: c:\Program Files\Java\jdk1.6.0_05/bin/java: No such file or directory<br />
bin/hadoop: line 251: c:\Program Files\Java\jdk1.6.0_05/bin/java: No such file or directory<br />
bin/hadoop: line 251: exec: c:\Program Files\Java\jdk1.6.0_05/bin/java: cannot execute: No such file or directory</code></p>
<p>This means that your Java home directory is wrong. Go back and make sure you specified the correct directory and used the appropriate escaping.</p>
<h3>Step 6: Configure hadoop-site.xml (All Machines)</h3>
<p>The conf/hadoop-site.xml file is basically a properties file that lets you configure all sorts of HDFS and MapReduce parameters on a per-machine basis. I&#8217;m not going to go into detail here about what each property does, but there are 3 that you need to configure on all machines: <code>fs.default.name</code>, <code>mapred.job.tracker</code> and <code>dfs.replication</code>. You can just copy the XML below into your conf/hadoop-site.xml file.</p>
<p>&lt;?xml version=&#8221;1.0&#8243;?&gt;<br />
&lt;?xml-stylesheet type=&#8221;text/xsl&#8221; href=&#8221;configuration.xsl&#8221;?&gt;<br />
&lt;!&#8211; Put site-specific property overrides in this file. &#8211;&gt;<br />
&lt;configuration&gt;<br />
&lt;property&gt;<br />
&lt;name&gt;fs.default.name&lt;/name&gt;<br />
&lt;value&gt;hdfs://master:47110&lt;/value&gt;<br />
&lt;/property&gt;<br />
&lt;property&gt;<br />
&lt;name&gt;mapred.job.tracker&lt;/name&gt;<br />
&lt;value&gt;master:47111&lt;/value&gt;<br />
&lt;/property&gt;<br />
&lt;property&gt;<br />
&lt;name&gt;dfs.replication&lt;/name&gt;<br />
&lt;value&gt;2&lt;/value&gt;<br />
&lt;/property&gt;<br />
&lt;/configuration&gt;</p>
<p>For more information about what these configuration properties (and others) do, see the <a onclick="pageTracker._trackPageview('/outgoing/hadoop.apache.org/core/docs/current/cluster_setup.html?referer=');pageTracker._trackPageview('/outgoing/hadoop.apache.org/core/docs/current/cluster_setup.html?referer=http://hayesdavis.net/blog/wp-admin/edit.php');pageTracker._trackPageview('/outgoing/hadoop.apache.org/core/docs/current/cluster_setup.html?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/hadoop.apache.org/core/docs/current/cluster_setup.html?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/hadoop.apache.org/core/docs/current/cluster_setup.html?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/hadoop.apache.org/core/docs/current/cluster_setup.html?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/hadoop.apache.org/core/docs/current/cluster_setup.html?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/hadoop.apache.org/core/docs/current/cluster_setup.html?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/hadoop.apache.org/core/docs/current/cluster_setup.html?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/hadoop.apache.org/core/docs/current/cluster_setup.html?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/hadoop.apache.org/core/docs/current/cluster_setup.html?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/hadoop.apache.org/core/docs/current/cluster_setup.html?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20');pageTracker._trackPageview('/outgoing/hadoop.apache.org/core/docs/current/cluster_setup.html?referer=http://hayesdavis.net/blog/wp-admin/edit.php?paged=2');pageTracker._trackPageview('/outgoing/hadoop.apache.org/core/docs/current/cluster_setup.html?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20');pageTracker._trackPageview('/outgoing/hadoop.apache.org/core/docs/current/cluster_setup.html?referer=http://hayesdavis.net/blog/wp-admin/edit.php?post_status=draft');pageTracker._trackPageview('/outgoing/hadoop.apache.org/core/docs/current/cluster_setup.html?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/hadoop.apache.org/core/docs/current/cluster_setup.html?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/hadoop.apache.org/core/docs/current/cluster_setup.html?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/hadoop.apache.org/core/docs/current/cluster_setup.html?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/hadoop.apache.org/core/docs/current/cluster_setup.html?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/hadoop.apache.org/core/docs/current/cluster_setup.html?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');" href="http://hadoop.apache.org/core/docs/current/cluster_setup.html">Hadoop cluster setup docs</a> and the <a onclick="pageTracker._trackPageview('/outgoing/hadoop.apache.org/core/docs/current/hadoop-default.html?referer=');pageTracker._trackPageview('/outgoing/hadoop.apache.org/core/docs/current/hadoop-default.html?referer=http://hayesdavis.net/blog/wp-admin/edit.php');pageTracker._trackPageview('/outgoing/hadoop.apache.org/core/docs/current/hadoop-default.html?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/hadoop.apache.org/core/docs/current/hadoop-default.html?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/hadoop.apache.org/core/docs/current/hadoop-default.html?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/hadoop.apache.org/core/docs/current/hadoop-default.html?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/hadoop.apache.org/core/docs/current/hadoop-default.html?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/hadoop.apache.org/core/docs/current/hadoop-default.html?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/hadoop.apache.org/core/docs/current/hadoop-default.html?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/hadoop.apache.org/core/docs/current/hadoop-default.html?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/hadoop.apache.org/core/docs/current/hadoop-default.html?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/hadoop.apache.org/core/docs/current/hadoop-default.html?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20');pageTracker._trackPageview('/outgoing/hadoop.apache.org/core/docs/current/hadoop-default.html?referer=http://hayesdavis.net/blog/wp-admin/edit.php?paged=2');pageTracker._trackPageview('/outgoing/hadoop.apache.org/core/docs/current/hadoop-default.html?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20');pageTracker._trackPageview('/outgoing/hadoop.apache.org/core/docs/current/hadoop-default.html?referer=http://hayesdavis.net/blog/wp-admin/edit.php?post_status=draft');pageTracker._trackPageview('/outgoing/hadoop.apache.org/core/docs/current/hadoop-default.html?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/hadoop.apache.org/core/docs/current/hadoop-default.html?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/hadoop.apache.org/core/docs/current/hadoop-default.html?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/hadoop.apache.org/core/docs/current/hadoop-default.html?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/hadoop.apache.org/core/docs/current/hadoop-default.html?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/hadoop.apache.org/core/docs/current/hadoop-default.html?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');" href="http://hadoop.apache.org/core/docs/current/hadoop-default.html">hadoop-default.xml documentation</a>.</p>
<h3>Step 7: Configure slaves file (Master only)</h3>
<p>The conf/slaves file tells the master where it can find slaves to do work. Open yours in a text editor. It will probably have one line which says &#8220;localhost&#8221;. Replace that with the following:<br />
<code><br />
master<br />
slave</code></p>
<h3>Step 8: Firewall Configuration (All Machines)</h3>
<p>If you&#8217;re using Windows Firewall, you will need to ensure that the appropriate ports are open so that the slaves can make HTTP requests for information from the master. (This is different from the port 22 needed for SSH.) The list of ports for which you should make exceptions are as follows: 47110, 47111, 50010, 50030, 50060, 50070, 50075, 50090. These should all be open <strong>on the master</strong> for request coming from your local network. For more information about these ports, see the <a onclick="pageTracker._trackPageview('/outgoing/hadoop.apache.org/core/docs/current/hadoop-default.html?referer=');pageTracker._trackPageview('/outgoing/hadoop.apache.org/core/docs/current/hadoop-default.html?referer=http://hayesdavis.net/blog/wp-admin/edit.php');pageTracker._trackPageview('/outgoing/hadoop.apache.org/core/docs/current/hadoop-default.html?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');" href="http://hadoop.apache.org/core/docs/current/hadoop-default.html">Hadoop default configuration file documentation</a>.</p>
<p>You should also make sure that Java applications are allowed by the firewall to connect to the network on all your machines including the slaves.</p>
<h3>Step 9: Starting your cluster (Master Only)</h3>
<p>To start your cluster, make sure you&#8217;re in cygwin on the master and have changed to your hadoop installation directory. To fully start your cluster, you&#8217;ll need to start DFS first and then MapReduce.</p>
<h4>Starting DFS</h4>
<p>Issue the following command:</p>
<p><code>$&gt; bin/start-dfs.sh</code></p>
<p>You should see output somewhat like the following (note that I have 2 slaves in my cluster which has a cluster ID of Appozite, your mileage will vary somewhat):<br />
<code><br />
starting namenode, logging to /usr/local/hadoop/bin/../logs/hadoop-Appozite-namenode-calculon.out<br />
master: starting datanode, logging to /usr/local/hadoop/bin/../logs/hadoop-Appozite-datanode-calculon.out<br />
slave: starting datanode, logging to /usr/local/hadoop/bin/../logs/hadoop-Appozite-datanode-hayes-daviss-macbo<br />
ok-pro.local.out<br />
slave2: starting datanode, logging to /usr/local/hadoop/bin/../logs/hadoop-Appozite-datanode-XTRAPUFFYJR.out<br />
master: starting secondarynamenode, logging to /usr/local/hadoop/bin/../logs/hadoop-Appozite-secondarynamenode<br />
-calculon.out<br />
</code><br />
To see if your distributed file system is actually running across multiple machines, you can open the Hadoop DFS web interface which will be running on your master on port 50070. You can probably open it by clicking this link: <a onclick="pageTracker._trackPageview('/outgoing/localhost_50070?referer=');pageTracker._trackPageview('/outgoing/localhost_50070?referer=http://hayesdavis.net/blog/wp-admin/edit.php');pageTracker._trackPageview('/outgoing/localhost_50070?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/localhost_50070?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/localhost_50070?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/localhost_50070?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');" href="http://localhost:50070">http://localhost:50070</a>. Below is a screenshot of my cluster. As you can see, there are 3 nodes with a total of 712.27 GB of space. (Click the image to see the larger version.)</p>
<p><a href="http://hayesdavis.net/wp-content/uploads/2008/06/dfs-web.png"><img class="aligncenter size-medium wp-image-22" title="Hadoop DFS Web Interface" src="http://hayesdavis.net/wp-content/uploads/2008/06/dfs-web-300x282.png" alt="" width="300" height="282" /></a></p>
<h4>Starting MapReduce</h4>
<p>To start the MapReduce part of Hadoop, issue the following command:</p>
<p><code>$&gt; bin/start-mapred.sh</code></p>
<p>You should see output similar to the following (again noting that I&#8217;ve got 3 nodes in my cluster):</p>
<p><code>starting jobtracker, logging to /usr/local/hadoop/bin/../logs/hadoop-Appozite-jobtracker-calculon.out<br />
master: starting tasktracker, logging to /usr/local/hadoop/bin/../logs/hadoop-Appozite-tasktracker-calculon.ou<br />
t<br />
slave: starting tasktracker, logging to /usr/local/hadoop/bin/../logs/hadoop-Appozite-tasktracker-hayes-daviss<br />
-macbook-pro.local.out<br />
slave2: starting tasktracker, logging to /usr/local/hadoop/bin/../logs/hadoop-Appozite-tasktracker-XTRAPUFFYJR<br />
.out</code></p>
<p>You can view your MapReduce setup using the MapReduce monitoring web app that comes with Hadoop which runs on port 50030 of your master node. You can probably open it by clicking this like: <a onclick="pageTracker._trackPageview('/outgoing/localhost_50030?referer=');pageTracker._trackPageview('/outgoing/localhost_50030?referer=http://hayesdavis.net/blog/wp-admin/edit.php');pageTracker._trackPageview('/outgoing/localhost_50030?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/localhost_50030?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/localhost_50030?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');" href="http://localhost:50030">http://localhost:50030</a>. Below is a screenshot from my browser. There&#8217;s not much exciting to see here until you have an actual MapReduce job running.</p>
<p><a href="http://hayesdavis.net/wp-content/uploads/2008/06/mapred-web.png"><img class="aligncenter size-medium wp-image-23" title="Hadoop MapReduce Admin" src="http://hayesdavis.net/wp-content/uploads/2008/06/mapred-web-290x300.png" alt="" width="290" height="300" /></a></p>
<h3>Testing it out</h3>
<p>Now that you&#8217;ve got your Hadoop cluster up and running, executing MapReduce jobs or writing to and reading from DFS are no different on Windows than any other platform so long as you use cygwin to execute commands. At this point, I&#8217;ll refer you to Michael Noll&#8217;s Hadoop on Ubuntu Linux tutorial for an <a onclick="pageTracker._trackPageview('/outgoing/www.michael-noll.com/wiki/Running_Hadoop_On_Ubuntu_Linux_28Multi-Node_Cluster_29_Running_a_MapReduce_job?referer=');pageTracker._trackPageview('/outgoing/www.michael-noll.com/wiki/Running_Hadoop_On_Ubuntu_Linux_28Multi-Node_Cluster_29_Running_a_MapReduce_job?referer=http://hayesdavis.net/blog/wp-admin/edit.php');pageTracker._trackPageview('/outgoing/www.michael-noll.com/wiki/Running_Hadoop_On_Ubuntu_Linux_28Multi-Node_Cluster_29_Running_a_MapReduce_job?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/www.michael-noll.com/wiki/Running_Hadoop_On_Ubuntu_Linux_28Multi-Node_Cluster_29_Running_a_MapReduce_job?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');" href="http://www.michael-noll.com/wiki/Running_Hadoop_On_Ubuntu_Linux_%28Multi-Node_Cluster%29#Running_a_MapReduce_job">explanation on how to run a large enough MapReduce job to take advantage of your cluster</a>. (Note that he&#8217;s using Hadoop 0.16.0 instead of 0.17.0, so you&#8217;ll replace &#8220;0.16.0&#8243; with &#8220;0.17.0&#8243; where applicable.) Follow his instructions and you should be good to go. The Hadoop site also offers a <a onclick="pageTracker._trackPageview('/outgoing/hadoop.apache.org/core/docs/r0.17.0/mapred_tutorial.html?referer=');pageTracker._trackPageview('/outgoing/hadoop.apache.org/core/docs/r0.17.0/mapred_tutorial.html?referer=http://hayesdavis.net/blog/wp-admin/edit.php');pageTracker._trackPageview('/outgoing/hadoop.apache.org/core/docs/r0.17.0/mapred_tutorial.html?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/hadoop.apache.org/core/docs/r0.17.0/mapred_tutorial.html?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');" href="http://hadoop.apache.org/core/docs/r0.17.0/mapred_tutorial.html">MapReduce tutorial</a> to you can get started writing your own jobs in Java. If you&#8217;re interested in writing MapReduce jobs in other languages that take advantage of Hadoop, check out the <a onclick="pageTracker._trackPageview('/outgoing/hadoop.apache.org/core/docs/r0.17.0/streaming.html?referer=');pageTracker._trackPageview('/outgoing/hadoop.apache.org/core/docs/r0.17.0/streaming.html?referer=http://hayesdavis.net/blog/wp-admin/edit.php');pageTracker._trackPageview('/outgoing/hadoop.apache.org/core/docs/r0.17.0/streaming.html?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');pageTracker._trackPageview('/outgoing/hadoop.apache.org/core/docs/r0.17.0/streaming.html?referer=http://hayesdavis.net/blog/wp-admin/post.php?action=edit&amp;post=20&amp;message=4');" href="http://hadoop.apache.org/core/docs/r0.17.0/streaming.html">Hadoop Streaming documentation</a>.</p>
<h3>How to stop your cluster</h3>
<p>When you&#8217;re ready to stop your cluster, it&#8217;s simple. Just top MapReduce and then DFS.</p>
<p>To stop MapReduce, issue the following command on the master:</p>
<p><code>$&gt;bin/stop-mapred.sh</code></p>
<p>You should see output similar to the following:<br />
<code><br />
stopping jobtracker<br />
slave: stopping tasktracker<br />
master: stopping tasktracker<br />
slave2: stopping tasktracker<br />
</code></p>
<p>To stop DFS, issue the following command on the master:</p>
<p><code>$&gt; bin/stop-dfs.sh</code></p>
<p>You should see output similar to the following:</p>
<p><code>stopping namenode<br />
master: stopping datanode<br />
slave: stopping datanode<br />
slave2: stopping datanode<br />
master: stopping secondarynamenode</code></p>
<h3>And that&#8217;s it</h3>
<p>I hope this helps anyone out there trying to run Hadoop on Windows. If any of you have corrections, questions or suggestions please comment and let me know. Happy Hadooping!</p>
<p><strong>Update 6/18/2008:</strong> Fixed link to Hadoop Admin screenshot. Thanks to Robert Towne for pointing out the bad link.</p>
]]></content:encoded>
			<wfw:commentRss>http://hayesdavis.net/2008/06/14/running-hadoop-on-windows/feed/</wfw:commentRss>
		<slash:comments>26</slash:comments>
		</item>
		<item>
		<title>Surprisingly basic Rails performance tips &#8211; and the people that don&#8217;t love them</title>
		<link>http://hayesdavis.net/2008/05/25/surprisingly-basic-rails-performance-tips-and-the-people-that-dont-love-them/</link>
		<comments>http://hayesdavis.net/2008/05/25/surprisingly-basic-rails-performance-tips-and-the-people-that-dont-love-them/#comments</comments>
		<pubDate>Sun, 25 May 2008 14:44:10 +0000</pubDate>
		<dc:creator>Hayes</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[rails]]></category>
		<category><![CDATA[Ruby]]></category>

		<guid isPermaLink="false">http://hayesdavis.net/blog/?p=14</guid>
		<description><![CDATA[Antonio Cangiano offers up 10 Ruby on Rails Performance tips, some of which are really just good practice in any web application and aren&#8217;t specific to Rails. This includes gems like: don’t be afraid of using the cool features provided by your database, even if they are not directly supported by Rails and doing so [...]]]></description>
			<content:encoded><![CDATA[<p><a onclick="pageTracker._trackPageview('/outgoing/antoniocangiano.com?referer=');pageTracker._trackPageview('/outgoing/antoniocangiano.com?referer=http://hayesdavis.net/blog/wp-admin/edit.php?post_status=publish');" href="http://antoniocangiano.com">Antonio Cangiano</a> offers up <a onclick="pageTracker._trackPageview('/outgoing/antoniocangiano.com/2007/02/10/top-10-ruby-on-rails-performance-tips/?referer=');pageTracker._trackPageview('/outgoing/antoniocangiano.com/2007/02/10/top-10-ruby-on-rails-performance-tips/?referer=http://hayesdavis.net/blog/wp-admin/edit.php?post_status=publish');" href="http://antoniocangiano.com/2007/02/10/top-10-ruby-on-rails-performance-tips/">10 Ruby on Rails Performance</a> tips, some of which are really just good practice in any web application and aren&#8217;t specific to Rails. This includes gems like:</p>
<blockquote><p>don’t be afraid of using the cool features provided by your database, even if they are not directly supported by Rails and doing so means bypassing ActiveRecord. For example define stored procedures and functions, knowing that you can use them by communicating directly with the database through driver calls, rather than ActiveRecord high level method.</p></blockquote>
<p>And:</p>
<blockquote><p>Retrieve only the information that you need. A lot of execution time can be wasted by running selects for data that is not really needed.</p></blockquote>
<p>Shocking stuff!</p>
<p>What amazes me is the level of irritation evident in the comments from people decrying this as &#8220;premature optimization&#8221;. I agree that you shouldn&#8217;t completely reorganize your code to achieve some speculative performance increase before you really know what parts of your app are going to have issues. However, some things are just common sense. If I can pull back data from the database without doing <a onclick="pageTracker._trackPageview('/outgoing/en.wikipedia.org/wiki/Big_O_notation?referer=');pageTracker._trackPageview('/outgoing/en.wikipedia.org/wiki/Big_O_notation?referer=http://hayesdavis.net/blog/wp-admin/edit.php?post_status=publish');" href="http://en.wikipedia.org/wiki/Big_O_notation">O(n)</a> queries in a loop, I should do that. If I need to run a report with lots of aggregated data, I should probably consider computing that in the DB via a function or stored procedure. Bottom line, there are things that are guaranteed to cause you problems. Sitting around and smugly saying, &#8220;I don&#8217;t want to optimize prematurely here&#8221; is no excuse for writing dumb code.</p>
<p>(Link to the performance tips via the <a href="http://blog.fiveruns.com/2008/5/23/managing-ruby-on-rails-performance-deployment-monitoring" onclick="pageTracker._trackPageview('/outgoing/blog.fiveruns.com/2008/5/23/managing-ruby-on-rails-performance-deployment-monitoring?referer=');">FiveRuns Blog</a>)</p>
]]></content:encoded>
			<wfw:commentRss>http://hayesdavis.net/2008/05/25/surprisingly-basic-rails-performance-tips-and-the-people-that-dont-love-them/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

