blob: 109ad764a1bb2a19e0d74bf32e3cb3c5f21c2a4e [file] [log] [blame]
<?xml version="1.0" encoding="iso-8859-1"?>
<!--
Licensed to the Apache Software Foundation (ASF) under one or more
contributor license agreements. See the NOTICE file distributed with
this work for additional information regarding copyright ownership.
The ASF licenses this file to You under the Apache License, Version 2.0
(the "License"); you may not use this file except in compliance with
the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<document xmlns="http://maven.apache.org/XDOC/2.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/XDOC/2.0 http://maven.apache.org/xsd/xdoc-2.0.xsd">
<properties></properties>
<body>
<section name="Getting Started with Whirr&#153;"></section>
<p>The Whirr CLI provides the most convenient way to launch clusters. For the programmatic
interface, see the
<a href="apidocs/index.html">javadoc</a>.</p>
<p>Also see
<a href="whirr-in-5-minutes.html">Whirr in 5 Minutes</a> for the condensed instructions for
getting started (with ZooKeeper as the example).</p>
<h4>Pre-requisites</h4>
<ul>
<li>Java 6</li>
<li>An account with a cloud provider, such as Amazon EC2, or Rackspace Cloud Servers</li>
<li>An SSH client</li>
</ul>
<h4>Install Whirr</h4>
<p>
<a class="externalLink" href="http://www.apache.org/dyn/closer.cgi/whirr/">
Download</a> or
<a class="externalLink"
href="https://cwiki.apache.org/confluence/display/WHIRR/How+To+Contribute">build</a> Whirr.</p>
<p>You can test that Whirr is working by running:</p>
<source>% bin/whirr version</source>
<p>Which will display the version of Whirr that is installed.</p>
<p>To get usage instructions type:</p>
<source>% bin/whirr</source>
<h4>Setup your Credentials</h4>
<source>
% mkdir -p ~/.whirr
% cp conf/credentials.sample ~/.whirr/credentials
</source>
<p>Edit ~/.whirr/credentials using your editor of choice and add the API
connection credentials as required.</p>
<h4>Configure a Hadoop cluster</h4>
<p>First, create a properties file to define the cluster. The name doesn't matter, but here we
will assume it is called
<i>hadoop.properties</i> and located in your home directory. This file defines a cluster with a
single machine for the namenode and jobtracker, and a further machine for a datanode and
tasktracker. You can see how to launch other services by consulting the sample configurations
in the
<i>recipes</i> directory of the distribution.</p>
<source>
whirr.cluster-name=myhadoopcluster
whirr.instance-templates=1 hadoop-jobtracker+hadoop-namenode,1 hadoop-datanode+hadoop-tasktracker
whirr.provider=aws-ec2
whirr.private-key-file=${sys:user.home}/.ssh/id_rsa
whirr.public-key-file=${sys:user.home}/.ssh/id_rsa.pub
</source>
<p>Note that we haven't specified a particular cloud image, since Whirr provides a default for
each provider which should work well enough. However, for larger clusters you will likely use
larger hardware sizes or particular images. See the
<i>recipes</i> files and the
<a href="configuration-guide.html">Configuration Guide</a> for details.</p>
<p>In this configuration file the cloud identity and credential are read from environment
variables - you can equally well put them in the configuration file if you wish.</p>
<p>The
<tt>private-key-file</tt> and
<tt>public-key-file</tt> properties specify an SSH keypair. You can generate a keypair with:</p>
<source>% ssh-keygen -t rsa -P ''</source>
<p>You should use only RSA SSH keys, since DSA keys are not accepted yet.</p>
<p>
<b>Note</b>: the keypair specified by these properties is not the same as the AWS keypair
generated with the
<tt>ec2-add-keypair</tt> command or the AWS Management Console (since these don't place
<i>both</i> of the keys on your local machine). The PEM-encoded X.509 Certificate and Private
Key (e.g. pk-XXXXXX.pem) cannot be used as a keypair either.</p>
<h4>Launch a Hadoop cluster</h4>
<p>Run the following command to launch a cluster:</p>
<source>% bin/whirr launch-cluster --config hadoop.properties</source>
<p>Messages will be logged to the console as the cluster starts. You can see debug-level
logging in a file named
<i>whirr.log</i> in the directory you ran the
<i>whirr</i> command from.</p>
<p>A message will be printed out when the cluster has started, with a URL that you can use to
access the web UI.</p>
<h4>Run a proxy</h4>
<p>For security reasons, traffic from the network your client is running on is proxied through
the master node of the cluster using an SSH tunnel (a SOCKS proxy on port 6666).</p>
<p>A script to launch the proxy is created when you launch the cluster, and may be found in
<i>~/.whirr/&lt;cluster-name&gt;</i>. Run it as a follows (in a new terminal window):</p>
<source>% . ~/.whirr/myhadoopcluster/hadoop-proxy.sh</source>
<p>To stop the proxy, just kill the process with Ctrl-C.</p>
<p>Web browsers need to be configured to use this proxy too, so you can view pages served by
worker nodes in the cluster. The most convenient way to do this is to use a
<a class="externalLink" href="http://en.wikipedia.org/wiki/Proxy_auto-config">proxy auto-config
(PAC) file</a> file, such as
<a class="externalLink" href="https://svn.apache.org/repos/asf/whirr/trunk/resources/hadoop-ec2-proxy.pac">this
one</a> for Hadoop EC2 clusters.</p>
<p>If you are using Firefox, then you may find
<a class="externalLink" href="http://foxyproxy.mozdev.org/">FoxyProxy</a> useful for managing
PAC files.</p>
<h4>Run a MapReduce job</h4>
<p>After you launch a cluster, a
<i>hadoop-site.xml</i> file is created in the directory
<i>~/.whirr/&lt;cluster-name&gt;</i>. You can use this to connect to the cluster by setting the
<tt>HADOOP_CONF_DIR</tt> environment variable. (It is also possible to set the configuration
file to use by passing it as a
<tt>-conf</tt> option to Hadoop Tools):</p>
<source>% export HADOOP_CONF_DIR=~/.whirr/myhadoopcluster</source>
<p>You should now be able to browse HDFS:</p>
<source>% hadoop fs -ls /</source>
<p>Note that the version of Hadoop installed locally should match the version installed on the
cluster. You should also make sure that the
<tt>HADOOP_HOME</tt> environment variable is set.</p>
<p>Here's how you can run a MapReduce job:</p>
<source>
hadoop fs -mkdir input
hadoop fs -put $HADOOP_HOME/LICENSE.txt input
hadoop jar $HADOOP_HOME/hadoop-*examples*.jar wordcount input output
hadoop fs -cat output/part-* | head
</source>
<h4>Configuration</h4>
<p>Whirr is configured using a properties file, and optionally using command line arguments
when using the CLI. Command line arguments take precedence over properties specified in a
properties file.</p>
<p>For example, instead of using the properties file above, you could launch a Hadoop cluster
with the following command line (note that the
<tt>whirr.</tt> prefix for properties is not reflected in the command line argument):</p>
<source>
% bin/whirr launch-cluster \
--cluster-name=myhadoopcluster \
--instance-templates='1 hadoop-jobtracker+hadoop-namenode,1 hadoop-datanode+hadoop-tasktracker' \
--provider=aws-ec2 \
--identity=$AWS_ACCESS_KEY_ID \
--credential=$AWS_SECRET_ACCESS_KEY \
--private-key-file=~/.ssh/id_rsa \
--public-key-file=~/.ssh/id_rsa.pub
</source>
<p>Notice that here we took advantage of the fact that the AWS credentials have been defined in
environment variables.</p>
<p>See the
<a href="configuration-guide.html">configuration guide</a> for a list of all the configuration
properties you can set.</p>
<h4>Destroy a cluster</h4>
<p>When you've finished using a cluster you can terminate the instances and clean up resources
with the following.</p>
<p>
<b>WARNING: All data will be deleted when you destroy the cluster.</b>
</p>
<source>% bin/whirr destroy-cluster --config hadoop.properties</source>
<p>At this point you shut down the SSH proxy to the cluster if you started one earlier.</p>
</body>
</document>