You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@datafu.apache.org by mh...@apache.org on 2015/10/21 19:00:40 UTC

svn commit: r1709884 [6/8] - in /incubator/datafu/site: ./ blog/ blog/2012/01/10/ blog/2013/01/24/ blog/2013/09/04/ blog/2013/10/03/ blog/2014/04/27/ community/ docs/ docs/datafu/ docs/datafu/guide/ docs/hourglass/ javascripts/ stylesheets/

Modified: incubator/datafu/site/docs/datafu/javadoc.html
URL: http://svn.apache.org/viewvc/incubator/datafu/site/docs/datafu/javadoc.html?rev=1709884&r1=1709883&r2=1709884&view=diff
==============================================================================
--- incubator/datafu/site/docs/datafu/javadoc.html (original)
+++ incubator/datafu/site/docs/datafu/javadoc.html Wed Oct 21 17:00:40 2015
@@ -1,3 +1,5 @@
+
+
 <!doctype html>
 <html>
   <head>
@@ -10,11 +12,9 @@
     <!-- Use title if it's in the page YAML frontmatter -->
     <title>Javadoc - Apache DataFu Pig</title>
     
-    <link href="/stylesheets/all.css" media="screen" rel="stylesheet" type="text/css" />
-<link href="/stylesheets/highlight.css" media="screen" rel="stylesheet" type="text/css" />
-    <script src="/javascripts/all.js" type="text/javascript"></script>
+    <link href="/stylesheets/all.css" rel="stylesheet" /><link href="/stylesheets/highlight.css" rel="stylesheet" />
+    <script src="/javascripts/all.js"></script>
 
-    
     <script type="text/javascript">
       var _gaq = _gaq || [];
       _gaq.push(['_setAccount', 'UA-30533336-2']);
@@ -26,14 +26,14 @@
         var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
       })();
     </script>
-    
   </head>
   
   <body class="docs docs_datafu docs_datafu_javadoc">
 
     <div class="container">
 
-      <div class="header">
+      
+<div class="header">
 
   <ul class="nav nav-pills pull-right">
     <li><a href="/">Home</a></li>
@@ -48,12 +48,18 @@
       
   <div class="row">
     <div class="col-md-3">
-      <h4>Apache DataFu Pig</h4>
+      
+<h4>Apache DataFu</h4>
+<ul class="nav nav-pills nav-stacked">
+  <li><a href="/">Home</a></li>
+  <li><a href="/docs/quick-start.html">Quick Start</a></li>
+</ul>
+
+<h4>Apache DataFu Pig</h4>
 <ul class="nav nav-pills nav-stacked">
   <li><a href="/docs/datafu/getting-started.html">Getting Started</a></li>
   <li><a href="/docs/datafu/guide.html">Guide</a></li>
   <li><a href="/docs/datafu/javadoc.html">Javadoc</a></li>
-  <li><a href="/docs/datafu/contributing.html">Contributing</a></li>
 </ul>
 
 <h4>Apache DataFu Hourglass</h4>
@@ -61,20 +67,20 @@
   <li><a href="/docs/hourglass/getting-started.html">Getting Started</a></li>
   <li><a href="/docs/hourglass/concepts.html">Concepts</a></li>
   <li><a href="/docs/hourglass/javadoc.html">Javadoc</a></li>
-  <li><a href="/docs/hourglass/contributing.html">Contributing</a></li>
 </ul>
 
 <h4>Community</h4>
 <ul class="nav nav-pills nav-stacked">
+  <li><a href="/community/contributing.html">Contributing</a></li>
   <li><a href="/community/mailing-lists.html">Mailing Lists</a></li>
   <li><a href="https://issues.apache.org/jira/browse/DATAFU">Bugs</a></li>
 </ul>
     </div>
     <div class="col-md-7">
       <h4 class="text-muted">Apache DataFu Pig</h4>
-      <h1 id="toc_0">Javadoc</h1>
+      <h1 id="javadoc">Javadoc</h1>
 
-<p>The latest released version is <a href="/docs/datafu/1.2.0/">1.2.0</a>.</p>
+<p>The latest Javadocs available are for release <a href="/docs/datafu/1.2.0/">1.2.0</a>.</p>
 
 <p>Older versions:</p>
 
@@ -88,8 +94,9 @@
 
 
     
-      <div class="footer">
-Copyright &copy; 2011-2014 <a href="http://www.apache.org/licenses/">The Apache Software Foundation</a>. <br>
+      
+<div class="footer">
+Copyright &copy; 2011-2015 <a href="http://www.apache.org/licenses/">The Apache Software Foundation</a>. <br>
 Apache DataFu, DataFu, Apache Pig, Apache Hadoop, Hadoop, Apache, and the Apache feather logo are either registered trademarks or trademarks of the Apache Software Foundation in the United States and other countries.
 </div>
 

Modified: incubator/datafu/site/docs/hourglass/concepts.html
URL: http://svn.apache.org/viewvc/incubator/datafu/site/docs/hourglass/concepts.html?rev=1709884&r1=1709883&r2=1709884&view=diff
==============================================================================
--- incubator/datafu/site/docs/hourglass/concepts.html (original)
+++ incubator/datafu/site/docs/hourglass/concepts.html Wed Oct 21 17:00:40 2015
@@ -1,3 +1,5 @@
+
+
 <!doctype html>
 <html>
   <head>
@@ -10,11 +12,9 @@
     <!-- Use title if it's in the page YAML frontmatter -->
     <title>Concepts - Apache DataFu Hourglass</title>
     
-    <link href="/stylesheets/all.css" media="screen" rel="stylesheet" type="text/css" />
-<link href="/stylesheets/highlight.css" media="screen" rel="stylesheet" type="text/css" />
-    <script src="/javascripts/all.js" type="text/javascript"></script>
+    <link href="/stylesheets/all.css" rel="stylesheet" /><link href="/stylesheets/highlight.css" rel="stylesheet" />
+    <script src="/javascripts/all.js"></script>
 
-    
     <script type="text/javascript">
       var _gaq = _gaq || [];
       _gaq.push(['_setAccount', 'UA-30533336-2']);
@@ -26,14 +26,14 @@
         var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
       })();
     </script>
-    
   </head>
   
   <body class="docs docs_hourglass docs_hourglass_concepts">
 
     <div class="container">
 
-      <div class="header">
+      
+<div class="header">
 
   <ul class="nav nav-pills pull-right">
     <li><a href="/">Home</a></li>
@@ -48,12 +48,18 @@
       
   <div class="row">
     <div class="col-md-3">
-      <h4>Apache DataFu Pig</h4>
+      
+<h4>Apache DataFu</h4>
+<ul class="nav nav-pills nav-stacked">
+  <li><a href="/">Home</a></li>
+  <li><a href="/docs/quick-start.html">Quick Start</a></li>
+</ul>
+
+<h4>Apache DataFu Pig</h4>
 <ul class="nav nav-pills nav-stacked">
   <li><a href="/docs/datafu/getting-started.html">Getting Started</a></li>
   <li><a href="/docs/datafu/guide.html">Guide</a></li>
   <li><a href="/docs/datafu/javadoc.html">Javadoc</a></li>
-  <li><a href="/docs/datafu/contributing.html">Contributing</a></li>
 </ul>
 
 <h4>Apache DataFu Hourglass</h4>
@@ -61,18 +67,18 @@
   <li><a href="/docs/hourglass/getting-started.html">Getting Started</a></li>
   <li><a href="/docs/hourglass/concepts.html">Concepts</a></li>
   <li><a href="/docs/hourglass/javadoc.html">Javadoc</a></li>
-  <li><a href="/docs/hourglass/contributing.html">Contributing</a></li>
 </ul>
 
 <h4>Community</h4>
 <ul class="nav nav-pills nav-stacked">
+  <li><a href="/community/contributing.html">Contributing</a></li>
   <li><a href="/community/mailing-lists.html">Mailing Lists</a></li>
   <li><a href="https://issues.apache.org/jira/browse/DATAFU">Bugs</a></li>
 </ul>
     </div>
     <div class="col-md-7">
       <h4 class="text-muted">Apache DataFu Hourglass</h4>
-      <h1 id="toc_0">Concepts</h1>
+      <h1 id="concepts">Concepts</h1>
 
 <p>Apache DataFu Hourglass is designed to make computations over sliding windows more efficient. For these types of computations, the input data is partitioned in some way, usually according to time, and the range of input data to process is adjusted as new data arrives. Hourglass works with input data that is partitioned by day, as this is a common scheme for partitioning temporal data.</p>
 
@@ -94,13 +100,13 @@
 
 <p>We&#39;ll discuss these two jobs in the next two sections.</p>
 
-<h2 id="toc_1">Partition-preserving job</h2>
+<h2 id="partition-preserving-job">Partition-preserving job</h2>
 
 <p>In the partition-preserving job, input data that is partitioned by day is consumed and output data is produced that is also partitioned by day. This is equivalent to running one MapReduce job separately for each day of input data. Suppose that the input data is a page view event and the goal is to count the number of page views by member. This job would produce the page view counts per member, partitioned by day.</p>
 
 <p><img alt="partition-preserving job" src="/images/Hourglass-Concepts-Preserving.png" /></p>
 
-<h2 id="toc_2">Partition-collapsing job</h2>
+<h2 id="partition-collapsing-job">Partition-collapsing job</h2>
 
 <p>In the partition-collapsing job, input data that is partitioned by day is consumed and a single output is produced. If the input data is a page view event and the goal is to count the number of page views by member, then this job would produce the page view counts per member over the entire <code>n</code> days.</p>
 
@@ -110,7 +116,7 @@
 
 <p><img alt="partition-preserving job" src="/images/Hourglass-Concepts-CollapsingReuse.png" /></p>
 
-<h2 id="toc_3">Hourglass programming model</h2>
+<h2 id="hourglass-programming-model">Hourglass programming model</h2>
 
 <p>The Hourglass jobs are implemented as MapReduce jobs for Hadoop:</p>
 
@@ -129,8 +135,9 @@
 
 
     
-      <div class="footer">
-Copyright &copy; 2011-2014 <a href="http://www.apache.org/licenses/">The Apache Software Foundation</a>. <br>
+      
+<div class="footer">
+Copyright &copy; 2011-2015 <a href="http://www.apache.org/licenses/">The Apache Software Foundation</a>. <br>
 Apache DataFu, DataFu, Apache Pig, Apache Hadoop, Hadoop, Apache, and the Apache feather logo are either registered trademarks or trademarks of the Apache Software Foundation in the United States and other countries.
 </div>
 

Modified: incubator/datafu/site/docs/hourglass/getting-started.html
URL: http://svn.apache.org/viewvc/incubator/datafu/site/docs/hourglass/getting-started.html?rev=1709884&r1=1709883&r2=1709884&view=diff
==============================================================================
--- incubator/datafu/site/docs/hourglass/getting-started.html (original)
+++ incubator/datafu/site/docs/hourglass/getting-started.html Wed Oct 21 17:00:40 2015
@@ -1,3 +1,5 @@
+
+
 <!doctype html>
 <html>
   <head>
@@ -10,11 +12,9 @@
     <!-- Use title if it's in the page YAML frontmatter -->
     <title>Getting Started - Apache DataFu Hourglass</title>
     
-    <link href="/stylesheets/all.css" media="screen" rel="stylesheet" type="text/css" />
-<link href="/stylesheets/highlight.css" media="screen" rel="stylesheet" type="text/css" />
-    <script src="/javascripts/all.js" type="text/javascript"></script>
+    <link href="/stylesheets/all.css" rel="stylesheet" /><link href="/stylesheets/highlight.css" rel="stylesheet" />
+    <script src="/javascripts/all.js"></script>
 
-    
     <script type="text/javascript">
       var _gaq = _gaq || [];
       _gaq.push(['_setAccount', 'UA-30533336-2']);
@@ -26,14 +26,14 @@
         var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
       })();
     </script>
-    
   </head>
   
   <body class="docs docs_hourglass docs_hourglass_getting-started">
 
     <div class="container">
 
-      <div class="header">
+      
+<div class="header">
 
   <ul class="nav nav-pills pull-right">
     <li><a href="/">Home</a></li>
@@ -48,12 +48,18 @@
       
   <div class="row">
     <div class="col-md-3">
-      <h4>Apache DataFu Pig</h4>
+      
+<h4>Apache DataFu</h4>
+<ul class="nav nav-pills nav-stacked">
+  <li><a href="/">Home</a></li>
+  <li><a href="/docs/quick-start.html">Quick Start</a></li>
+</ul>
+
+<h4>Apache DataFu Pig</h4>
 <ul class="nav nav-pills nav-stacked">
   <li><a href="/docs/datafu/getting-started.html">Getting Started</a></li>
   <li><a href="/docs/datafu/guide.html">Guide</a></li>
   <li><a href="/docs/datafu/javadoc.html">Javadoc</a></li>
-  <li><a href="/docs/datafu/contributing.html">Contributing</a></li>
 </ul>
 
 <h4>Apache DataFu Hourglass</h4>
@@ -61,18 +67,18 @@
   <li><a href="/docs/hourglass/getting-started.html">Getting Started</a></li>
   <li><a href="/docs/hourglass/concepts.html">Concepts</a></li>
   <li><a href="/docs/hourglass/javadoc.html">Javadoc</a></li>
-  <li><a href="/docs/hourglass/contributing.html">Contributing</a></li>
 </ul>
 
 <h4>Community</h4>
 <ul class="nav nav-pills nav-stacked">
+  <li><a href="/community/contributing.html">Contributing</a></li>
   <li><a href="/community/mailing-lists.html">Mailing Lists</a></li>
   <li><a href="https://issues.apache.org/jira/browse/DATAFU">Bugs</a></li>
 </ul>
     </div>
     <div class="col-md-7">
       <h4 class="text-muted">Apache DataFu Hourglass</h4>
-      <h1 id="toc_0">Getting Started</h1>
+      <h1 id="getting-started">Getting Started</h1>
 
 <p>Hourglass is Apache DataFu&#39;s solution to incrementally processing data with Hadoop MapReduce.  It is designed to make computations over
 sliding windows more efficient.</p>
@@ -81,34 +87,17 @@ sliding windows more efficient.</p>
 To keep this dashboard up to date, we can schedule a query that runs daily and gathers the stats for the last 30 days.
 However, this simple implementation would be wasteful: only one day of data has changed, but we&#39;d be consuming and recalculating
 the stats for all 30.  A more efficient solution is to make the query incremental: using basic arithmetic, we can update the output
-from the previous day by adding and subtracting input data. This enables the job to process only the new data, significantly reducing 
+from the previous day by adding and subtracting input data. This enables the job to process only the new data, significantly reducing
 the computational resources required.</p>
 
 <p>Hourglass is a framework that makes it much easier to write incremental Hadoop jobs to perform this type of computation efficiently.
 It provides incremental jobs that abstract away the complexity of implementing a robust incremental solution, with the appropriate hooks
 so that developers can supply custom logic to perform the aggregation task.</p>
 
-<h2 id="toc_1">Download</h2>
-
-<p>DataFu&#39;s Hourglass library is available as a JAR that can be found in the Maven central repository
-under the group ID <a href="http://search.maven.org/#search%7Cga%7C1%7Cg%3A%22com.linkedin.datafu%22">com.linkedin.datafu</a> by the
-name <code>datafu-hourglass</code>.</p>
-
-<p>If you are using Ivy, you can download <code>datafu-hourglass</code> and its dependencies with:</p>
-<pre class="highlight xml"><span class="nt">&lt;dependency</span> <span class="na">org=</span><span class="s">&quot;com.linkedin.datafu&quot;</span> <span class="na">name=</span><span class="s">&quot;datafu-hourglass&quot;</span> <span class="na">rev=</span><span class="s">&quot;0.1.3&quot;</span><span class="nt">/&gt;</span>
-</pre>
-<p>Or if you are using Maven:</p>
-<pre class="highlight xml"><span class="nt">&lt;dependency&gt;</span>
-  <span class="nt">&lt;groupId&gt;</span>com.linkedin.datafu<span class="nt">&lt;/groupId&gt;</span>
-  <span class="nt">&lt;artifactId&gt;</span>datafu-hourglass<span class="nt">&lt;/artifactId&gt;</span>
-  <span class="nt">&lt;version&gt;</span>0.1.3<span class="nt">&lt;/version&gt;</span>
-<span class="nt">&lt;/dependency&gt;</span>
-</pre>
-<p>Your other option is to <a href="https://github.com/linkedin/datafu/archive/master.zip">download</a> the code and build the JAR yourself.
-After unzipping the archive, navigate to <code>contrib/hourglass</code>  and build the JAR by running <code>ant jar</code>.  The dependencies will be 
-downloaded to <code>lib/common</code>.</p>
+<p>If you have not already checked out the code, please see: <a href="/docs/quick-start.html">Quick Start</a>.  There you&#39;ll also see how to declare a
+dependency on Hourglass in a project.</p>
 
-<h2 id="toc_2">Examples</h2>
+<h2 id="examples">Examples</h2>
 
 <p>We have provided some sample incremental jobs to demonstrate how to use Hourglass for incremental processing.
 These jobs consume input data consisting of just a single <code>id</code> field and which is also partitioned by day according to
@@ -119,23 +108,27 @@ to compute daily, such as how many times
 <p>These sample jobs are packaged in a tool that can be run from the command line.  The same tool also serves as a test data generator.
 Here we will walk through how to generate test data and run the jobs against it.</p>
 
-<p>To start, get the source code and navigate to the Hourglass directory.</p>
-<pre class="highlight text">git clone git://git.apache.org/incubator-datafu.git
-cd contrib/hourglass
-</pre>
-<p>Build the Hourglass JAR, and in addition build the test jar that contains the sample jobs.</p>
-<pre class="highlight text">ant jar
-ant testjar
-</pre>
-<p>Define some variables that we&#39;ll need for the <code>hadoop jar</code> command later. These list the JAR dependencies, as well as the two JARs we just built.</p>
-<pre class="highlight text">export LIBJARS=$(find &quot;lib/common&quot; -name '*.jar' | xargs echo | tr ' ' ',')
-export LIBJARS=$LIBJARS,$(find &quot;lib/test&quot; -name '*.jar' | xargs echo | tr ' ' ',')
-export LIBJARS=$LIBJARS,$(find &quot;build&quot; -name '*.jar' | xargs echo | tr ' ' ',')
+<p>Build the main Hourglass JAR, build the test JAR, and copy the dependencies necessary for the demo to a single directory:</p>
+<pre class="highlight plaintext"><code>./gradlew :datafu-hourglass:jar :datafu-hourglass:testJar :datafu-hourglass:copyDemoDependencies
+</code></pre>
+
+<p>Define some variables that we&#39;ll need for the <code>hadoop jar</code> command. These list the JAR dependencies, as well as the JARs we just built.</p>
+<pre class="highlight plaintext"><code>export LIBJARS=$(find "datafu-hourglass/build/libs" -name '*.jar' | xargs echo | tr ' ' ',')
+
+export LIBJARS=$LIBJARS,$(find "datafu-hourglass/build/demo_dependencies" -name '*.jar' | xargs echo | tr ' ' ',')
+
 export HADOOP_CLASSPATH=`echo ${LIBJARS} | sed s/,/:/g`
-</pre>
+</code></pre>
+
 <p>Assuming you&#39;ve set up the <code>hadoop</code> command to run against your Hadoop cluster, you are now ready to run the jobs.</p>
 
-<h3 id="toc_3">Counting Events</h3>
+<p>Let&#39;s define some shorthand commands to run the Hourglass JAR and dump JSON from an Avro file:</p>
+<pre class="highlight plaintext"><code>export HOURGLASS_CMD="hadoop jar datafu-hourglass/build/libs/datafu-hourglass-incubating-1.3.0-SNAPSHOT-tests.jar datafu.hourglass.demo.Main"
+
+export TO_JSON_CMD="java -jar datafu-hourglass/build/demo_dependencies/avro-tools-1.7.4.jar tojson"
+</code></pre>
+
+<h3 id="counting-events">Counting Events</h3>
 
 <p>In this example we will run a job that counts how many times each <code>id</code> value has appeared in an input data set.  Then we will run the
 job again on new data, which will incrementally update the previous result.</p>
@@ -143,70 +136,79 @@ job again on new data, which will increm
 <p>First we&#39;ll generate some test data under the path<code>/data/event</code> using the <code>generate</code> command from our command line tool.
 The command below will create some random events for dates between 2013/03/01 and 2013/03/14, inclusive.
 Each record consists of just a single long value from the range 1-100.</p>
-<pre class="highlight text">hadoop jar build/datafu-hourglass-test.jar generate -libjars ${LIBJARS} /data/event 2013/03/01-2013/03/14
-</pre>
+<pre class="highlight plaintext"><code>$HOURGLASS_CMD generate -libjars ${LIBJARS} /data/event 2013/03/01-2013/03/14
+</code></pre>
+
 <p>Just to get a sense for what the data looks like, we can copy it locally and dump the first several records.</p>
-<pre class="highlight text">hadoop fs -copyToLocal /data/event/2013/03/01/part-00000.avro temp.avro
-java -jar lib/test/avro-tools-jar-1.7.4.jar tojson temp.avro | head
-</pre>
+<pre class="highlight plaintext"><code>hadoop fs -copyToLocal /data/event/2013/03/01/part-00000.avro temp.avro
+$TO_JSON_CMD temp.avro | head
+</code></pre>
+
 <p>This will produce output looking something like this:</p>
-<pre class="highlight json"><span class="p">{</span><span class="s2">&quot;id&quot;</span><span class="p">:</span><span class="mi">35</span><span class="p">}</span><span class="w">
-</span><span class="p">{</span><span class="s2">&quot;id&quot;</span><span class="p">:</span><span class="mi">27</span><span class="p">}</span><span class="w">
-</span><span class="p">{</span><span class="s2">&quot;id&quot;</span><span class="p">:</span><span class="mi">78</span><span class="p">}</span><span class="w">
-</span><span class="p">{</span><span class="s2">&quot;id&quot;</span><span class="p">:</span><span class="mi">79</span><span class="p">}</span><span class="w">
-</span><span class="p">{</span><span class="s2">&quot;id&quot;</span><span class="p">:</span><span class="mi">73</span><span class="p">}</span><span class="w">
-</span><span class="p">{</span><span class="s2">&quot;id&quot;</span><span class="p">:</span><span class="mi">61</span><span class="p">}</span><span class="w">
-</span><span class="p">{</span><span class="s2">&quot;id&quot;</span><span class="p">:</span><span class="mi">94</span><span class="p">}</span><span class="w">
-</span><span class="p">{</span><span class="s2">&quot;id&quot;</span><span class="p">:</span><span class="mi">62</span><span class="p">}</span><span class="w">
-</span><span class="p">{</span><span class="s2">&quot;id&quot;</span><span class="p">:</span><span class="mi">6</span><span class="p">}</span><span class="w">
-</span><span class="p">{</span><span class="s2">&quot;id&quot;</span><span class="p">:</span><span class="mi">44</span><span class="p">}</span><span class="w">
-</span></pre>
-<p>Now run the <code>countbyid</code> command, which executes the sample <a href="https://github.com/linkedin/datafu/blob/master/contrib/hourglass/test/java/datafu/hourglass/demo/CountById.java">CountById</a> job.
+<pre class="highlight json"><code><span class="p">{</span><span class="nt">"id"</span><span class="p">:</span><span class="mi">35</span><span class="p">}</span><span class="w">
+</span><span class="p">{</span><span class="nt">"id"</span><span class="p">:</span><span class="mi">27</span><span class="p">}</span><span class="w">
+</span><span class="p">{</span><span class="nt">"id"</span><span class="p">:</span><span class="mi">78</span><span class="p">}</span><span class="w">
+</span><span class="p">{</span><span class="nt">"id"</span><span class="p">:</span><span class="mi">79</span><span class="p">}</span><span class="w">
+</span><span class="p">{</span><span class="nt">"id"</span><span class="p">:</span><span class="mi">73</span><span class="p">}</span><span class="w">
+</span><span class="p">{</span><span class="nt">"id"</span><span class="p">:</span><span class="mi">61</span><span class="p">}</span><span class="w">
+</span><span class="p">{</span><span class="nt">"id"</span><span class="p">:</span><span class="mi">94</span><span class="p">}</span><span class="w">
+</span><span class="p">{</span><span class="nt">"id"</span><span class="p">:</span><span class="mi">62</span><span class="p">}</span><span class="w">
+</span><span class="p">{</span><span class="nt">"id"</span><span class="p">:</span><span class="mi">6</span><span class="p">}</span><span class="w">
+</span><span class="p">{</span><span class="nt">"id"</span><span class="p">:</span><span class="mi">44</span><span class="p">}</span><span class="w">
+</span></code></pre>
+
+<p>Now run the <code>countbyid</code> command, which executes the sample <a href="https://github.com/apache/incubator-datafu/blob/master/datafu-hourglass/src/test/java/datafu/hourglass/demo/CountById.java">CountById</a> job.
 This will count the number of events for each ID value.</p>
-<pre class="highlight text">hadoop jar build/datafu-hourglass-test.jar countbyid -libjars ${LIBJARS} /data/event /output
-</pre>
+<pre class="highlight plaintext"><code>$HOURGLASS_CMD countbyid -libjars ${LIBJARS} /data/event /output
+</code></pre>
+
 <p>In the console output you will notice that it reads all fourteen days of input that are available.
 We can see what this produced by copying the output locally and dumping the first several records.
 Each record consists of an ID and a count.</p>
-<pre class="highlight text">rm temp.avro
+<pre class="highlight plaintext"><code>rm temp.avro
 hadoop fs -copyToLocal /output/20130314/part-r-00000.avro temp.avro
-java -jar lib/test/avro-tools-jar-1.7.4.jar tojson temp.avro | head
-</pre>
+$TO_JSON_CMD temp.avro | head
+</code></pre>
+
 <p>This will produce output looking something like this:</p>
-<pre class="highlight json"><span class="p">{</span><span class="s2">&quot;key&quot;</span><span class="p">:{</span><span class="s2">&quot;member_id&quot;</span><span class="p">:</span><span class="mi">1</span><span class="p">},</span><span class="s2">&quot;value&quot;</span><span class="p">:{</span><span class="s2">&quot;count&quot;</span><span class="p">:</span><span class="mi">162</span><span class="p">}}</span><span class="w">
-</span><span class="p">{</span><span class="s2">&quot;key&quot;</span><span class="p">:{</span><span class="s2">&quot;member_id&quot;</span><span class="p">:</span><span class="mi">2</span><span class="p">},</span><span class="s2">&quot;value&quot;</span><span class="p">:{</span><span class="s2">&quot;count&quot;</span><span class="p">:</span><span class="mi">136</span><span class="p">}}</span><span class="w">
-</span><span class="p">{</span><span class="s2">&quot;key&quot;</span><span class="p">:{</span><span class="s2">&quot;member_id&quot;</span><span class="p">:</span><span class="mi">3</span><span class="p">},</span><span class="s2">&quot;value&quot;</span><span class="p">:{</span><span class="s2">&quot;count&quot;</span><span class="p">:</span><span class="mi">137</span><span class="p">}}</span><span class="w">
-</span><span class="p">{</span><span class="s2">&quot;key&quot;</span><span class="p">:{</span><span class="s2">&quot;member_id&quot;</span><span class="p">:</span><span class="mi">4</span><span class="p">},</span><span class="s2">&quot;value&quot;</span><span class="p">:{</span><span class="s2">&quot;count&quot;</span><span class="p">:</span><span class="mi">142</span><span class="p">}}</span><span class="w">
-</span><span class="p">{</span><span class="s2">&quot;key&quot;</span><span class="p">:{</span><span class="s2">&quot;member_id&quot;</span><span class="p">:</span><span class="mi">5</span><span class="p">},</span><span class="s2">&quot;value&quot;</span><span class="p">:{</span><span class="s2">&quot;count&quot;</span><span class="p">:</span><span class="mi">149</span><span class="p">}}</span><span class="w">
-</span><span class="p">{</span><span class="s2">&quot;key&quot;</span><span class="p">:{</span><span class="s2">&quot;member_id&quot;</span><span class="p">:</span><span class="mi">6</span><span class="p">},</span><span class="s2">&quot;value&quot;</span><span class="p">:{</span><span class="s2">&quot;count&quot;</span><span class="p">:</span><span class="mi">145</span><span class="p">}}</span><span class="w">
-</span><span class="p">{</span><span class="s2">&quot;key&quot;</span><span class="p">:{</span><span class="s2">&quot;member_id&quot;</span><span class="p">:</span><span class="mi">7</span><span class="p">},</span><span class="s2">&quot;value&quot;</span><span class="p">:{</span><span class="s2">&quot;count&quot;</span><span class="p">:</span><span class="mi">131</span><span class="p">}}</span><span class="w">
-</span><span class="p">{</span><span class="s2">&quot;key&quot;</span><span class="p">:{</span><span class="s2">&quot;member_id&quot;</span><span class="p">:</span><span class="mi">8</span><span class="p">},</span><span class="s2">&quot;value&quot;</span><span class="p">:{</span><span class="s2">&quot;count&quot;</span><span class="p">:</span><span class="mi">143</span><span class="p">}}</span><span class="w">
-</span><span class="p">{</span><span class="s2">&quot;key&quot;</span><span class="p">:{</span><span class="s2">&quot;member_id&quot;</span><span class="p">:</span><span class="mi">9</span><span class="p">},</span><span class="s2">&quot;value&quot;</span><span class="p">:{</span><span class="s2">&quot;count&quot;</span><span class="p">:</span><span class="mi">138</span><span class="p">}}</span><span class="w">
-</span><span class="p">{</span><span class="s2">&quot;key&quot;</span><span class="p">:{</span><span class="s2">&quot;member_id&quot;</span><span class="p">:</span><span class="mi">10</span><span class="p">},</span><span class="s2">&quot;value&quot;</span><span class="p">:{</span><span class="s2">&quot;count&quot;</span><span class="p">:</span><span class="mi">160</span><span class="p">}}</span><span class="w">
-</span></pre>
+<pre class="highlight json"><code><span class="p">{</span><span class="nt">"key"</span><span class="p">:{</span><span class="nt">"member_id"</span><span class="p">:</span><span class="mi">1</span><span class="p">},</span><span class="nt">"value"</span><span class="p">:{</span><span class="nt">"count"</span><span class="p">:</span><span class="mi">162</span><span class="p">}}</span><span class="w">
+</span><span class="p">{</span><span class="nt">"key"</span><span class="p">:{</span><span class="nt">"member_id"</span><span class="p">:</span><span class="mi">2</span><span class="p">},</span><span class="nt">"value"</span><span class="p">:{</span><span class="nt">"count"</span><span class="p">:</span><span class="mi">136</span><span class="p">}}</span><span class="w">
+</span><span class="p">{</span><span class="nt">"key"</span><span class="p">:{</span><span class="nt">"member_id"</span><span class="p">:</span><span class="mi">3</span><span class="p">},</span><span class="nt">"value"</span><span class="p">:{</span><span class="nt">"count"</span><span class="p">:</span><span class="mi">137</span><span class="p">}}</span><span class="w">
+</span><span class="p">{</span><span class="nt">"key"</span><span class="p">:{</span><span class="nt">"member_id"</span><span class="p">:</span><span class="mi">4</span><span class="p">},</span><span class="nt">"value"</span><span class="p">:{</span><span class="nt">"count"</span><span class="p">:</span><span class="mi">142</span><span class="p">}}</span><span class="w">
+</span><span class="p">{</span><span class="nt">"key"</span><span class="p">:{</span><span class="nt">"member_id"</span><span class="p">:</span><span class="mi">5</span><span class="p">},</span><span class="nt">"value"</span><span class="p">:{</span><span class="nt">"count"</span><span class="p">:</span><span class="mi">149</span><span class="p">}}</span><span class="w">
+</span><span class="p">{</span><span class="nt">"key"</span><span class="p">:{</span><span class="nt">"member_id"</span><span class="p">:</span><span class="mi">6</span><span class="p">},</span><span class="nt">"value"</span><span class="p">:{</span><span class="nt">"count"</span><span class="p">:</span><span class="mi">145</span><span class="p">}}</span><span class="w">
+</span><span class="p">{</span><span class="nt">"key"</span><span class="p">:{</span><span class="nt">"member_id"</span><span class="p">:</span><span class="mi">7</span><span class="p">},</span><span class="nt">"value"</span><span class="p">:{</span><span class="nt">"count"</span><span class="p">:</span><span class="mi">131</span><span class="p">}}</span><span class="w">
+</span><span class="p">{</span><span class="nt">"key"</span><span class="p">:{</span><span class="nt">"member_id"</span><span class="p">:</span><span class="mi">8</span><span class="p">},</span><span class="nt">"value"</span><span class="p">:{</span><span class="nt">"count"</span><span class="p">:</span><span class="mi">143</span><span class="p">}}</span><span class="w">
+</span><span class="p">{</span><span class="nt">"key"</span><span class="p">:{</span><span class="nt">"member_id"</span><span class="p">:</span><span class="mi">9</span><span class="p">},</span><span class="nt">"value"</span><span class="p">:{</span><span class="nt">"count"</span><span class="p">:</span><span class="mi">138</span><span class="p">}}</span><span class="w">
+</span><span class="p">{</span><span class="nt">"key"</span><span class="p">:{</span><span class="nt">"member_id"</span><span class="p">:</span><span class="mi">10</span><span class="p">},</span><span class="nt">"value"</span><span class="p">:{</span><span class="nt">"count"</span><span class="p">:</span><span class="mi">160</span><span class="p">}}</span><span class="w">
+</span></code></pre>
+
 <p>Now let&#39;s generate an additional day of data, for 2013/03/15:</p>
-<pre class="highlight text">hadoop jar build/datafu-hourglass-test.jar generate -libjars ${LIBJARS} /data/event 2013/03/15
-</pre>
+<pre class="highlight plaintext"><code>$HOURGLASS_CMD generate -libjars ${LIBJARS} /data/event 2013/03/15
+</code></pre>
+
 <p>The job is configured to consume all available input data.  But since a previous output already exists,
 it is able to reuse this result and therefore it only needs to consume the previous output and the new
 day of input.  Let&#39;s run the incremental job again:</p>
-<pre class="highlight text">hadoop jar build/datafu-hourglass-test.jar countbyid -libjars ${LIBJARS} /data/event /output
-</pre>
+<pre class="highlight plaintext"><code>$HOURGLASS_CMD countbyid -libjars ${LIBJARS} /data/event /output
+</code></pre>
+
 <p>You&#39;ll notice in console output that the job considers two alternative plans.  In one version it consumes
 all available input data to produce the new output.  In the other version it reuses the previous output
 and merges this with only the new input.  The second version requires fewer bytes to be consumed, so the job
 picks this one.</p>
 
 <p>We can download the new output and inspect the counts:</p>
-<pre class="highlight text">rm temp.avro
+<pre class="highlight plaintext"><code>rm temp.avro
 hadoop fs -copyToLocal /output/20130315/part-r-00000.avro temp.avro
-java -jar lib/test/avro-tools-jar-1.7.4.jar tojson temp.avro | head
-</pre>
-<p>The implementation of the <code>CountById</code> job can be found <a href="https://github.com/linkedin/datafu/blob/master/contrib/hourglass/test/java/datafu/hourglass/demo/CountById.java">here</a>.
+$TO_JSON_CMD temp.avro | head
+</code></pre>
+
+<p>The implementation of the <code>CountById</code> job can be found <a href="https://github.com/apache/incubator-datafu/blob/master/datafu-hourglass/src/test/java/datafu/hourglass/demo/CountById.java">here</a>.
 A more detailed explanation of how the job works and how it is implemented can be found in our
 <a href="/blog/2013/10/03/datafus-hourglass-incremental-data-processing-in-hadoop.html">blog post</a>.</p>
 
-<h3 id="toc_4">Estimating Cardinality</h3>
+<h3 id="estimating-cardinality">Estimating Cardinality</h3>
 
 <p>Continuing from the previous example, suppose we wanted to know the number of distinct IDs over the past fifteen
 days.  In this example we will run a sequence of jobs that use the HyperLogLog cardinality estimation algorithm to compute this
@@ -217,40 +219,46 @@ over the fifteen days.  The advantage of
 be processed.  Once the estimate for that day is produced, the second job can combine it with the other estimates computed previously.</p>
 
 <p>Let&#39;s start by cleaning up the output directory:</p>
-<pre class="highlight text">hadoop fs -rmr /output
-</pre>
-<p>If you have been following along from the previous example, you already have fifteen days of input data available, 
+<pre class="highlight plaintext"><code>hadoop fs -rmr /output
+</code></pre>
+
+<p>If you have been following along from the previous example, you already have fifteen days of input data available,
 so we don&#39;t need to regenerate it.  We can run the <code>cardinality</code> command to execute the two jobs.  This executes
-the sample jobs in <a href="https://github.com/linkedin/datafu/blob/master/contrib/hourglass/test/java/datafu/hourglass/demo/EstimateCardinality.java">EstimateCardinality</a>.</p>
-<pre class="highlight text">hadoop jar build/datafu-hourglass-test.jar cardinality -libjars ${LIBJARS} /data/event /intermediate /output 15
-</pre>
+the sample jobs in <a href="https://github.com/apache/incubator-datafu/blob/master/datafu-hourglass/src/test/java/datafu/hourglass/demo/EstimateCardinality.java">EstimateCardinality</a>.</p>
+<pre class="highlight plaintext"><code>$HOURGLASS_CMD cardinality -libjars ${LIBJARS} /data/event /intermediate /output 15
+</code></pre>
+
 <p>You will notice in the console output that the job consumes fifteen days of input.  We can then inspect the output to
 see the count of distinct IDs.  Note that the output record consists of the count <em>and</em> the serialized HyperLogLog estimator,
 so we use <code>grep</code> to return just the count.</p>
-<pre class="highlight text">rm temp.avro
+<pre class="highlight plaintext"><code>rm temp.avro
 hadoop fs -copyToLocal /output/20130315/part-r-00000.avro temp.avro
-java -jar lib/test/avro-tools-jar-1.7.4.jar tojson temp.avro | grep -E -oh &quot;\&quot;count\&quot;:[0-9]+&quot;
-</pre>
+$TO_JSON_CMD temp.avro | grep -E -oh "\"count\":[0-9]+"
+</code></pre>
+
 <p>As the IDs in the test data are generated from the range 1-100, this produces the expected output of 100.
-We&#39;ll add a new day of data, but this time we&#39;ll use the range 101-200.  </p>
-<pre class="highlight text">hadoop jar build/datafu-hourglass-test.jar generate -libjars ${LIBJARS} /data/event 2013/03/16 101-200
-</pre>
+We&#39;ll add a new day of data, but this time we&#39;ll use the range 101-200.</p>
+<pre class="highlight plaintext"><code>$HOURGLASS_CMD generate -libjars ${LIBJARS} /data/event 2013/03/16 101-200
+</code></pre>
+
 <p>Now we&#39;ll run the job again.  It automatically consumes fifteen days of data ending with the most recent data that&#39;s
 available.</p>
-<pre class="highlight text">hadoop jar build/datafu-hourglass-test.jar cardinality -libjars ${LIBJARS} /data/event /intermediate /output 15
-</pre>
+<pre class="highlight plaintext"><code>$HOURGLASS_CMD cardinality -libjars ${LIBJARS} /data/event /intermediate /output 15
+</code></pre>
+
 <p>We can now inspect the output again:</p>
-<pre class="highlight text">rm temp.avro
+<pre class="highlight plaintext"><code>rm temp.avro
 hadoop fs -copyToLocal /output/20130316/part-r-00000.avro temp.avro
-java -jar lib/test/avro-tools-jar-1.7.4.jar tojson temp.avro | grep -E -oh &quot;\&quot;count\&quot;:[0-9]+&quot;
-</pre>
+$TO_JSON_CMD temp.avro | grep -E -oh "\"count\":[0-9]+"
+</code></pre>
+
 <p>This produces the expected result of 200.</p>
 
-<p>The implementation of the <code>EstimateCardinality</code> job can be found <a href="https://github.com/linkedin/datafu/blob/master/contrib/hourglass/test/java/datafu/hourglass/demo/EstimateCardinality.java">here</a>.
+<p>The implementation of the <code>EstimateCardinality</code> job can be found <a href="https://github.com/apache/incubator-datafu/blob/master/datafu-hourglass/src/test/java/datafu/hourglass/demo/EstimateCardinality.java">here</a>.
 A more detailed explanation of how the job works and how it is implemented can be found in our
 <a href="/blog/2013/10/03/datafus-hourglass-incremental-data-processing-in-hadoop.html">blog post</a>.</p>
 
-<h2 id="toc_5">Next Steps</h2>
+<h2 id="next-steps">Next Steps</h2>
 
 <p>Check out <a href="/docs/hourglass/concepts.html">Concepts</a> for more details on developing jobs with Hourglass.</p>
 
@@ -259,8 +267,9 @@ A more detailed explanation of how the j
 
 
     
-      <div class="footer">
-Copyright &copy; 2011-2014 <a href="http://www.apache.org/licenses/">The Apache Software Foundation</a>. <br>
+      
+<div class="footer">
+Copyright &copy; 2011-2015 <a href="http://www.apache.org/licenses/">The Apache Software Foundation</a>. <br>
 Apache DataFu, DataFu, Apache Pig, Apache Hadoop, Hadoop, Apache, and the Apache feather logo are either registered trademarks or trademarks of the Apache Software Foundation in the United States and other countries.
 </div>
 

Modified: incubator/datafu/site/docs/hourglass/javadoc.html
URL: http://svn.apache.org/viewvc/incubator/datafu/site/docs/hourglass/javadoc.html?rev=1709884&r1=1709883&r2=1709884&view=diff
==============================================================================
--- incubator/datafu/site/docs/hourglass/javadoc.html (original)
+++ incubator/datafu/site/docs/hourglass/javadoc.html Wed Oct 21 17:00:40 2015
@@ -1,3 +1,5 @@
+
+
 <!doctype html>
 <html>
   <head>
@@ -10,11 +12,9 @@
     <!-- Use title if it's in the page YAML frontmatter -->
     <title>Javadoc - Apache DataFu Hourglass</title>
     
-    <link href="/stylesheets/all.css" media="screen" rel="stylesheet" type="text/css" />
-<link href="/stylesheets/highlight.css" media="screen" rel="stylesheet" type="text/css" />
-    <script src="/javascripts/all.js" type="text/javascript"></script>
+    <link href="/stylesheets/all.css" rel="stylesheet" /><link href="/stylesheets/highlight.css" rel="stylesheet" />
+    <script src="/javascripts/all.js"></script>
 
-    
     <script type="text/javascript">
       var _gaq = _gaq || [];
       _gaq.push(['_setAccount', 'UA-30533336-2']);
@@ -26,14 +26,14 @@
         var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
       })();
     </script>
-    
   </head>
   
   <body class="docs docs_hourglass docs_hourglass_javadoc">
 
     <div class="container">
 
-      <div class="header">
+      
+<div class="header">
 
   <ul class="nav nav-pills pull-right">
     <li><a href="/">Home</a></li>
@@ -48,12 +48,18 @@
       
   <div class="row">
     <div class="col-md-3">
-      <h4>Apache DataFu Pig</h4>
+      
+<h4>Apache DataFu</h4>
+<ul class="nav nav-pills nav-stacked">
+  <li><a href="/">Home</a></li>
+  <li><a href="/docs/quick-start.html">Quick Start</a></li>
+</ul>
+
+<h4>Apache DataFu Pig</h4>
 <ul class="nav nav-pills nav-stacked">
   <li><a href="/docs/datafu/getting-started.html">Getting Started</a></li>
   <li><a href="/docs/datafu/guide.html">Guide</a></li>
   <li><a href="/docs/datafu/javadoc.html">Javadoc</a></li>
-  <li><a href="/docs/datafu/contributing.html">Contributing</a></li>
 </ul>
 
 <h4>Apache DataFu Hourglass</h4>
@@ -61,28 +67,29 @@
   <li><a href="/docs/hourglass/getting-started.html">Getting Started</a></li>
   <li><a href="/docs/hourglass/concepts.html">Concepts</a></li>
   <li><a href="/docs/hourglass/javadoc.html">Javadoc</a></li>
-  <li><a href="/docs/hourglass/contributing.html">Contributing</a></li>
 </ul>
 
 <h4>Community</h4>
 <ul class="nav nav-pills nav-stacked">
+  <li><a href="/community/contributing.html">Contributing</a></li>
   <li><a href="/community/mailing-lists.html">Mailing Lists</a></li>
   <li><a href="https://issues.apache.org/jira/browse/DATAFU">Bugs</a></li>
 </ul>
     </div>
     <div class="col-md-7">
       <h4 class="text-muted">Apache DataFu Hourglass</h4>
-      <h1 id="toc_0">Javadoc</h1>
+      <h1 id="javadoc">Javadoc</h1>
 
-<p>The latest released version is <a href="/docs/hourglass/0.1.3/">0.1.3</a>.</p>
+<p>The latest Javadocs available are for release <a href="/docs/hourglass/0.1.3/">0.1.3</a>.</p>
 
     </div>
   </div>
 
 
     
-      <div class="footer">
-Copyright &copy; 2011-2014 <a href="http://www.apache.org/licenses/">The Apache Software Foundation</a>. <br>
+      
+<div class="footer">
+Copyright &copy; 2011-2015 <a href="http://www.apache.org/licenses/">The Apache Software Foundation</a>. <br>
 Apache DataFu, DataFu, Apache Pig, Apache Hadoop, Hadoop, Apache, and the Apache feather logo are either registered trademarks or trademarks of the Apache Software Foundation in the United States and other countries.
 </div>
 

Added: incubator/datafu/site/docs/quick-start.html
URL: http://svn.apache.org/viewvc/incubator/datafu/site/docs/quick-start.html?rev=1709884&view=auto
==============================================================================
--- incubator/datafu/site/docs/quick-start.html (added)
+++ incubator/datafu/site/docs/quick-start.html Wed Oct 21 17:00:40 2015
@@ -0,0 +1,160 @@
+
+
+<!doctype html>
+<html>
+  <head>
+    <meta charset="utf-8">
+    
+    <!-- Always force latest IE rendering engine or request Chrome Frame -->
+    <meta content="IE=edge,chrome=1" http-equiv="X-UA-Compatible">
+    <meta name="google-site-verification" content="9N7qTOUYyX4kYfXYc0OIomWJku3PVvGrf6oTNWg2CHI" />
+    
+    <!-- Use title if it's in the page YAML frontmatter -->
+    <title>Quick Start - Apache DataFu</title>
+    
+    <link href="/stylesheets/all.css" rel="stylesheet" /><link href="/stylesheets/highlight.css" rel="stylesheet" />
+    <script src="/javascripts/all.js"></script>
+
+    <script type="text/javascript">
+      var _gaq = _gaq || [];
+      _gaq.push(['_setAccount', 'UA-30533336-2']);
+      _gaq.push(['_trackPageview']);
+
+      (function() {
+        var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+        ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+      })();
+    </script>
+  </head>
+  
+  <body class="docs docs_quick-start">
+
+    <div class="container">
+
+      
+<div class="header">
+
+  <ul class="nav nav-pills pull-right">
+    <li><a href="/">Home</a></li>
+    <li><a href="/blog">Blog</a></li>
+  </ul>
+
+  <h3 class="header-title"><a href="/">Apache DataFu&trade;</a></h3>
+
+</div>
+
+      
+      
+  <div class="row">
+    <div class="col-md-3">
+      
+<h4>Apache DataFu</h4>
+<ul class="nav nav-pills nav-stacked">
+  <li><a href="/">Home</a></li>
+  <li><a href="/docs/quick-start.html">Quick Start</a></li>
+</ul>
+
+<h4>Apache DataFu Pig</h4>
+<ul class="nav nav-pills nav-stacked">
+  <li><a href="/docs/datafu/getting-started.html">Getting Started</a></li>
+  <li><a href="/docs/datafu/guide.html">Guide</a></li>
+  <li><a href="/docs/datafu/javadoc.html">Javadoc</a></li>
+</ul>
+
+<h4>Apache DataFu Hourglass</h4>
+<ul class="nav nav-pills nav-stacked">
+  <li><a href="/docs/hourglass/getting-started.html">Getting Started</a></li>
+  <li><a href="/docs/hourglass/concepts.html">Concepts</a></li>
+  <li><a href="/docs/hourglass/javadoc.html">Javadoc</a></li>
+</ul>
+
+<h4>Community</h4>
+<ul class="nav nav-pills nav-stacked">
+  <li><a href="/community/contributing.html">Contributing</a></li>
+  <li><a href="/community/mailing-lists.html">Mailing Lists</a></li>
+  <li><a href="https://issues.apache.org/jira/browse/DATAFU">Bugs</a></li>
+</ul>
+    </div>
+    <div class="col-md-7">
+      <h4 class="text-muted">Apache DataFu</h4>
+      <h1 id="quick-start">Quick Start</h1>
+
+<p>Clone the repository with the following command:</p>
+<pre class="highlight plaintext"><code>git clone https://git-wip-us.apache.org/repos/asf/incubator-datafu.git
+cd incubator-datafu
+</code></pre>
+
+<h2 id="build">Build</h2>
+
+<p>To build the JARs, run:</p>
+<pre class="highlight plaintext"><code>./gradlew assemble
+</code></pre>
+
+<p>This will produce snapshot JARs for the next upcoming release, <code>1.3.0</code>.  There is not <em>yet</em> an official Apache release for DataFu, so for the moment we recommend building the latest version from HEAD.</p>
+
+<h3 id="datafu-pig">DataFu Pig</h3>
+
+<p>After building, the DataFu Pig artifacts can be found in <code>datafu-pig/build/libs</code>.  This should contain:</p>
+
+<ul>
+<li><code>datafu-pig-incubating-1.3.0-SNAPSHOT.jar</code></li>
+<li><code>datafu-pig-incubating-1.3.0-SNAPSHOT-javadoc.jar</code></li>
+<li><code>datafu-pig-incubating-1.3.0-SNAPSHOT-sources.jar</code></li>
+</ul>
+
+<p>The <code>datafu-pig-incubating-1.3.0-SNAPSHOT.jar</code> file can now be used in Pig!</p>
+
+<p>See <a href="/docs/datafu/getting-started.html">DataFu Pig - Getting Started</a> for next steps.</p>
+
+<h3 id="datafu-hourglass">DataFu Hourglass</h3>
+
+<p>After building, the DataFu Hourglass artifacts can be found in <code>datafu-hourglass/build/libs</code>.  This should contain:</p>
+
+<ul>
+<li><code>datafu-hourglass-incubating-1.3.0-SNAPSHOT.jar</code></li>
+<li><code>datafu-hourglass-incubating-1.3.0-SNAPSHOT-javadoc.jar</code></li>
+<li><code>datafu-hourglass-incubating-1.3.0-SNAPSHOT-sources.jar</code></li>
+</ul>
+
+<p>DataFu Hourglass has several external library dependencies that are required in order to use it.  Therefore, the easiest way to get started using it is to install DataFu to your local maven repository:</p>
+<pre class="highlight plaintext"><code>./gradlew install
+</code></pre>
+
+<p>Assuming your local maven repository is at <code>~/.m2</code>, you should see the DataFu Hourglass libraries under <code>~/.m2/repository/org/apache/datafu/datafu-hourglass-incubating/1.3.0-SNAPSHOT</code>.</p>
+
+<p>You should now be able to declare a dependency on DataFu Hourglass.</p>
+
+<p>Gradle:</p>
+<pre class="highlight groovy"><code><span class="n">compile</span> <span class="s2">"org.apache.datafu:datafu-hourglass-incubating:1.3.0-SNAPSHOT"</span>
+</code></pre>
+
+<p>Ivy:</p>
+<pre class="highlight xml"><code><span class="nt">&lt;dependency</span> <span class="na">org=</span><span class="s">"org.apache.datafu"</span> <span class="na">name=</span><span class="s">"datafu-hourglass-incubating"</span> <span class="na">rev=</span><span class="s">"1.3.0-SNAPSHOT"</span><span class="nt">/&gt;</span>
+</code></pre>
+
+<p>Maven:</p>
+<pre class="highlight xml"><code><span class="nt">&lt;dependency&gt;</span>
+  <span class="nt">&lt;groupId&gt;</span>org.apache.datafu<span class="nt">&lt;/groupId&gt;</span>
+  <span class="nt">&lt;artifactId&gt;</span>datafu-hourglass-incubating<span class="nt">&lt;/artifactId&gt;</span>
+  <span class="nt">&lt;version&gt;</span>1.3.0-SNAPSHOT<span class="nt">&lt;/version&gt;</span>
+<span class="nt">&lt;/dependency&gt;</span>
+</code></pre>
+
+<p>See <a href="/docs/hourglass/getting-started.html">DataFu Hourglass - Getting Started</a> for next steps.</p>
+
+    </div>
+  </div>
+
+
+    
+      
+<div class="footer">
+Copyright &copy; 2011-2015 <a href="http://www.apache.org/licenses/">The Apache Software Foundation</a>. <br>
+Apache DataFu, DataFu, Apache Pig, Apache Hadoop, Hadoop, Apache, and the Apache feather logo are either registered trademarks or trademarks of the Apache Software Foundation in the United States and other countries.
+</div>
+
+    </div>
+
+  </body>
+</html>
\ No newline at end of file

Modified: incubator/datafu/site/index.html
URL: http://svn.apache.org/viewvc/incubator/datafu/site/index.html?rev=1709884&r1=1709883&r2=1709884&view=diff
==============================================================================
--- incubator/datafu/site/index.html (original)
+++ incubator/datafu/site/index.html Wed Oct 21 17:00:40 2015
@@ -1,3 +1,5 @@
+
+
 <!doctype html>
 <html>
   <head>
@@ -10,11 +12,9 @@
     <!-- Use title if it's in the page YAML frontmatter -->
     <title>Apache DataFu</title>
     
-    <link href="/stylesheets/all.css" media="screen" rel="stylesheet" type="text/css" />
-<link href="/stylesheets/highlight.css" media="screen" rel="stylesheet" type="text/css" />
-    <script src="/javascripts/all.js" type="text/javascript"></script>
+    <link href="/stylesheets/all.css" rel="stylesheet" /><link href="/stylesheets/highlight.css" rel="stylesheet" />
+    <script src="/javascripts/all.js"></script>
 
-    
     <script type="text/javascript">
       var _gaq = _gaq || [];
       _gaq.push(['_setAccount', 'UA-30533336-2']);
@@ -26,14 +26,14 @@
         var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
       })();
     </script>
-    
   </head>
   
   <body class="index">
 
     <div class="container">
 
-      <div class="header">
+      
+<div class="header">
 
   <ul class="nav nav-pills pull-right">
     <li><a href="/">Home</a></li>
@@ -48,12 +48,18 @@
       
   <div class="row">
     <div class="col-md-3">
-      <h4>Apache DataFu Pig</h4>
+      
+<h4>Apache DataFu</h4>
+<ul class="nav nav-pills nav-stacked">
+  <li><a href="/">Home</a></li>
+  <li><a href="/docs/quick-start.html">Quick Start</a></li>
+</ul>
+
+<h4>Apache DataFu Pig</h4>
 <ul class="nav nav-pills nav-stacked">
   <li><a href="/docs/datafu/getting-started.html">Getting Started</a></li>
   <li><a href="/docs/datafu/guide.html">Guide</a></li>
   <li><a href="/docs/datafu/javadoc.html">Javadoc</a></li>
-  <li><a href="/docs/datafu/contributing.html">Contributing</a></li>
 </ul>
 
 <h4>Apache DataFu Hourglass</h4>
@@ -61,20 +67,20 @@
   <li><a href="/docs/hourglass/getting-started.html">Getting Started</a></li>
   <li><a href="/docs/hourglass/concepts.html">Concepts</a></li>
   <li><a href="/docs/hourglass/javadoc.html">Javadoc</a></li>
-  <li><a href="/docs/hourglass/contributing.html">Contributing</a></li>
 </ul>
 
 <h4>Community</h4>
 <ul class="nav nav-pills nav-stacked">
+  <li><a href="/community/contributing.html">Contributing</a></li>
   <li><a href="/community/mailing-lists.html">Mailing Lists</a></li>
   <li><a href="https://issues.apache.org/jira/browse/DATAFU">Bugs</a></li>
 </ul>
     </div>
     <div class="col-md-7">
       
-      <h1 id="toc_0">Apache DataFu</h1>
+      <h1 id="apache-datafu">Apache DataFu</h1>
 
-<p>Apache DataFu&trade; is a collection of libraries for working with large-scale data in Hadoop. 
+<p>Apache DataFu&trade; is a collection of libraries for working with large-scale data in Hadoop.
 The project was inspired by the need for stable, well-tested libraries for data mining and statistics.</p>
 
 <p>It consists of two libraries:</p>
@@ -84,7 +90,11 @@ The project was inspired by the need for
 <li><strong>Apache DataFu Hourglass</strong>: an incremental processing framework for <a href="http://hadoop.apache.org/">Apache Hadoop</a> in MapReduce</li>
 </ul>
 
-<h3 id="toc_1">Apache DataFu Pig</h3>
+<p>To begin using it, see our <a href="/docs/quick-start.html">Quick Start</a> guide.  If you&#39;d like to help contribute, see <a href="/community/contributing.html">Contributing</a>.</p>
+
+<h2 id="about-the-project">About the Project</h2>
+
+<h3 id="apache-datafu-pig">Apache DataFu Pig</h3>
 
 <p>Apache DataFu Pig is a collection of useful user-defined functions for data analysis in <a href="http://pig.apache.org/">Apache Pig</a>.
 This library was open sourced in 2010 and continues to receive contributions, having reached 1.0
@@ -94,7 +104,7 @@ and <a href="http://bigtop.apache.org/">
 
 <p>Check out the <a href="/docs/datafu/getting-started.html">Getting Started</a> guide to learn more.</p>
 
-<h3 id="toc_2">Apache DataFu Hourglass</h3>
+<h3 id="apache-datafu-hourglass">Apache DataFu Hourglass</h3>
 
 <p>Apache DataFu Hourglass is a library for incrementally processing data using Hadoop MapReduce.
 This library was inspired by the prevelance of sliding window computations over daily tracking
@@ -110,7 +120,7 @@ at <a href="http://cci.drexel.edu/bigdat
 
 <p>Check out the <a href="/docs/hourglass/getting-started.html">Getting Started</a> guide to learn more.</p>
 
-<h3 id="toc_3">Disclaimer</h3>
+<h3 id="disclaimer">Disclaimer</h3>
 
 <p>Apache DataFu is an effort undergoing incubation at The Apache Software Foundation (ASF), sponsored by the Apache Incubator. Incubation is required of all newly accepted projects until a further review indicates that the infrastructure, communications, and decision making process have stabilized in a manner consistent with other successful ASF projects. While incubation status is not necessarily a reflection of the completeness or stability of the code, it does indicate that the project has yet to be fully endorsed by the ASF.</p>
 
@@ -123,8 +133,9 @@ at <a href="http://cci.drexel.edu/bigdat
 
 
     
-      <div class="footer">
-Copyright &copy; 2011-2014 <a href="http://www.apache.org/licenses/">The Apache Software Foundation</a>. <br>
+      
+<div class="footer">
+Copyright &copy; 2011-2015 <a href="http://www.apache.org/licenses/">The Apache Software Foundation</a>. <br>
 Apache DataFu, DataFu, Apache Pig, Apache Hadoop, Hadoop, Apache, and the Apache feather logo are either registered trademarks or trademarks of the Apache Software Foundation in the United States and other countries.
 </div>
 

Modified: incubator/datafu/site/javascripts/all.js
URL: http://svn.apache.org/viewvc/incubator/datafu/site/javascripts/all.js?rev=1709884&r1=1709883&r2=1709884&view=diff
==============================================================================
--- incubator/datafu/site/javascripts/all.js (original)
+++ incubator/datafu/site/javascripts/all.js Wed Oct 21 17:00:40 2015
@@ -13,5 +13,25 @@
 
 
 if("undefined"==typeof jQuery)throw new Error("Bootstrap requires jQuery");+function(a){"use strict";function b(){var a=document.createElement("bootstrap"),b={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"};for(var c in b)if(void 0!==a.style[c])return{end:b[c]}}a.fn.emulateTransitionEnd=function(b){var c=!1,d=this;a(this).one(a.support.transition.end,function(){c=!0});var e=function(){c||a(d).trigger(a.support.transition.end)};return setTimeout(e,b),this},a(function(){a.support.transition=b()})}(jQuery),+function(a){"use strict";var b='[data-dismiss="alert"]',c=function(c){a(c).on("click",b,this.close)};c.prototype.close=function(b){function c(){f.trigger("closed.bs.alert").remove()}var d=a(this),e=d.attr("data-target");e||(e=d.attr("href"),e=e&&e.replace(/.*(?=#[^\s]*$)/,""));var f=a(e);b&&b.preventDefault(),f.length||(f=d.hasClass("alert")?d:d.parent()),f.trigger(b=a.Event("close.bs.alert"
 )),b.isDefaultPrevented()||(f.removeClass("in"),a.support.transition&&f.hasClass("fade")?f.one(a.support.transition.end,c).emulateTransitionEnd(150):c())};var d=a.fn.alert;a.fn.alert=function(b){return this.each(function(){var d=a(this),e=d.data("bs.alert");e||d.data("bs.alert",e=new c(this)),"string"==typeof b&&e[b].call(d)})},a.fn.alert.Constructor=c,a.fn.alert.noConflict=function(){return a.fn.alert=d,this},a(document).on("click.bs.alert.data-api",b,c.prototype.close)}(jQuery),+function(a){"use strict";var b=function(c,d){this.$element=a(c),this.options=a.extend({},b.DEFAULTS,d)};b.DEFAULTS={loadingText:"loading..."},b.prototype.setState=function(a){var b="disabled",c=this.$element,d=c.is("input")?"val":"html",e=c.data();a+="Text",e.resetText||c.data("resetText",c[d]()),c[d](e[a]||this.options[a]),setTimeout(function(){"loadingText"==a?c.addClass(b).attr(b,b):c.removeClass(b).removeAttr(b)},0)},b.prototype.toggle=function(){var a=this.$element.closest('[data-toggle="buttons"]'),b
 =!0;if(a.length){var c=this.$element.find("input");"radio"===c.prop("type")&&(c.prop("checked")&&this.$element.hasClass("active")?b=!1:a.find(".active").removeClass("active")),b&&c.prop("checked",!this.$element.hasClass("active")).trigger("change")}b&&this.$element.toggleClass("active")};var c=a.fn.button;a.fn.button=function(c){return this.each(function(){var d=a(this),e=d.data("bs.button"),f="object"==typeof c&&c;e||d.data("bs.button",e=new b(this,f)),"toggle"==c?e.toggle():c&&e.setState(c)})},a.fn.button.Constructor=b,a.fn.button.noConflict=function(){return a.fn.button=c,this},a(document).on("click.bs.button.data-api","[data-toggle^=button]",function(b){var c=a(b.target);c.hasClass("btn")||(c=c.closest(".btn")),c.button("toggle"),b.preventDefault()})}(jQuery),+function(a){"use strict";var b=function(b,c){this.$element=a(b),this.$indicators=this.$element.find(".carousel-indicators"),this.options=c,this.paused=this.sliding=this.interval=this.$active=this.$items=null,"hover"==this.
 options.pause&&this.$element.on("mouseenter",a.proxy(this.pause,this)).on("mouseleave",a.proxy(this.cycle,this))};b.DEFAULTS={interval:5e3,pause:"hover",wrap:!0},b.prototype.cycle=function(b){return b||(this.paused=!1),this.interval&&clearInterval(this.interval),this.options.interval&&!this.paused&&(this.interval=setInterval(a.proxy(this.next,this),this.options.interval)),this},b.prototype.getActiveIndex=function(){return this.$active=this.$element.find(".item.active"),this.$items=this.$active.parent().children(),this.$items.index(this.$active)},b.prototype.to=function(b){var c=this,d=this.getActiveIndex();return b>this.$items.length-1||0>b?void 0:this.sliding?this.$element.one("slid.bs.carousel",function(){c.to(b)}):d==b?this.pause().cycle():this.slide(b>d?"next":"prev",a(this.$items[b]))},b.prototype.pause=function(b){return b||(this.paused=!0),this.$element.find(".next, .prev").length&&a.support.transition.end&&(this.$element.trigger(a.support.transition.end),this.cycle(!0)),this
 .interval=clearInterval(this.interval),this},b.prototype.next=function(){return this.sliding?void 0:this.slide("next")},b.prototype.prev=function(){return this.sliding?void 0:this.slide("prev")},b.prototype.slide=function(b,c){var d=this.$element.find(".item.active"),e=c||d[b](),f=this.interval,g="next"==b?"left":"right",h="next"==b?"first":"last",i=this;if(!e.length){if(!this.options.wrap)return;e=this.$element.find(".item")[h]()}this.sliding=!0,f&&this.pause();var j=a.Event("slide.bs.carousel",{relatedTarget:e[0],direction:g});if(!e.hasClass("active")){if(this.$indicators.length&&(this.$indicators.find(".active").removeClass("active"),this.$element.one("slid.bs.carousel",function(){var b=a(i.$indicators.children()[i.getActiveIndex()]);b&&b.addClass("active")})),a.support.transition&&this.$element.hasClass("slide")){if(this.$element.trigger(j),j.isDefaultPrevented())return;e.addClass(b),e[0].offsetWidth,d.addClass(g),e.addClass(g),d.one(a.support.transition.end,function(){e.removeC
 lass([b,g].join(" ")).addClass("active"),d.removeClass(["active",g].join(" ")),i.sliding=!1,setTimeout(function(){i.$element.trigger("slid.bs.carousel")},0)}).emulateTransitionEnd(600)}else{if(this.$element.trigger(j),j.isDefaultPrevented())return;d.removeClass("active"),e.addClass("active"),this.sliding=!1,this.$element.trigger("slid.bs.carousel")}return f&&this.cycle(),this}};var c=a.fn.carousel;a.fn.carousel=function(c){return this.each(function(){var d=a(this),e=d.data("bs.carousel"),f=a.extend({},b.DEFAULTS,d.data(),"object"==typeof c&&c),g="string"==typeof c?c:f.slide;e||d.data("bs.carousel",e=new b(this,f)),"number"==typeof c?e.to(c):g?e[g]():f.interval&&e.pause().cycle()})},a.fn.carousel.Constructor=b,a.fn.carousel.noConflict=function(){return a.fn.carousel=c,this},a(document).on("click.bs.carousel.data-api","[data-slide], [data-slide-to]",function(b){var c,d=a(this),e=a(d.attr("data-target")||(c=d.attr("href"))&&c.replace(/.*(?=#[^\s]+$)/,"")),f=a.extend({},e.data(),d.data(
 )),g=d.attr("data-slide-to");g&&(f.interval=!1),e.carousel(f),(g=d.attr("data-slide-to"))&&e.data("bs.carousel").to(g),b.preventDefault()}),a(window).on("load",function(){a('[data-ride="carousel"]').each(function(){var b=a(this);b.carousel(b.data())})})}(jQuery),+function(a){"use strict";var b=function(c,d){this.$element=a(c),this.options=a.extend({},b.DEFAULTS,d),this.transitioning=null,this.options.parent&&(this.$parent=a(this.options.parent)),this.options.toggle&&this.toggle()};b.DEFAULTS={toggle:!0},b.prototype.dimension=function(){var a=this.$element.hasClass("width");return a?"width":"height"},b.prototype.show=function(){if(!this.transitioning&&!this.$element.hasClass("in")){var b=a.Event("show.bs.collapse");if(this.$element.trigger(b),!b.isDefaultPrevented()){var c=this.$parent&&this.$parent.find("> .panel > .in");if(c&&c.length){var d=c.data("bs.collapse");if(d&&d.transitioning)return;c.collapse("hide"),d||c.data("bs.collapse",null)}var e=this.dimension();this.$element.remov
 eClass("collapse").addClass("collapsing")[e](0),this.transitioning=1;var f=function(){this.$element.removeClass("collapsing").addClass("in")[e]("auto"),this.transitioning=0,this.$element.trigger("shown.bs.collapse")};if(!a.support.transition)return f.call(this);var g=a.camelCase(["scroll",e].join("-"));this.$element.one(a.support.transition.end,a.proxy(f,this)).emulateTransitionEnd(350)[e](this.$element[0][g])}}},b.prototype.hide=function(){if(!this.transitioning&&this.$element.hasClass("in")){var b=a.Event("hide.bs.collapse");if(this.$element.trigger(b),!b.isDefaultPrevented()){var c=this.dimension();this.$element[c](this.$element[c]())[0].offsetHeight,this.$element.addClass("collapsing").removeClass("collapse").removeClass("in"),this.transitioning=1;var d=function(){this.transitioning=0,this.$element.trigger("hidden.bs.collapse").removeClass("collapsing").addClass("collapse")};return a.support.transition?(this.$element[c](0).one(a.support.transition.end,a.proxy(d,this)).emulateTra
 nsitionEnd(350),void 0):d.call(this)}}},b.prototype.toggle=function(){this[this.$element.hasClass("in")?"hide":"show"]()};var c=a.fn.collapse;a.fn.collapse=function(c){return this.each(function(){var d=a(this),e=d.data("bs.collapse"),f=a.extend({},b.DEFAULTS,d.data(),"object"==typeof c&&c);e||d.data("bs.collapse",e=new b(this,f)),"string"==typeof c&&e[c]()})},a.fn.collapse.Constructor=b,a.fn.collapse.noConflict=function(){return a.fn.collapse=c,this},a(document).on("click.bs.collapse.data-api","[data-toggle=collapse]",function(b){var c,d=a(this),e=d.attr("data-target")||b.preventDefault()||(c=d.attr("href"))&&c.replace(/.*(?=#[^\s]+$)/,""),f=a(e),g=f.data("bs.collapse"),h=g?"toggle":d.data(),i=d.attr("data-parent"),j=i&&a(i);g&&g.transitioning||(j&&j.find('[data-toggle=collapse][data-parent="'+i+'"]').not(d).addClass("collapsed"),d[f.hasClass("in")?"addClass":"removeClass"]("collapsed")),f.collapse(h)})}(jQuery),+function(a){"use strict";function b(){a(d).remove(),a(e).each(function
 (b){var d=c(a(this));d.hasClass("open")&&(d.trigger(b=a.Event("hide.bs.dropdown")),b.isDefaultPrevented()||d.removeClass("open").trigger("hidden.bs.dropdown"))})}function c(b){var c=b.attr("data-target");c||(c=b.attr("href"),c=c&&/#/.test(c)&&c.replace(/.*(?=#[^\s]*$)/,""));var d=c&&a(c);return d&&d.length?d:b.parent()}var d=".dropdown-backdrop",e="[data-toggle=dropdown]",f=function(b){a(b).on("click.bs.dropdown",this.toggle)};f.prototype.toggle=function(d){var e=a(this);if(!e.is(".disabled, :disabled")){var f=c(e),g=f.hasClass("open");if(b(),!g){if("ontouchstart"in document.documentElement&&!f.closest(".navbar-nav").length&&a('<div class="dropdown-backdrop"/>').insertAfter(a(this)).on("click",b),f.trigger(d=a.Event("show.bs.dropdown")),d.isDefaultPrevented())return;f.toggleClass("open").trigger("shown.bs.dropdown"),e.focus()}return!1}},f.prototype.keydown=function(b){if(/(38|40|27)/.test(b.keyCode)){var d=a(this);if(b.preventDefault(),b.stopPropagation(),!d.is(".disabled, :disabled
 ")){var f=c(d),g=f.hasClass("open");if(!g||g&&27==b.keyCode)return 27==b.which&&f.find(e).focus(),d.click();var h=a("[role=menu] li:not(.divider):visible a",f);if(h.length){var i=h.index(h.filter(":focus"));38==b.keyCode&&i>0&&i--,40==b.keyCode&&i<h.length-1&&i++,~i||(i=0),h.eq(i).focus()}}}};var g=a.fn.dropdown;a.fn.dropdown=function(b){return this.each(function(){var c=a(this),d=c.data("bs.dropdown");d||c.data("bs.dropdown",d=new f(this)),"string"==typeof b&&d[b].call(c)})},a.fn.dropdown.Constructor=f,a.fn.dropdown.noConflict=function(){return a.fn.dropdown=g,this},a(document).on("click.bs.dropdown.data-api",b).on("click.bs.dropdown.data-api",".dropdown form",function(a){a.stopPropagation()}).on("click.bs.dropdown.data-api",e,f.prototype.toggle).on("keydown.bs.dropdown.data-api",e+", [role=menu]",f.prototype.keydown)}(jQuery),+function(a){"use strict";var b=function(b,c){this.options=c,this.$element=a(b),this.$backdrop=this.isShown=null,this.options.remote&&this.$element.load(this
 .options.remote)};b.DEFAULTS={backdrop:!0,keyboard:!0,show:!0},b.prototype.toggle=function(a){return this[this.isShown?"hide":"show"](a)},b.prototype.show=function(b){var c=this,d=a.Event("show.bs.modal",{relatedTarget:b});this.$element.trigger(d),this.isShown||d.isDefaultPrevented()||(this.isShown=!0,this.escape(),this.$element.on("click.dismiss.modal",'[data-dismiss="modal"]',a.proxy(this.hide,this)),this.backdrop(function(){var d=a.support.transition&&c.$element.hasClass("fade");c.$element.parent().length||c.$element.appendTo(document.body),c.$element.show(),d&&c.$element[0].offsetWidth,c.$element.addClass("in").attr("aria-hidden",!1),c.enforceFocus();var e=a.Event("shown.bs.modal",{relatedTarget:b});d?c.$element.find(".modal-dialog").one(a.support.transition.end,function(){c.$element.focus().trigger(e)}).emulateTransitionEnd(300):c.$element.focus().trigger(e)}))},b.prototype.hide=function(b){b&&b.preventDefault(),b=a.Event("hide.bs.modal"),this.$element.trigger(b),this.isShown&&
 !b.isDefaultPrevented()&&(this.isShown=!1,this.escape(),a(document).off("focusin.bs.modal"),this.$element.removeClass("in").attr("aria-hidden",!0).off("click.dismiss.modal"),a.support.transition&&this.$element.hasClass("fade")?this.$element.one(a.support.transition.end,a.proxy(this.hideModal,this)).emulateTransitionEnd(300):this.hideModal())},b.prototype.enforceFocus=function(){a(document).off("focusin.bs.modal").on("focusin.bs.modal",a.proxy(function(a){this.$element[0]===a.target||this.$element.has(a.target).length||this.$element.focus()},this))},b.prototype.escape=function(){this.isShown&&this.options.keyboard?this.$element.on("keyup.dismiss.bs.modal",a.proxy(function(a){27==a.which&&this.hide()},this)):this.isShown||this.$element.off("keyup.dismiss.bs.modal")},b.prototype.hideModal=function(){var a=this;this.$element.hide(),this.backdrop(function(){a.removeBackdrop(),a.$element.trigger("hidden.bs.modal")})},b.prototype.removeBackdrop=function(){this.$backdrop&&this.$backdrop.rem
 ove(),this.$backdrop=null},b.prototype.backdrop=function(b){var c=this.$element.hasClass("fade")?"fade":"";if(this.isShown&&this.options.backdrop){var d=a.support.transition&&c;if(this.$backdrop=a('<div class="modal-backdrop '+c+'" />').appendTo(document.body),this.$element.on("click.dismiss.modal",a.proxy(function(a){a.target===a.currentTarget&&("static"==this.options.backdrop?this.$element[0].focus.call(this.$element[0]):this.hide.call(this))},this)),d&&this.$backdrop[0].offsetWidth,this.$backdrop.addClass("in"),!b)return;d?this.$backdrop.one(a.support.transition.end,b).emulateTransitionEnd(150):b()}else!this.isShown&&this.$backdrop?(this.$backdrop.removeClass("in"),a.support.transition&&this.$element.hasClass("fade")?this.$backdrop.one(a.support.transition.end,b).emulateTransitionEnd(150):b()):b&&b()};var c=a.fn.modal;a.fn.modal=function(c,d){return this.each(function(){var e=a(this),f=e.data("bs.modal"),g=a.extend({},b.DEFAULTS,e.data(),"object"==typeof c&&c);f||e.data("bs.modal
 ",f=new b(this,g)),"string"==typeof c?f[c](d):g.show&&f.show(d)})},a.fn.modal.Constructor=b,a.fn.modal.noConflict=function(){return a.fn.modal=c,this},a(document).on("click.bs.modal.data-api",'[data-toggle="modal"]',function(b){var c=a(this),d=c.attr("href"),e=a(c.attr("data-target")||d&&d.replace(/.*(?=#[^\s]+$)/,"")),f=e.data("modal")?"toggle":a.extend({remote:!/#/.test(d)&&d},e.data(),c.data());b.preventDefault(),e.modal(f,this).one("hide",function(){c.is(":visible")&&c.focus()})}),a(document).on("show.bs.modal",".modal",function(){a(document.body).addClass("modal-open")}).on("hidden.bs.modal",".modal",function(){a(document.body).removeClass("modal-open")})}(jQuery),+function(a){"use strict";var b=function(a,b){this.type=this.options=this.enabled=this.timeout=this.hoverState=this.$element=null,this.init("tooltip",a,b)};b.DEFAULTS={animation:!0,placement:"top",selector:!1,template:'<div class="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>',trigg
 er:"hover focus",title:"",delay:0,html:!1,container:!1},b.prototype.init=function(b,c,d){this.enabled=!0,this.type=b,this.$element=a(c),this.options=this.getOptions(d);for(var e=this.options.trigger.split(" "),f=e.length;f--;){var g=e[f];if("click"==g)this.$element.on("click."+this.type,this.options.selector,a.proxy(this.toggle,this));else if("manual"!=g){var h="hover"==g?"mouseenter":"focus",i="hover"==g?"mouseleave":"blur";this.$element.on(h+"."+this.type,this.options.selector,a.proxy(this.enter,this)),this.$element.on(i+"."+this.type,this.options.selector,a.proxy(this.leave,this))}}this.options.selector?this._options=a.extend({},this.options,{trigger:"manual",selector:""}):this.fixTitle()},b.prototype.getDefaults=function(){return b.DEFAULTS},b.prototype.getOptions=function(b){return b=a.extend({},this.getDefaults(),this.$element.data(),b),b.delay&&"number"==typeof b.delay&&(b.delay={show:b.delay,hide:b.delay}),b},b.prototype.getDelegateOptions=function(){var b={},c=this.getDefau
 lts();return this._options&&a.each(this._options,function(a,d){c[a]!=d&&(b[a]=d)}),b},b.prototype.enter=function(b){var c=b instanceof this.constructor?b:a(b.currentTarget)[this.type](this.getDelegateOptions()).data("bs."+this.type);return clearTimeout(c.timeout),c.hoverState="in",c.options.delay&&c.options.delay.show?(c.timeout=setTimeout(function(){"in"==c.hoverState&&c.show()},c.options.delay.show),void 0):c.show()},b.prototype.leave=function(b){var c=b instanceof this.constructor?b:a(b.currentTarget)[this.type](this.getDelegateOptions()).data("bs."+this.type);return clearTimeout(c.timeout),c.hoverState="out",c.options.delay&&c.options.delay.hide?(c.timeout=setTimeout(function(){"out"==c.hoverState&&c.hide()},c.options.delay.hide),void 0):c.hide()},b.prototype.show=function(){var b=a.Event("show.bs."+this.type);if(this.hasContent()&&this.enabled){if(this.$element.trigger(b),b.isDefaultPrevented())return;var c=this.tip();this.setContent(),this.options.animation&&c.addClass("fade")
 ;var d="function"==typeof this.options.placement?this.options.placement.call(this,c[0],this.$element[0]):this.options.placement,e=/\s?auto?\s?/i,f=e.test(d);f&&(d=d.replace(e,"")||"top"),c.detach().css({top:0,left:0,display:"block"}).addClass(d),this.options.container?c.appendTo(this.options.container):c.insertAfter(this.$element);var g=this.getPosition(),h=c[0].offsetWidth,i=c[0].offsetHeight;if(f){var j=this.$element.parent(),k=d,l=document.documentElement.scrollTop||document.body.scrollTop,m="body"==this.options.container?window.innerWidth:j.outerWidth(),n="body"==this.options.container?window.innerHeight:j.outerHeight(),o="body"==this.options.container?0:j.offset().left;d="bottom"==d&&g.top+g.height+i-l>n?"top":"top"==d&&g.top-l-i<0?"bottom":"right"==d&&g.right+h>m?"left":"left"==d&&g.left-h<o?"right":d,c.removeClass(k).addClass(d)}var p=this.getCalculatedOffset(d,g,h,i);this.applyPlacement(p,d),this.$element.trigger("shown.bs."+this.type)}},b.prototype.applyPlacement=function(a
 ,b){var c,d=this.tip(),e=d[0].offsetWidth,f=d[0].offsetHeight,g=parseInt(d.css("margin-top"),10),h=parseInt(d.css("margin-left"),10);isNaN(g)&&(g=0),isNaN(h)&&(h=0),a.top=a.top+g,a.left=a.left+h,d.offset(a).addClass("in");var i=d[0].offsetWidth,j=d[0].offsetHeight;if("top"==b&&j!=f&&(c=!0,a.top=a.top+f-j),/bottom|top/.test(b)){var k=0;a.left<0&&(k=-2*a.left,a.left=0,d.offset(a),i=d[0].offsetWidth,j=d[0].offsetHeight),this.replaceArrow(k-e+i,i,"left")}else this.replaceArrow(j-f,j,"top");c&&d.offset(a)},b.prototype.replaceArrow=function(a,b,c){this.arrow().css(c,a?50*(1-a/b)+"%":"")},b.prototype.setContent=function(){var a=this.tip(),b=this.getTitle();a.find(".tooltip-inner")[this.options.html?"html":"text"](b),a.removeClass("fade in top bottom left right")},b.prototype.hide=function(){function b(){"in"!=c.hoverState&&d.detach()}var c=this,d=this.tip(),e=a.Event("hide.bs."+this.type);return this.$element.trigger(e),e.isDefaultPrevented()?void 0:(d.removeClass("in"),a.support.transitio
 n&&this.$tip.hasClass("fade")?d.one(a.support.transition.end,b).emulateTransitionEnd(150):b(),this.$element.trigger("hidden.bs."+this.type),this)},b.prototype.fixTitle=function(){var a=this.$element;(a.attr("title")||"string"!=typeof a.attr("data-original-title"))&&a.attr("data-original-title",a.attr("title")||"").attr("title","")},b.prototype.hasContent=function(){return this.getTitle()},b.prototype.getPosition=function(){var b=this.$element[0];return a.extend({},"function"==typeof b.getBoundingClientRect?b.getBoundingClientRect():{width:b.offsetWidth,height:b.offsetHeight},this.$element.offset())},b.prototype.getCalculatedOffset=function(a,b,c,d){return"bottom"==a?{top:b.top+b.height,left:b.left+b.width/2-c/2}:"top"==a?{top:b.top-d,left:b.left+b.width/2-c/2}:"left"==a?{top:b.top+b.height/2-d/2,left:b.left-c}:{top:b.top+b.height/2-d/2,left:b.left+b.width}},b.prototype.getTitle=function(){var a,b=this.$element,c=this.options;return a=b.attr("data-original-title")||("function"==typeo
 f c.title?c.title.call(b[0]):c.title)},b.prototype.tip=function(){return this.$tip=this.$tip||a(this.options.template)},b.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".tooltip-arrow")},b.prototype.validate=function(){this.$element[0].parentNode||(this.hide(),this.$element=null,this.options=null)},b.prototype.enable=function(){this.enabled=!0},b.prototype.disable=function(){this.enabled=!1},b.prototype.toggleEnabled=function(){this.enabled=!this.enabled},b.prototype.toggle=function(b){var c=b?a(b.currentTarget)[this.type](this.getDelegateOptions()).data("bs."+this.type):this;c.tip().hasClass("in")?c.leave(c):c.enter(c)},b.prototype.destroy=function(){this.hide().$element.off("."+this.type).removeData("bs."+this.type)};var c=a.fn.tooltip;a.fn.tooltip=function(c){return this.each(function(){var d=a(this),e=d.data("bs.tooltip"),f="object"==typeof c&&c;e||d.data("bs.tooltip",e=new b(this,f)),"string"==typeof c&&e[c]()})},a.fn.tooltip.Constructor=b,a.fn.tool
 tip.noConflict=function(){return a.fn.tooltip=c,this}}(jQuery),+function(a){"use strict";var b=function(a,b){this.init("popover",a,b)};if(!a.fn.tooltip)throw new Error("Popover requires tooltip.js");b.DEFAULTS=a.extend({},a.fn.tooltip.Constructor.DEFAULTS,{placement:"right",trigger:"click",content:"",template:'<div class="popover"><div class="arrow"></div><h3 class="popover-title"></h3><div class="popover-content"></div></div>'}),b.prototype=a.extend({},a.fn.tooltip.Constructor.prototype),b.prototype.constructor=b,b.prototype.getDefaults=function(){return b.DEFAULTS},b.prototype.setContent=function(){var a=this.tip(),b=this.getTitle(),c=this.getContent();a.find(".popover-title")[this.options.html?"html":"text"](b),a.find(".popover-content")[this.options.html?"html":"text"](c),a.removeClass("fade top bottom left right in"),a.find(".popover-title").html()||a.find(".popover-title").hide()},b.prototype.hasContent=function(){return this.getTitle()||this.getContent()},b.prototype.getConte
 nt=function(){var a=this.$element,b=this.options;return a.attr("data-content")||("function"==typeof b.content?b.content.call(a[0]):b.content)},b.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".arrow")},b.prototype.tip=function(){return this.$tip||(this.$tip=a(this.options.template)),this.$tip};var c=a.fn.popover;a.fn.popover=function(c){return this.each(function(){var d=a(this),e=d.data("bs.popover"),f="object"==typeof c&&c;e||d.data("bs.popover",e=new b(this,f)),"string"==typeof c&&e[c]()})},a.fn.popover.Constructor=b,a.fn.popover.noConflict=function(){return a.fn.popover=c,this}}(jQuery),+function(a){"use strict";function b(c,d){var e,f=a.proxy(this.process,this);this.$element=a(c).is("body")?a(window):a(c),this.$body=a("body"),this.$scrollElement=this.$element.on("scroll.bs.scroll-spy.data-api",f),this.options=a.extend({},b.DEFAULTS,d),this.selector=(this.options.target||(e=a(c).attr("href"))&&e.replace(/.*(?=#[^\s]+$)/,"")||"")+" .nav li > a",this.of
 fsets=a([]),this.targets=a([]),this.activeTarget=null,this.refresh(),this.process()}b.DEFAULTS={offset:10},b.prototype.refresh=function(){var b=this.$element[0]==window?"offset":"position";this.offsets=a([]),this.targets=a([]);var c=this;this.$body.find(this.selector).map(function(){var d=a(this),e=d.data("target")||d.attr("href"),f=/^#\w/.test(e)&&a(e);return f&&f.length&&[[f[b]().top+(!a.isWindow(c.$scrollElement.get(0))&&c.$scrollElement.scrollTop()),e]]||null}).sort(function(a,b){return a[0]-b[0]}).each(function(){c.offsets.push(this[0]),c.targets.push(this[1])})},b.prototype.process=function(){var a,b=this.$scrollElement.scrollTop()+this.options.offset,c=this.$scrollElement[0].scrollHeight||this.$body[0].scrollHeight,d=c-this.$scrollElement.height(),e=this.offsets,f=this.targets,g=this.activeTarget;if(b>=d)return g!=(a=f.last()[0])&&this.activate(a);for(a=e.length;a--;)g!=f[a]&&b>=e[a]&&(!e[a+1]||b<=e[a+1])&&this.activate(f[a])},b.prototype.activate=function(b){this.activeTarge
 t=b,a(this.selector).parents(".active").removeClass("active");var c=this.selector+'[data-target="'+b+'"],'+this.selector+'[href="'+b+'"]',d=a(c).parents("li").addClass("active");d.parent(".dropdown-menu").length&&(d=d.closest("li.dropdown").addClass("active")),d.trigger("activate.bs.scrollspy")};var c=a.fn.scrollspy;a.fn.scrollspy=function(c){return this.each(function(){var d=a(this),e=d.data("bs.scrollspy"),f="object"==typeof c&&c;e||d.data("bs.scrollspy",e=new b(this,f)),"string"==typeof c&&e[c]()})},a.fn.scrollspy.Constructor=b,a.fn.scrollspy.noConflict=function(){return a.fn.scrollspy=c,this},a(window).on("load",function(){a('[data-spy="scroll"]').each(function(){var b=a(this);b.scrollspy(b.data())})})}(jQuery),+function(a){"use strict";var b=function(b){this.element=a(b)};b.prototype.show=function(){var b=this.element,c=b.closest("ul:not(.dropdown-menu)"),d=b.data("target");if(d||(d=b.attr("href"),d=d&&d.replace(/.*(?=#[^\s]*$)/,"")),!b.parent("li").hasClass("active")){var e=c.
 find(".active:last a")[0],f=a.Event("show.bs.tab",{relatedTarget:e});if(b.trigger(f),!f.isDefaultPrevented()){var g=a(d);this.activate(b.parent("li"),c),this.activate(g,g.parent(),function(){b.trigger({type:"shown.bs.tab",relatedTarget:e})})}}},b.prototype.activate=function(b,c,d){function e(){f.removeClass("active").find("> .dropdown-menu > .active").removeClass("active"),b.addClass("active"),g?(b[0].offsetWidth,b.addClass("in")):b.removeClass("fade"),b.parent(".dropdown-menu")&&b.closest("li.dropdown").addClass("active"),d&&d()}var f=c.find("> .active"),g=d&&a.support.transition&&f.hasClass("fade");g?f.one(a.support.transition.end,e).emulateTransitionEnd(150):e(),f.removeClass("in")};var c=a.fn.tab;a.fn.tab=function(c){return this.each(function(){var d=a(this),e=d.data("bs.tab");e||d.data("bs.tab",e=new b(this)),"string"==typeof c&&e[c]()})},a.fn.tab.Constructor=b,a.fn.tab.noConflict=function(){return a.fn.tab=c,this},a(document).on("click.bs.tab.data-api",'[data-toggle="tab"], [d
 ata-toggle="pill"]',function(b){b.preventDefault(),a(this).tab("show")})}(jQuery),+function(a){"use strict";var b=function(c,d){this.options=a.extend({},b.DEFAULTS,d),this.$window=a(window).on("scroll.bs.affix.data-api",a.proxy(this.checkPosition,this)).on("click.bs.affix.data-api",a.proxy(this.checkPositionWithEventLoop,this)),this.$element=a(c),this.affixed=this.unpin=null,this.checkPosition()};b.RESET="affix affix-top affix-bottom",b.DEFAULTS={offset:0},b.prototype.checkPositionWithEventLoop=function(){setTimeout(a.proxy(this.checkPosition,this),1)},b.prototype.checkPosition=function(){if(this.$element.is(":visible")){var c=a(document).height(),d=this.$window.scrollTop(),e=this.$element.offset(),f=this.options.offset,g=f.top,h=f.bottom;"object"!=typeof f&&(h=g=f),"function"==typeof g&&(g=f.top()),"function"==typeof h&&(h=f.bottom());var i=null!=this.unpin&&d+this.unpin<=e.top?!1:null!=h&&e.top+this.$element.height()>=c-h?"bottom":null!=g&&g>=d?"top":!1;this.affixed!==i&&(this.unp
 in&&this.$element.css("top",""),this.affixed=i,this.unpin="bottom"==i?e.top-d:null,this.$element.removeClass(b.RESET).addClass("affix"+(i?"-"+i:"")),"bottom"==i&&this.$element.offset({top:document.body.offsetHeight-h-this.$element.height()}))}};var c=a.fn.affix;a.fn.affix=function(c){return this.each(function(){var d=a(this),e=d.data("bs.affix"),f="object"==typeof c&&c;e||d.data("bs.affix",e=new b(this,f)),"string"==typeof c&&e[c]()})},a.fn.affix.Constructor=b,a.fn.affix.noConflict=function(){return a.fn.affix=c,this},a(window).on("load",function(){a('[data-spy="affix"]').each(function(){var b=a(this),c=b.data();c.offset=c.offset||{},c.offsetBottom&&(c.offset.bottom=c.offsetBottom),c.offsetTop&&(c.offset.top=c.offsetTop),b.affix(c)})})}(jQuery);
+/*
+ * 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.
+ */
 
 
+
+;