You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@phoenix.apache.org by ra...@apache.org on 2014/12/28 00:30:11 UTC

svn commit: r1648128 - /phoenix/site/publish/phoenix_mr.html

Author: ravimagham
Date: Sat Dec 27 23:30:11 2014
New Revision: 1648128

URL: http://svn.apache.org/r1648128
Log:
phoenix_mr_1.changes

Added:
    phoenix/site/publish/phoenix_mr.html

Added: phoenix/site/publish/phoenix_mr.html
URL: http://svn.apache.org/viewvc/phoenix/site/publish/phoenix_mr.html?rev=1648128&view=auto
==============================================================================
--- phoenix/site/publish/phoenix_mr.html (added)
+++ phoenix/site/publish/phoenix_mr.html Sat Dec 27 23:30:11 2014
@@ -0,0 +1,487 @@
+
+<!DOCTYPE html>
+<!--
+ Generated by Apache Maven Doxia at 2014-12-27
+ Rendered using Reflow Maven Skin 1.1.0 (http://andriusvelykis.github.io/reflow-maven-skin)
+-->
+<html  xml:lang="en" lang="en">
+
+	<head>
+		<meta charset="UTF-8" />
+		<title>Phoenix Map Reduce | Apache Phoenix</title>
+		<meta name="viewport" content="width=device-width, initial-scale=1.0" />
+		<meta name="description" content="" />
+		<meta http-equiv="content-language" content="en" />
+
+		<link href="http://netdna.bootstrapcdn.com/bootswatch/2.3.2/flatly/bootstrap.min.css" rel="stylesheet" />
+		<link href="http://netdna.bootstrapcdn.com/twitter-bootstrap/2.3.1/css/bootstrap-responsive.min.css" rel="stylesheet" />
+		<link href="./css/bootswatch.css" rel="stylesheet" />
+		<link href="./css/reflow-skin.css" rel="stylesheet" />
+
+		<link href="http://yandex.st/highlightjs/7.5/styles/default.min.css" rel="stylesheet" />
+		
+		<link href="./css/lightbox.css" rel="stylesheet" />
+		
+		<link href="./css/site.css" rel="stylesheet" />
+		<link href="./css/print.css" rel="stylesheet" media="print" />
+		
+		<!-- Le HTML5 shim, for IE6-8 support of HTML5 elements -->
+		<!--[if lt IE 9]>
+			<script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script>
+		<![endif]-->
+
+
+
+	</head>
+
+	<body class="page-phoenix_mr project-phoenix-site" data-spy="scroll" data-offset="60" data-target="#toc-scroll-target">
+
+		<div class="navbar navbar-fixed-top">
+			<div class="navbar-inner">
+				<div class="container">
+					<a class="btn btn-navbar" data-toggle="collapse" data-target="#top-nav-collapse">
+						<span class="icon-bar"></span>
+						<span class="icon-bar"></span>
+						<span class="icon-bar"></span>
+					</a>
+					<a class="brand" href="index.html"><div class="xtoplogo"></div></a>
+					<div class="nav-collapse collapse" id="top-nav-collapse">
+						<ul class="nav pull-right">
+							<li class="dropdown">
+								<a href="#" class="dropdown-toggle" data-toggle="dropdown">About <b class="caret"></b></a>
+								<ul class="dropdown-menu">
+									<li ><a href="index.html" title="Overview">Overview</a></li>
+									<li ><a href="recent.html" title="New Features">New Features</a></li>
+									<li ><a href="roadmap.html" title="Roadmap">Roadmap</a></li>
+									<li ><a href="performance.html" title="Performance">Performance</a></li>
+									<li ><a href="team.html" title="Team">Team</a></li>
+									<li ><a href="contributing.html" title="Contributing">Contributing</a></li>
+									<li ><a href="resources.html" title="Resources">Resources</a></li>
+									<li ><a href="mailing_list.html" title="Mailing Lists">Mailing Lists</a></li>
+									<li ><a href="source.html" title="Source Repository">Source Repository</a></li>
+									<li ><a href="issues.html" title="Issue Tracking">Issue Tracking</a></li>
+									<li ><a href="download.html" title="Download">Download</a></li>
+									<li class="divider"/>
+									<li ><a href="release.html" title="How to release">How to release</a></li>
+									<li ><a href="building_website.html" title="How to update website">How to update website</a></li>
+									<li class="divider"/>
+									<li ><a href="http://www.apache.org/licenses/" title="License" class="externalLink">License</a></li>
+									<li ><a href="http://www.apache.org/foundation/sponsorship.html" title="Sponsorship" class="externalLink">Sponsorship</a></li>
+									<li ><a href="http://www.apache.org/foundation/thanks.html" title="Thanks" class="externalLink">Thanks</a></li>
+									<li ><a href="http://www.apache.org/security/" title="Security" class="externalLink">Security</a></li>
+								</ul>
+							</li>
+							<li class="dropdown">
+								<a href="#" class="dropdown-toggle" data-toggle="dropdown">Using <b class="caret"></b></a>
+								<ul class="dropdown-menu">
+									<li ><a href="faq.html" title="F.A.Q.">F.A.Q.</a></li>
+									<li ><a href="Phoenix-in-15-minutes-or-less.html" title="Quick Start">Quick Start</a></li>
+									<li ><a href="building.html" title="Building">Building</a></li>
+									<li ><a href="tuning.html" title="Tuning">Tuning</a></li>
+									<li ><a href="upgrading.html" title="Upgrading">Upgrading</a></li>
+									<li class="divider"/>
+									<li ><a href="secondary_indexing.html" title="Secondary Indexes">Secondary Indexes</a></li>
+									<li ><a href="joins.html" title="Joins">Joins</a></li>
+									<li ><a href="subqueries.html" title="Subqueries">Subqueries</a></li>
+									<li ><a href="views.html" title="Views">Views</a></li>
+									<li ><a href="multi-tenancy.html" title="Multi tenancy">Multi tenancy</a></li>
+									<li ><a href="sequences.html" title="Sequences">Sequences</a></li>
+									<li ><a href="array_type.html" title="ARRAY type">ARRAY type</a></li>
+									<li ><a href="salted.html" title="Salted Tables">Salted Tables</a></li>
+									<li ><a href="paged.html" title="Paged Queries">Paged Queries</a></li>
+									<li ><a href="dynamic_columns.html" title="Dynamic Columns">Dynamic Columns</a></li>
+									<li ><a href="skip_scan.html" title="Skip Scan">Skip Scan</a></li>
+									<li ><a href="bulk_dataload.html" title="Bulk Loading">Bulk Loading</a></li>
+									<li ><a href="tracing.html" title="Tracing">Tracing</a></li>
+									<li ><a href="update_statistics.html" title="Statistics Collection">Statistics Collection</a></li>
+									<li class="divider"/>
+									<li ><a href="phoenix_on_emr.html" title="Amazon EMR Support">Amazon EMR Support</a></li>
+									<li ><a href="flume.html" title="Apache Flume Plugin">Apache Flume Plugin</a></li>
+									<li ><a href="pig_integration.html" title="Apache Pig Integration">Apache Pig Integration</a></li>
+									<li class="active"><a href="" title="Map Reduce Integration">Map Reduce Integration</a></li>
+								</ul>
+							</li>
+							<li class="dropdown">
+								<a href="#" class="dropdown-toggle" data-toggle="dropdown">Reference <b class="caret"></b></a>
+								<ul class="dropdown-menu">
+									<li ><a href="language/index.html" title="Grammar">Grammar</a></li>
+									<li ><a href="language/functions.html" title="Functions">Functions</a></li>
+									<li ><a href="language/datatypes.html" title="Datatypes">Datatypes</a></li>
+								</ul>
+							</li>
+						</ul>
+					</div><!--/.nav-collapse -->
+				</div>
+			</div>
+		</div>
+		
+	<div class="container">
+	
+	<!-- Masthead
+	================================================== -->
+
+	<header>
+	</header>
+
+	<div class="main-body">
+	<div class="row">
+		<div class="span12">
+			<div class="body-content">
+<div class="section"> 
+ <div class="page-header">
+  <h2 id="Phoenix_Map_Reduce">Phoenix Map Reduce</h2>
+ </div> 
+ <p>Phoenix provides support for retrieving and writing to Phoenix tables from within MapReduce jobs. The framework now provides custom <a class="externalLink" href="http://hadoop.apache.org/docs/current/api/org/apache/hadoop/mapreduce/InputFormat.html">InputFormat</a> and <a class="externalLink" href="http://hadoop.apache.org/docs/current/api/org/apache/hadoop/mapreduce/OutputFormat.html">OutputFormat</a> classes <a class="externalLink" href="https://github.com/apache/phoenix/blob/f84e5da33c21a728e73924c07506dd63e4621872/phoenix-core/src/main/java/org/apache/phoenix/mapreduce/PhoenixInputFormat.java">PhoenixInputFormat</a> , <a class="externalLink" href="https://github.com/apache/phoenix/blob/f84e5da33c21a728e73924c07506dd63e4621872/phoenix-core/src/main/java/org/apache/phoenix/mapreduce/PhoenixOutputFormat.java">PhoenixOutputFormat</a>. </p> 
+ <p><a class="externalLink" href="https://github.com/apache/phoenix/blob/f84e5da33c21a728e73924c07506dd63e4621872/phoenix-core/src/main/java/org/apache/phoenix/mapreduce/util/PhoenixMapReduceUtil.java" title="PhoenixMapReduceUtil">PhoenixMapReduceUtil</a> provides several utility methods to set the input and output configuration parameters to the job.</p> 
+ <p>When a Phoenix table is the source for the Map Reduce job, we can provide a SELECT query or pass a table name and specific columns to import data . To retrieve data from the table within the mapper class, we need to have a class that implements <a class="externalLink" href="http://hadoop.apache.org/docs/current/api/org/apache/hadoop/mapred/lib/db/DBWritable.html" title="DBWritable">DBWritable</a> and pass it as an argument to PhoenixMapReduceUtil.<b>setInput</b> method. The custom DBWritable class provides implementation for <a class="externalLink" href="http://hadoop.apache.org/docs/current/api/org/apache/hadoop/mapreduce/lib/db/DBWritable.html#readFields%28java.sql.ResultSet%29" title="readFields">readFields(ResultSet rs)</a> that allows us to retrieve columns for each row. This custom DBWritable class will form the input value to the mapper class. </p> 
+ <blockquote> 
+  <p>Note: The SELECT query must not perform any aggregation or use DISTINCT as these are not supported by our map-reduce integration.</p> 
+ </blockquote> 
+ <p>Similarly, when writing to a Phoenix table, we use the PhoenixMapReduceUtil.<b>setOutput</b> method to set the output table and the columns. </p> 
+ <blockquote> 
+  <p>Note: Phoenix internally builds the UPSERT query for you . </p> 
+ </blockquote> 
+ <p>The output key and value class for the job should always be NullWritable and the custom DBWritable class that implements the <a class="externalLink" href="http://hadoop.apache.org/docs/current/api/org/apache/hadoop/mapreduce/lib/db/DBWritable.html#write%28java.sql.PreparedStatement%29" title="write">write</a> method . </p> 
+ <p>Let’s dive into an example where we have a table, <b>STOCK</b> , that holds the master data of quarterly recordings in a double array for each year and we would like to find out the max price of each stock across all years. Let’s store the output to a <b>STOCK_STATS</b> table which is another Phoenix table. </p> 
+ <blockquote> 
+  <p>Note , you can definitely have a job configured to read from hdfs and load into a phoenix table. </p> 
+ </blockquote> 
+ <p>a) <i>stock</i> </p> 
+ <div class="source"> 
+  <pre> CREATE TABLE IF NOT EXISTS STOCK (STOCK_NAME VARCHAR NOT NULL ,RECORDING_YEAR INTEGER NOT  NULL, RECORDINGS_QUARTER DOUBLE array[] CONSTRAINT pk PRIMARY KEY (STOCK_NAME , RECORDING_YEAR));
+</pre> 
+ </div> 
+ <p>b) <i>stock_stats</i> </p> 
+ <div class="source"> 
+  <pre>CREATE TABLE IF NOT EXISTS STOCK_STATS (STOCK_NAME VARCHAR NOT NULL , MAX_RECORDING DOUBLE CONSTRAINT pk PRIMARY KEY (STOCK_NAME));
+</pre> 
+ </div> 
+ <p><i>Sample Data</i></p> 
+ <div class="source"> 
+  <pre>    UPSERT into STOCK values ('AAPL',2009,ARRAY[85.88,91.04,88.5,90.3]);
+    UPSERT into STOCK values ('AAPL',2008,ARRAY[199.27,200.26,192.55,194.84]);
+    UPSERT into STOCK values ('AAPL',2007,ARRAY[86.29,86.58,81.90,83.80]);
+    UPSERT into STOCK values ('CSCO',2009,ARRAY[16.41,17.00,16.25,16.96]);
+    UPSERT into STOCK values ('CSCO',2008,ARRAY[27.00,27.30,26.21,26.54]);
+    UPSERT into STOCK values ('CSCO',2007,ARRAY[27.46,27.98,27.33,27.73]);
+    UPSERT into STOCK values ('CSCO',2006,ARRAY[17.21,17.49,17.18,17.45]);
+    UPSERT into STOCK values ('GOOG',2009,ARRAY[308.60,321.82,305.50,321.32]);
+    UPSERT into STOCK values ('GOOG',2008,ARRAY[692.87,697.37,677.73,685.19]);
+    UPSERT into STOCK values ('GOOG',2007,ARRAY[466.00,476.66,461.11,467.59]);
+    UPSERT into STOCK values ('GOOG',2006,ARRAY[422.52,435.67,418.22,435.23]);
+    UPSERT into STOCK values ('MSFT',2009,ARRAY[19.53,20.40,19.37,20.33]);
+    UPSERT into STOCK values ('MSFT',2008,ARRAY[35.79,35.96,35.00,35.22]);
+    UPSERT into STOCK values ('MSFT',2007,ARRAY[29.91,30.25,29.40,29.86]);
+    UPSERT into STOCK values ('MSFT',2006,ARRAY[26.25,27.00,26.10,26.84]);
+    UPSERT into STOCK values ('YHOO',2009,ARRAY[12.17,12.85,12.12,12.85]);
+    UPSERT into STOCK values ('YHOO',2008,ARRAY[23.80,24.15,23.60,23.72]);
+    UPSERT into STOCK values ('YHOO',2007,ARRAY[25.85,26.26,25.26,25.61]);
+    UPSERT into STOCK values ('YHOO',2006,ARRAY[39.69,41.22,38.79,40.91]);
+</pre> 
+ </div> 
+ <div class="section"> 
+  <h3 id="Below_is_a_simple_job_configuration">Below is a simple job configuration</h3> 
+  <p><b><i>Job Configuration</i></b></p> 
+  <div class="source"> 
+   <pre> final Configuration configuration = HBaseConfiguration.create();
+
+ final Job job = Job.getInstance(configuration, &quot;phoenix-mr-job&quot;);
+
+  // We can either specify a selectQuery or ignore it when we would like to retrieve all columns from the table.
+  final String selectQuery = &quot;SELECT STOCK_NAME,RECORDING_YEAR,RECORDINGS_QUARTER FROM STOCK &quot;;
+
+  // StockWritable is the DBWritable class that enables us to process the Result of the above query.  
+</pre> 
+  </div> 
+  <p> PhoenixMapReduceUtil.setInput(job, StockWritable.class, “STOCK”, selectQuery); </p> 
+  <p> // Set the target Phoenix table and the columns. PhoenixMapReduceUtil.setOutput(job, “STOCK_STATS”, “STOCK_NAME,MAX_RECORDING”);</p> 
+  <p> // The input key should always be NullWritable and the value is the custom DBWritable class . job.setMapperClass(StockMapper.class); job.setReducerClass(StockReducer.class); job.setOutputFormatClass(PhoenixOutputFormat.class); job.setMapOutputKeyClass(Text.class); job.setMapOutputValueClass(DoubleWritable.class); job.setOutputKeyClass(NullWritable.class); job.setOutputValueClass(StockWritable.class); </p> 
+  <p> TableMapReduceUtil.addDependencyJars(job); job.waitForCompletion(true);</p> 
+  <p><b><i>StockWritable</i></b></p> 
+  <div class="source"> 
+   <pre>public class StockWritable implements DBWritable,Writable {
+
+    private String stockName;
+
+    private int year;
+
+    private double[] recordings;
+
+    private double maxPrice;   
+
+    @Override
+    public void readFields(DataInput input) throws IOException {
+
+    }
+
+    @Override
+    public void write(DataOutput output) throws IOException {
+
+    }
+
+    @Override
+    public void readFields(ResultSet rs) throws SQLException {
+       stockName = rs.getString(&quot;STOCK_NAME&quot;);
+       year = rs.getInt(&quot;RECORDING_YEAR&quot;);
+       final Array recordingsArray = rs.getArray(&quot;RECORDINGS_QUARTER&quot;);
+       recordings = (double[])recordingsArray.getArray();
+    }
+
+    @Override
+    public void write(PreparedStatement pstmt) throws SQLException {
+       pstmt.setString(1, stockName);
+       pstmt.setDouble(2, maxPrice); 
+    }
+
+    // getters / setters for the fields
+     ...
+     ...
+</pre> 
+  </div> 
+  <p><b><i>Stock Mapper</i></b></p> 
+  <div class="source"> 
+   <pre> public static class StockMapper extends Mapper&lt;NullWritable, StockWritable, Text , DoubleWritable&gt; {
+
+    private Text stock = new Text(); 
+    private DoubleWritable price = new DoubleWritable ();
+
+    @Override
+    protected void map(NullWritable key, StockWritable stockWritable, Context context) throws IOException, InterruptedException {
+       double[] recordings = stockWritable.getRecordings();
+       final String stockName = stockWritable.getStockName();
+       double maxPrice = Double.MIN_VALUE;
+</pre> 
+  </div> 
+  <p> for(double recording : recordings) { if(maxPrice &lt; recording) { maxPrice = recording; } } stock.set(stockName); price.set(maxPrice); context.write(stock,price); }</p> 
+  <div class="source"> 
+   <pre>}
+</pre> 
+  </div> 
+  <p><b><i>Stock Reducer</i></b></p> 
+  <div class="source"> 
+   <pre> public static class StockReducer extends Reducer&lt;Text, DoubleWritable, NullWritable , StockWritable&gt; {
+
+    @Override
+    protected void reduce(Text key, Iterable&lt;DoubleWritable&gt; recordings, Context context) throws IOException, InterruptedException {
+       double maxPrice = Double.MIN_VALUE;
+       for(DoubleWritable recording : recordings) {
+         if(maxPrice &lt; recording.get()) {
+          maxPrice = recording.get(); 
+         }
+       } 
+        final StockWritable stock = new StockWritable();
+        stock.setStockName(key.toString());
+       stock.setMaxPrice(maxPrice);
+        context.write(NullWritable.get(),stock);
+    }
+
+}
+</pre> 
+  </div> 
+  <p><b><i>Packaging &amp; Running</i></b></p> 
+  <ol style="list-style-type: decimal"> 
+   <li>Ensure phoenix-[version]-client.jar is in the classpath of your Map Reduce job jar.</li> 
+   <li>To run the job, use the <b>hadoop jar</b> command with the necessary arguments.</li> 
+  </ol> 
+ </div> 
+</div>
+			</div>
+		</div>
+	</div>
+	</div>
+
+	</div><!-- /container -->
+	
+	<!-- Footer
+	================================================== -->
+	<footer class="well">
+		<div class="container">
+			<div class="row">
+				<div class="span3 bottom-nav">
+					<ul class="nav nav-list">
+						<li class="nav-header">About</li>
+						<li >
+							<a href="index.html" title="Overview">Overview</a>
+						</li>
+						<li >
+							<a href="recent.html" title="New Features">New Features</a>
+						</li>
+						<li >
+							<a href="roadmap.html" title="Roadmap">Roadmap</a>
+						</li>
+						<li >
+							<a href="performance.html" title="Performance">Performance</a>
+						</li>
+						<li >
+							<a href="team.html" title="Team">Team</a>
+						</li>
+						<li >
+							<a href="contributing.html" title="Contributing">Contributing</a>
+						</li>
+						<li >
+							<a href="resources.html" title="Resources">Resources</a>
+						</li>
+						<li >
+							<a href="mailing_list.html" title="Mailing Lists">Mailing Lists</a>
+						</li>
+						<li >
+							<a href="source.html" title="Source Repository">Source Repository</a>
+						</li>
+						<li >
+							<a href="issues.html" title="Issue Tracking">Issue Tracking</a>
+						</li>
+						<li >
+							<a href="download.html" title="Download">Download</a>
+						</li>
+						<li >
+							<a href="http:divider" title=""></a>
+						</li>
+						<li >
+							<a href="release.html" title="How to release">How to release</a>
+						</li>
+						<li >
+							<a href="building_website.html" title="How to update website">How to update website</a>
+						</li>
+						<li >
+							<a href="http:divider" title=""></a>
+						</li>
+						<li >
+							<a href="http://www.apache.org/licenses/" title="License" class="externalLink">License</a>
+						</li>
+						<li >
+							<a href="http://www.apache.org/foundation/sponsorship.html" title="Sponsorship" class="externalLink">Sponsorship</a>
+						</li>
+						<li >
+							<a href="http://www.apache.org/foundation/thanks.html" title="Thanks" class="externalLink">Thanks</a>
+						</li>
+						<li >
+							<a href="http://www.apache.org/security/" title="Security" class="externalLink">Security</a>
+						</li>
+					</ul>
+				</div>
+				<div class="span3 bottom-nav">
+					<ul class="nav nav-list">
+						<li class="nav-header">Using</li>
+						<li >
+							<a href="faq.html" title="F.A.Q.">F.A.Q.</a>
+						</li>
+						<li >
+							<a href="Phoenix-in-15-minutes-or-less.html" title="Quick Start">Quick Start</a>
+						</li>
+						<li >
+							<a href="building.html" title="Building">Building</a>
+						</li>
+						<li >
+							<a href="tuning.html" title="Tuning">Tuning</a>
+						</li>
+						<li >
+							<a href="upgrading.html" title="Upgrading">Upgrading</a>
+						</li>
+						<li >
+							<a href="http:divider" title=""></a>
+						</li>
+						<li >
+							<a href="secondary_indexing.html" title="Secondary Indexes">Secondary Indexes</a>
+						</li>
+						<li >
+							<a href="joins.html" title="Joins">Joins</a>
+						</li>
+						<li >
+							<a href="subqueries.html" title="Subqueries">Subqueries</a>
+						</li>
+						<li >
+							<a href="views.html" title="Views">Views</a>
+						</li>
+						<li >
+							<a href="multi-tenancy.html" title="Multi tenancy">Multi tenancy</a>
+						</li>
+						<li >
+							<a href="sequences.html" title="Sequences">Sequences</a>
+						</li>
+						<li >
+							<a href="array_type.html" title="ARRAY type">ARRAY type</a>
+						</li>
+						<li >
+							<a href="salted.html" title="Salted Tables">Salted Tables</a>
+						</li>
+						<li >
+							<a href="paged.html" title="Paged Queries">Paged Queries</a>
+						</li>
+						<li >
+							<a href="dynamic_columns.html" title="Dynamic Columns">Dynamic Columns</a>
+						</li>
+						<li >
+							<a href="skip_scan.html" title="Skip Scan">Skip Scan</a>
+						</li>
+						<li >
+							<a href="bulk_dataload.html" title="Bulk Loading">Bulk Loading</a>
+						</li>
+						<li >
+							<a href="tracing.html" title="Tracing">Tracing</a>
+						</li>
+						<li >
+							<a href="update_statistics.html" title="Statistics Collection">Statistics Collection</a>
+						</li>
+						<li >
+							<a href="http:divider" title=""></a>
+						</li>
+						<li >
+							<a href="phoenix_on_emr.html" title="Amazon EMR Support">Amazon EMR Support</a>
+						</li>
+						<li >
+							<a href="flume.html" title="Apache Flume Plugin">Apache Flume Plugin</a>
+						</li>
+						<li >
+							<a href="pig_integration.html" title="Apache Pig Integration">Apache Pig Integration</a>
+						</li>
+						<li class="active">
+							<a href="#" title="Map Reduce Integration">Map Reduce Integration</a>
+						</li>
+					</ul>
+				</div>
+				<div class="span3 bottom-nav">
+					<ul class="nav nav-list">
+						<li class="nav-header">Reference</li>
+						<li >
+							<a href="language/index.html" title="Grammar">Grammar</a>
+						</li>
+						<li >
+							<a href="language/functions.html" title="Functions">Functions</a>
+						</li>
+						<li >
+							<a href="language/datatypes.html" title="Datatypes">Datatypes</a>
+						</li>
+					</ul>
+				</div>
+				<div class="span3 bottom-description">
+					<form action="http://search-hadoop.com/?" method="get"><input value="Phoenix" name="fc_project" type="hidden"><input placeholder="Search Phoenix&hellip;" required="required" style="width:170px;" size="18" name="q" id="query" type="search"></form>
+				</div>
+			</div>
+		</div>
+	</footer>
+		
+	<div class="container subfooter">
+		<div class="row">
+			<div class="span12">
+				<p class="pull-right"><a href="#">Back to top</a></p>
+				<p class="copyright">Copyright &copy;2014 <a href="http://www.apache.org">Apache Software Foundation</a>. All Rights Reserved.</p>
+			</div>
+		</div>
+	</div>
+
+	<!-- Le javascript
+	================================================== -->
+	<!-- Placed at the end of the document so the pages load faster -->
+	<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
+	
+	<script src="http://netdna.bootstrapcdn.com/twitter-bootstrap/2.3.2/js/bootstrap.min.js"></script>
+	<script src="./js/lightbox.js"></script>
+	<script src="./js/jquery.smooth-scroll.min.js"></script>
+	<!-- back button support for smooth scroll -->
+	<script src="./js/jquery.ba-bbq.min.js"></script>
+	<script src="http://yandex.st/highlightjs/7.5/highlight.min.js"></script>
+
+	<script src="./js/reflow-skin.js"></script>
+	
+	</body>
+</html>