http://git-wip-us.apache.org/repos/asf/kudu-site/blob/bc4e6c33/2016/08/31/intro-flume-kudu-sink.html
----------------------------------------------------------------------
diff --git a/2016/08/31/intro-flume-kudu-sink.html 
b/2016/08/31/intro-flume-kudu-sink.html
index d9ca72d..06c3d76 100644
--- a/2016/08/31/intro-flume-kudu-sink.html
+++ b/2016/08/31/intro-flume-kudu-sink.html
@@ -219,7 +219,7 @@ release and the source code can be found <a 
href="https://github.com/apache/kudu
 
 <p>Here is a sample flume configuration file:</p>
 
-<div class="highlighter-rouge"><pre class="highlight"><code>agent1.sources  = 
source1
+<pre><code>agent1.sources  = source1
 agent1.channels = channel1
 agent1.sinks = sink1
 
@@ -238,25 +238,24 @@ agent1.sinks.sink1.channel = channel1
 agent1.sinks.sink1.batchSize = 50
 agent1.sinks.sink1.producer = 
org.apache.kudu.flume.sink.SimpleKuduEventProducer
 </code></pre>
-</div>
 
-<p>We define a source called <code class="highlighter-rouge">source1</code> 
which simply executes a <code class="highlighter-rouge">vmstat</code> command 
to continuously generate
-virtual memory statistics for the machine and queue events into an in-memory 
<code class="highlighter-rouge">channel1</code> channel,
-which in turn is used for writing these events to a Kudu table called <code 
class="highlighter-rouge">stats</code>. We are using
-<code 
class="highlighter-rouge">org.apache.kudu.flume.sink.SimpleKuduEventProducer</code>
 as the producer. <code 
class="highlighter-rouge">SimpleKuduEventProducer</code> is
+<p>We define a source called <code>source1</code> which simply executes a 
<code>vmstat</code> command to continuously generate
+virtual memory statistics for the machine and queue events into an in-memory 
<code>channel1</code> channel,
+which in turn is used for writing these events to a Kudu table called 
<code>stats</code>. We are using
+<code>org.apache.kudu.flume.sink.SimpleKuduEventProducer</code> as the 
producer. <code>SimpleKuduEventProducer</code> is
 the built-in and default producer, but it’s implemented as a showcase for 
how to write Flume
 events into Kudu tables. For any serious functionality we’d have to write a 
custom producer. We
-need to make this producer and the <code 
class="highlighter-rouge">KuduSink</code> class available to Flume. We can do 
that by simply
-copying the <code 
class="highlighter-rouge">kudu-flume-sink-&lt;VERSION&gt;.jar</code> jar file 
from the Kudu distribution to the
-<code class="highlighter-rouge">$FLUME_HOME/plugins.d/kudu-sink/lib</code> 
directory in the Flume installation. The jar file contains
-<code class="highlighter-rouge">KuduSink</code> and all of its dependencies 
(including Kudu java client classes).</p>
+need to make this producer and the <code>KuduSink</code> class available to 
Flume. We can do that by simply
+copying the <code>kudu-flume-sink-&lt;VERSION&gt;.jar</code> jar file from the 
Kudu distribution to the
+<code>$FLUME_HOME/plugins.d/kudu-sink/lib</code> directory in the Flume 
installation. The jar file contains
+<code>KuduSink</code> and all of its dependencies (including Kudu java client 
classes).</p>
 
 <p>At a minimum, the Kudu Flume Sink needs to know where the Kudu masters are
-(<code class="highlighter-rouge">agent1.sinks.sink1.masterAddresses = 
localhost</code>) and which Kudu table should be used for writing
-Flume events to (<code class="highlighter-rouge">agent1.sinks.sink1.tableName 
= stats</code>). The Kudu Flume Sink doesn’t create this
+(<code>agent1.sinks.sink1.masterAddresses = localhost</code>) and which Kudu 
table should be used for writing
+Flume events to (<code>agent1.sinks.sink1.tableName = stats</code>). The Kudu 
Flume Sink doesn’t create this
 table, it has to be created before the Kudu Flume Sink is started.</p>
 
-<p>You may also notice the <code class="highlighter-rouge">batchSize</code> 
parameter. Batch size is used for batching up to that many
+<p>You may also notice the <code>batchSize</code> parameter. Batch size is 
used for batching up to that many
 Flume events and flushing the entire batch in one shot. Tuning batchSize 
properly can have a huge
 impact on ingest performance of the Kudu cluster.</p>
 
@@ -306,91 +305,89 @@ impact on ingest performance of the Kudu cluster.</p>
 
 <p>Let’s take a look at the source code for the built-in producer class:</p>
 
-<div class="highlighter-rouge"><pre class="highlight"><code><span 
class="kd">public</span> <span class="kd">class</span> <span 
class="nc">SimpleKuduEventProducer</span> <span class="kd">implements</span> 
<span class="n">KuduEventProducer</span> <span class="o">{</span>
-  <span class="kd">private</span> <span class="kt">byte</span><span 
class="o">[]</span> <span class="n">payload</span><span class="o">;</span>
-  <span class="kd">private</span> <span class="n">KuduTable</span> <span 
class="n">table</span><span class="o">;</span>
-  <span class="kd">private</span> <span class="n">String</span> <span 
class="n">payloadColumn</span><span class="o">;</span>
-
-  <span class="kd">public</span> <span 
class="n">SimpleKuduEventProducer</span><span class="o">(){</span>
-  <span class="o">}</span>
-
-  <span class="nd">@Override</span>
-  <span class="kd">public</span> <span class="kt">void</span> <span 
class="n">configure</span><span class="o">(</span><span 
class="n">Context</span> <span class="n">context</span><span class="o">)</span> 
<span class="o">{</span>
-    <span class="n">payloadColumn</span> <span class="o">=</span> <span 
class="n">context</span><span class="o">.</span><span 
class="na">getString</span><span class="o">(</span><span 
class="s">"payloadColumn"</span><span class="o">,</span><span 
class="s">"payload"</span><span class="o">);</span>
-  <span class="o">}</span>
-
-  <span class="nd">@Override</span>
-  <span class="kd">public</span> <span class="kt">void</span> <span 
class="n">configure</span><span class="o">(</span><span 
class="n">ComponentConfiguration</span> <span class="n">conf</span><span 
class="o">)</span> <span class="o">{</span>
-  <span class="o">}</span>
-
-  <span class="nd">@Override</span>
-  <span class="kd">public</span> <span class="kt">void</span> <span 
class="n">initialize</span><span class="o">(</span><span class="n">Event</span> 
<span class="n">event</span><span class="o">,</span> <span 
class="n">KuduTable</span> <span class="n">table</span><span class="o">)</span> 
<span class="o">{</span>
-    <span class="k">this</span><span class="o">.</span><span 
class="na">payload</span> <span class="o">=</span> <span 
class="n">event</span><span class="o">.</span><span 
class="na">getBody</span><span class="o">();</span>
-    <span class="k">this</span><span class="o">.</span><span 
class="na">table</span> <span class="o">=</span> <span 
class="n">table</span><span class="o">;</span>
-  <span class="o">}</span>
-
-  <span class="nd">@Override</span>
-  <span class="kd">public</span> <span class="n">List</span><span 
class="o">&lt;</span><span class="n">Operation</span><span 
class="o">&gt;</span> <span class="n">getOperations</span><span 
class="o">()</span> <span class="kd">throws</span> <span 
class="n">FlumeException</span> <span class="o">{</span>
-    <span class="k">try</span> <span class="o">{</span>
-      <span class="n">Insert</span> <span class="n">insert</span> <span 
class="o">=</span> <span class="n">table</span><span class="o">.</span><span 
class="na">newInsert</span><span class="o">();</span>
-      <span class="n">PartialRow</span> <span class="n">row</span> <span 
class="o">=</span> <span class="n">insert</span><span class="o">.</span><span 
class="na">getRow</span><span class="o">();</span>
-      <span class="n">row</span><span class="o">.</span><span 
class="na">addBinary</span><span class="o">(</span><span 
class="n">payloadColumn</span><span class="o">,</span> <span 
class="n">payload</span><span class="o">);</span>
-
-      <span class="k">return</span> <span class="n">Collections</span><span 
class="o">.</span><span class="na">singletonList</span><span 
class="o">((</span><span class="n">Operation</span><span class="o">)</span> 
<span class="n">insert</span><span class="o">);</span>
-    <span class="o">}</span> <span class="k">catch</span> <span 
class="o">(</span><span class="n">Exception</span> <span 
class="n">e</span><span class="o">){</span>
-      <span class="k">throw</span> <span class="k">new</span> <span 
class="n">FlumeException</span><span class="o">(</span><span class="s">"Failed 
to create Kudu Insert object!"</span><span class="o">,</span> <span 
class="n">e</span><span class="o">);</span>
-    <span class="o">}</span>
-  <span class="o">}</span>
-
-  <span class="nd">@Override</span>
-  <span class="kd">public</span> <span class="kt">void</span> <span 
class="n">close</span><span class="o">()</span> <span class="o">{</span>
-  <span class="o">}</span>
-<span class="o">}</span>
+<pre><code class="language-java">public class SimpleKuduEventProducer 
implements KuduEventProducer {
+  private byte[] payload;
+  private KuduTable table;
+  private String payloadColumn;
+
+  public SimpleKuduEventProducer(){
+  }
+
+  @Override
+  public void configure(Context context) {
+    payloadColumn = context.getString("payloadColumn","payload");
+  }
+
+  @Override
+  public void configure(ComponentConfiguration conf) {
+  }
+
+  @Override
+  public void initialize(Event event, KuduTable table) {
+    this.payload = event.getBody();
+    this.table = table;
+  }
+
+  @Override
+  public List&lt;Operation&gt; getOperations() throws FlumeException {
+    try {
+      Insert insert = table.newInsert();
+      PartialRow row = insert.getRow();
+      row.addBinary(payloadColumn, payload);
+
+      return Collections.singletonList((Operation) insert);
+    } catch (Exception e){
+      throw new FlumeException("Failed to create Kudu Insert object!", e);
+    }
+  }
+
+  @Override
+  public void close() {
+  }
+}
 </code></pre>
-</div>
 
-<p><code class="highlighter-rouge">SimpleKuduEventProducer</code> implements 
the <code 
class="highlighter-rouge">org.apache.kudu.flume.sink.KuduEventProducer</code> 
interface,
+<p><code>SimpleKuduEventProducer</code> implements the 
<code>org.apache.kudu.flume.sink.KuduEventProducer</code> interface,
 which itself looks like this:</p>
 
-<div class="highlighter-rouge"><pre class="highlight"><code><span 
class="kd">public</span> <span class="kd">interface</span> <span 
class="nc">KuduEventProducer</span> <span class="kd">extends</span> <span 
class="n">Configurable</span><span class="o">,</span> <span 
class="n">ConfigurableComponent</span> <span class="o">{</span>
-  <span class="cm">/**
+<pre><code class="language-java">public interface KuduEventProducer extends 
Configurable, ConfigurableComponent {
+  /**
    * Initialize the event producer.
    * @param event to be written to Kudu
    * @param table the KuduTable object used for creating Kudu Operation objects
-   */</span>
-  <span class="kt">void</span> <span class="n">initialize</span><span 
class="o">(</span><span class="n">Event</span> <span 
class="n">event</span><span class="o">,</span> <span class="n">KuduTable</span> 
<span class="n">table</span><span class="o">);</span>
+   */
+  void initialize(Event event, KuduTable table);
 
-  <span class="cm">/**
+  /**
    * Get the operations that should be written out to Kudu as a result of this
    * event. This list is written to Kudu using the Kudu client API.
    * @return List of {@link org.kududb.client.Operation} which
    * are written as such to Kudu
-   */</span>
-  <span class="n">List</span><span class="o">&lt;</span><span 
class="n">Operation</span><span class="o">&gt;</span> <span 
class="n">getOperations</span><span class="o">();</span>
+   */
+  List&lt;Operation&gt; getOperations();
 
-  <span class="cm">/*
+  /*
    * Clean up any state. This will be called when the sink is being stopped.
-   */</span>
-  <span class="kt">void</span> <span class="n">close</span><span 
class="o">();</span>
-<span class="o">}</span>
+   */
+  void close();
+}
 </code></pre>
-</div>
 
-<p><code class="highlighter-rouge">public void configure(Context 
context)</code> is called when an instance of our producer is instantiated
+<p><code>public void configure(Context context)</code> is called when an 
instance of our producer is instantiated
 by the KuduSink. SimpleKuduEventProducer’s implementation looks for a 
producer parameter named
-<code class="highlighter-rouge">payloadColumn</code> and uses its value 
(“payload” if not overridden in Flume configuration file) as the
+<code>payloadColumn</code> and uses its value (“payload” if not overridden 
in Flume configuration file) as the
 column which will hold the value of the Flume event payload. If you recall 
from above, we had
-configured the KuduSink to listen for events generated from the <code 
class="highlighter-rouge">vmstat</code> command. Each output row
-from that command will be stored as a new row containing a <code 
class="highlighter-rouge">payload</code> column in the <code 
class="highlighter-rouge">stats</code> table.
-<code class="highlighter-rouge">SimpleKuduEventProducer</code> does not have 
any configuration parameters, but if it had any we would
-define them by prefixing it with <code 
class="highlighter-rouge">producer.</code> (<code 
class="highlighter-rouge">agent1.sinks.sink1.producer.parameter1</code> for
+configured the KuduSink to listen for events generated from the 
<code>vmstat</code> command. Each output row
+from that command will be stored as a new row containing a 
<code>payload</code> column in the <code>stats</code> table.
+<code>SimpleKuduEventProducer</code> does not have any configuration 
parameters, but if it had any we would
+define them by prefixing it with <code>producer.</code> 
(<code>agent1.sinks.sink1.producer.parameter1</code> for
 example).</p>
 
-<p>The main producer logic resides in the <code 
class="highlighter-rouge">public List&lt;Operation&gt; getOperations()</code> 
method. In
+<p>The main producer logic resides in the <code>public List&lt;Operation&gt; 
getOperations()</code> method. In
 SimpleKuduEventProducer’s implementation we simply insert the binary body of 
the Flume event into
-the Kudu table. Here we call Kudu’s <code 
class="highlighter-rouge">newInsert()</code> to initiate an insert, but could 
have used
-<code class="highlighter-rouge">Upsert</code> if updating an existing row was 
also an option, in fact there’s another producer
-implementation available for doing just that: <code 
class="highlighter-rouge">SimpleKeyedKuduEventProducer</code>. Most probably you
+the Kudu table. Here we call Kudu’s <code>newInsert()</code> to initiate an 
insert, but could have used
+<code>Upsert</code> if updating an existing row was also an option, in fact 
there’s another producer
+implementation available for doing just that: 
<code>SimpleKeyedKuduEventProducer</code>. Most probably you
 will need to write your own custom producer in the real world, but you can 
base your implementation
 on the built-in ones.</p>
 
@@ -420,6 +417,8 @@ is included in the Kudu distribution. You can follow him on 
Twitter at
     <h3>Recent posts</h3>
     <ul>
     
+      <li> <a href="/2016/09/16/predicate-pushdown.html">Pushing Down 
Predicate Evaluation in Apache Kudu</a> </li>
+    
       <li> <a href="/2016/08/31/intro-flume-kudu-sink.html">An Introduction to 
the Flume Kudu Sink</a> </li>
     
       <li> <a href="/2016/08/23/new-range-partitioning-features.html">New 
Range Partitioning Features in Kudu 0.10</a> </li>
@@ -448,8 +447,6 @@ is included in the Kudu distribution. You can follow him on 
Twitter at
     
       <li> <a href="/2016/06/17/raft-consensus-single-node.html">Using Raft 
Consensus on a Single Node</a> </li>
     
-      <li> <a href="/2016/06/13/weekly-update.html">Apache Kudu (incubating) 
Weekly Update June 13, 2016</a> </li>
-    
     </ul>
   </div>
 </div>

http://git-wip-us.apache.org/repos/asf/kudu-site/blob/bc4e6c33/2016/09/16/predicate-pushdown.html
----------------------------------------------------------------------
diff --git a/2016/09/16/predicate-pushdown.html 
b/2016/09/16/predicate-pushdown.html
new file mode 100644
index 0000000..ffa0cf8
--- /dev/null
+++ b/2016/09/16/predicate-pushdown.html
@@ -0,0 +1,339 @@
+<!DOCTYPE html>
+<html lang="en">
+  <head>
+    <meta charset="utf-8" />
+    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
+    <meta name="viewport" content="width=device-width, initial-scale=1" />
+    <!-- The above 3 meta tags *must* come first in the head; any other head 
content must come *after* these tags -->
+    <meta name="description" content="A new open source Apache Hadoop 
ecosystem project, Apache Kudu completes Hadoop's storage layer to enable fast 
analytics on fast data" />
+    <meta name="author" content="Cloudera" />
+    <title>Apache Kudu - Pushing Down Predicate Evaluation in Apache 
Kudu</title>
+    <!-- Bootstrap core CSS -->
+    <link rel="stylesheet" 
href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css";
+          
integrity="sha384-1q8mTJOASx8j1Au+a5WDVnPi2lkFfwwEAa8hDDdjZlpLegxhjVME1fgjWPGmkzs7"
+          crossorigin="anonymous">
+
+    <!-- Custom styles for this template -->
+    <link href="/css/kudu.css" rel="stylesheet"/>
+    <link href="/css/asciidoc.css" rel="stylesheet"/>
+    <link rel="shortcut icon" href="/img/logo-favicon.ico" />
+    <link rel="stylesheet" 
href="https://maxcdn.bootstrapcdn.com/font-awesome/4.6.1/css/font-awesome.min.css";
 />
+
+    
+    <link rel="alternate" type="application/atom+xml"
+      title="RSS Feed for Apache Kudu blog"
+      href="/feed.xml" />
+    
+
+    <!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media 
queries -->
+    <!--[if lt IE 9]>
+        <script 
src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js";></script>
+        <script 
src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js";></script>
+        <![endif]-->
+  </head>
+  <body>
+    <div class="kudu-site container-fluid">
+      <!-- Static navbar -->
+        <nav class="navbar navbar-default">
+          <div class="container-fluid">
+            <div class="navbar-header">
+              <button type="button" class="navbar-toggle collapsed" 
data-toggle="collapse" data-target="#navbar" aria-expanded="false" 
aria-controls="navbar">
+                <span class="sr-only">Toggle navigation</span>
+                <span class="icon-bar"></span>
+                <span class="icon-bar"></span>
+                <span class="icon-bar"></span>
+              </button>
+              
+              <a class="logo" href="/"><img
+                
src="//d3dr9sfxru4sde.cloudfront.net/i/k/apachekudu_logo_0716_80px.png"
+                
srcset="//d3dr9sfxru4sde.cloudfront.net/i/k/apachekudu_logo_0716_80px.png 1x, 
//d3dr9sfxru4sde.cloudfront.net/i/k/apachekudu_logo_0716_160px.png 2x"
+                alt="Apache Kudu"/></a>
+              
+            </div>
+            <div id="navbar" class="collapse navbar-collapse">
+              <ul class="nav navbar-nav navbar-right">
+                <li >
+                  <a href="/">Home</a>
+                </li>
+                <li >
+                  <a href="/overview.html">Overview</a>
+                </li>
+                <li >
+                  <a href="/docs/">Documentation</a>
+                </li>
+                <li >
+                  <a href="/releases/">Download</a>
+                </li>
+                <li class="active">
+                  <a href="/blog/">Blog</a>
+                </li>
+                <!-- NOTE: this dropdown menu does not appear on Mobile, so 
don't add anything here
+                     that doesn't also appear elsewhere on the site. -->
+                <li class="dropdown">
+                  <a href="/community.html" role="button" aria-haspopup="true" 
aria-expanded="false">Community <span class="caret"></span></a>
+                  <ul class="dropdown-menu">
+                    <li class="dropdown-header">GET IN TOUCH</li>
+                    <li><a class="icon email" href="/community.html">Mailing 
Lists</a></li>
+                    <li><a class="icon slack" 
href="https://getkudu-slack.herokuapp.com/";>Slack Channel</a></li>
+                    <li role="separator" class="divider"></li>
+                    <li><a 
href="/community.html#meetups-user-groups-and-conference-presentations">Events 
and Meetups</a></li>
+                    <li><a href="/committers.html">Project Committers</a></li>
+                    <!--<li><a href="/roadmap.html">Roadmap</a></li>-->
+                    <li><a href="/community.html#contributions">How to 
Contribute</a></li>
+                    <li role="separator" class="divider"></li>
+                    <li class="dropdown-header">DEVELOPER RESOURCES</li>
+                    <li><a class="icon github" 
href="https://github.com/apache/incubator-kudu";>GitHub</a></li>
+                    <li><a class="icon gerrit" 
href="http://gerrit.cloudera.org:8080/#/q/status:open+project:kudu";>Gerrit Code 
Review</a></li>
+                    <li><a class="icon jira" 
href="https://issues.apache.org/jira/browse/KUDU";>JIRA Issue Tracker</a></li>
+                    <li role="separator" class="divider"></li>
+                    <li class="dropdown-header">SOCIAL MEDIA</li>
+                    <li><a class="icon twitter" 
href="https://twitter.com/ApacheKudu";>Twitter</a></li>
+                  </ul>
+                </li>
+                <li >
+                  <a href="/faq.html">FAQ</a>
+                </li>
+              </ul><!-- /.nav -->
+            </div><!-- /#navbar -->
+          </div><!-- /.container-fluid -->
+        </nav>
+
+<div class="row header">
+  <div class="col-lg-12">
+    <h2><a href="/blog">Apache Kudu Blog</a></h2>
+  </div>
+</div>
+
+<div class="row-fluid">
+  <div class="col-lg-9">
+    <article>
+  <header>
+    <h1 class="entry-title">Pushing Down Predicate Evaluation in Apache 
Kudu</h1>
+    <p class="meta">Posted 16 Sep 2016 by Andrew Wong</p>
+  </header>
+  <div class="entry-content">
+    <p>I had the pleasure of interning with the Apache Kudu team at Cloudera 
this
+summer. This project was my summer contribution to Kudu: a restructuring of the
+scan path to speed up queries.</p>
+
+<!--more-->
+
+<h2 id="introduction">Introduction</h2>
+
+<p>In Kudu, <em>predicate pushdown</em> refers to the way in which predicates 
are
+handled. When a scan is requested, its predicates are passed through the
+different layers of Kudu’s storage hierarchy, allowing for pruning and other
+optimizations to happen at each level before reaching the underlying data.</p>
+
+<p>While predicates are pushed down, predicate evaluation itself occurs at a 
fairly
+high level, precluding the evaluation process from certain data-specific
+optimizations. These optimizations can make tablet scans an order of magnitude
+faster, if not more.</p>
+
+<h2 id="a-day-in-the-life-of-a-query">A Day in the Life of a Query</h2>
+
+<p>Because Kudu is a columnar storage engine, its scan path has a number of
+optimizations to avoid extraneous reads, copies, and computation. When a query
+is sent to a tablet server, the server prunes tablets based on the
+primary key, directing the request to only the tablets that contain the key
+range of interest. Once at a tablet, only the columns relevant to the query are
+scanned. Further pruning is done over the primary key, and if the query is
+predicated on non-key columns, the entire column is scanned. The columns in a
+tablet are stored as <em>cfiles</em>, which are split into encoded 
<em>blocks</em>. Once the
+relevant cfiles are determined, the data are materialized by the block
+decoders, i.e. their underlying data are decoded and copied into a buffer,
+which is passed back to the tablet layer. The tablet can then evaluate the
+predicate on the batch of data and mark which rows should be returned to the
+client.</p>
+
+<p>One of the encoding types I worked very closely with is <em>dictionary 
encoding</em>,
+an encoding type for strings that performs particularly well for cfiles that
+have repeating values. Rather than storing every row’s string, each unique
+string is assigned a numeric codeword, and the rows are stored numerically on
+disk. When materializing a dictionary block, all of the numeric data are 
scanned
+and all of the corresponding strings are copied and buffered for evaluation.
+When the vocabulary of a dictionary-encoded cfile gets too large, the blocks
+begin switching to <em>plain encoding mode</em> to act like 
<em>plain-encoded</em> blocks.</p>
+
+<p>In a plain-encoded block, strings are stored contiguously and the character
+offsets to the start of each string are stored as a list of integers. When
+materializing, all of the strings are copied to a buffer for evaluation.</p>
+
+<p>Therein lies room for improvement: this predicate evaluation path is the 
same
+for all data types and encoding types. Within the tablet, the correct cfiles
+are determined, the cfiles’ decoders are opened, all of the data are copied 
to
+a buffer, and the predicates are evaluated on this buffered data via
+type-specific comparators. This path is extremely flexible, but because it was
+designed to be encoding-independent, there is room for improvement.</p>
+
+<h2 id="trimming-the-fat">Trimming the Fat</h2>
+
+<p>The first step is to allow the decoders access to the predicate. In doing 
so,
+each encoding type can specialize its evaluation. Additionally, this puts the
+decoder in a position where it can determine whether a given row satisfies the
+query, which in turn, allows the decoders to determine what data gets copied
+instead of eagerly copying all of its data to get evaluated.</p>
+
+<p>Take the case of dictionary-encoded strings as an example. With the existing
+scan path, not only are all of the strings in a column copied into a buffer, 
but
+string comparisons are done on every row. By taking advantage of the fact that
+the data can be represented as integers, the cost of determining the query
+results can be greatly reduced. The string comparisons can be swapped out with
+evaluation based on the codewords, in which case the room for improvement boils
+down to how to most quickly determine whether or not a given codeword
+corresponds to a string that satisfies the predicate. Dictionary columns will
+now use a bitset to store the codewords that match the predicates.  It will 
then
+scan through the integer-valued data and checks the bitset to determine whether
+it should copy the corresponding string over.</p>
+
+<p>This is great in the best case scenario where a cfile’s vocabulary is 
small,
+but when the vocabulary gets too large and the dictionary blocks switch to 
plain
+encoding mode, performance is hampered. In this mode, the blocks don’t 
utilize
+any dictionary metadata and end up wasting the codeword bitset. That isn’t to
+say all is lost: the decoders can still evaluate a predicate via string
+comparison, and the fact that evaluation can still occur at the decoder-level
+means the eager buffering can still be avoided.</p>
+
+<p>Dictionary encoding is a perfect storm in that the decoders can completely
+evaluate the predicates. This is not the case for most other encoding types,
+but having decoders support evaluation leaves the door open for other encoding
+types to extend this idea.</p>
+
+<h2 id="performance">Performance</h2>
+<p>Depending on the dataset and query, predicate pushdown can lead to 
significant
+improvements. Tablet scans were timed with datasets consisting of repeated
+string patterns of tunable length and tunable cardinality.</p>
+
+<p><img src="/img/predicate-pushdown/pushdown-10.png" alt="png" 
class="img-responsive" />
+<img src="/img/predicate-pushdown/pushdown-10M.png" alt="png" 
class="img-responsive" /></p>
+
+<p>The above plots show the time taken to completely scan a single tablet, 
recorded
+using a dataset of ten million rows of strings with length ten. Predicates were
+designed to select values out of bounds (Empty), select a single value (Equal,
+i.e. for cardinality <em>k</em>, this would select 1/<em>k</em> of the 
dataset), select half
+of the full range (Half), and select the full range of values (All).</p>
+
+<p>With the original evaluation implementation, the tablet must copy and scan
+through the tablet to determine whether any values match. This means that even
+when the result set is small, the full column is still copied. This is avoided
+by pushing down predicates, which only copies as needed, and can be seen in the
+above queries: those with near-empty result sets (Empty and Equal) have shorter
+scan times than those with larger result sets (Half and All).</p>
+
+<p>Note that for dictionary encoding, given a low cardinality, Kudu can 
completely
+rely on the dictionary codewords to evaluate, making the query significantly
+faster. At higher cardinalities, the dictionaries completely fill up and the
+blocks fall back on plain encoding. The slower, albeit still improved,
+performance on the dataset containing 10M unique values reflects this.</p>
+
+<p><img src="/img/predicate-pushdown/pushdown-tpch.png" alt="png" 
class="img-responsive" /></p>
+
+<p>Similar predicates were run with the TPC-H dataset, querying on the shipdate
+column. The full path of a query includes not only the tablet scanning itself,
+but also RPCs and batched data transfer to the caller as the scan progresses.
+As such, the times plotted above refer to the average end-to-end time required
+to scan and return a batch of rows. Regardless of this additional overhead,
+significant improvements on the scan path still yield substantial improvements
+to the query performance as a whole.</p>
+
+<h2 id="conclusion">Conclusion</h2>
+
+<p>Pushing down predicate evaluation in Kudu yielded substantial improvements 
to
+the scan path. For dictionary encoding, pushdown can be particularly powerful,
+and other encoding types are either unaffected or also improved. This change 
has
+been pushed to the main branch of Kudu, and relevant commits can be found
+<a 
href="https://github.com/cloudera/kudu/commit/c0f37278cb09a7781d9073279ea54b08db6e2010";>here</a>
+and
+<a 
href="https://github.com/cloudera/kudu/commit/ec80fdb37be44d380046a823b5e6d8e2241ec3da";>here</a>.</p>
+
+<p>This summer has been a phenomenal learning experience for me, in terms of 
the
+tools, the workflow, the datasets, the thought-processes that go into building
+something at Kudu’s scale. I am extremely thankful for all of the mentoring 
and
+support I received, and that I got to be a part of Kudu’s journey from
+incubating to a Top Level Apache project. I can’t express enough how 
grateful I
+am for the amount of support I got from the Kudu team, from the intern
+coordinators, and from the Cloudera community as a whole.</p>
+
+  </div>
+</article>
+
+
+  </div>
+  <div class="col-lg-3 recent-posts">
+    <h3>Recent posts</h3>
+    <ul>
+    
+      <li> <a href="/2016/09/16/predicate-pushdown.html">Pushing Down 
Predicate Evaluation in Apache Kudu</a> </li>
+    
+      <li> <a href="/2016/08/31/intro-flume-kudu-sink.html">An Introduction to 
the Flume Kudu Sink</a> </li>
+    
+      <li> <a href="/2016/08/23/new-range-partitioning-features.html">New 
Range Partitioning Features in Kudu 0.10</a> </li>
+    
+      <li> <a href="/2016/08/23/apache-kudu-0-10-0-released.html">Apache Kudu 
0.10.0 released</a> </li>
+    
+      <li> <a href="/2016/08/16/weekly-update.html">Apache Kudu Weekly Update 
August 16th, 2016</a> </li>
+    
+      <li> <a href="/2016/08/08/weekly-update.html">Apache Kudu Weekly Update 
August 8th, 2016</a> </li>
+    
+      <li> <a href="/2016/07/26/weekly-update.html">Apache Kudu Weekly Update 
July 26, 2016</a> </li>
+    
+      <li> <a href="/2016/07/25/asf-graduation.html">The Apache Software 
Foundation Announces Apache&reg; Kudu&trade; as a Top-Level Project</a> </li>
+    
+      <li> <a href="/2016/07/18/weekly-update.html">Apache Kudu (incubating) 
Weekly Update July 18, 2016</a> </li>
+    
+      <li> <a href="/2016/07/11/weekly-update.html">Apache Kudu (incubating) 
Weekly Update July 11, 2016</a> </li>
+    
+      <li> <a href="/2016/07/01/apache-kudu-0-9-1-released.html">Apache Kudu 
(incubating) 0.9.1 released</a> </li>
+    
+      <li> <a href="/2016/06/27/weekly-update.html">Apache Kudu (incubating) 
Weekly Update June 27, 2016</a> </li>
+    
+      <li> <a href="/2016/06/24/multi-master-1-0-0.html">Master fault 
tolerance in Kudu 1.0</a> </li>
+    
+      <li> <a href="/2016/06/21/weekly-update.html">Apache Kudu (incubating) 
Weekly Update June 21, 2016</a> </li>
+    
+      <li> <a href="/2016/06/17/raft-consensus-single-node.html">Using Raft 
Consensus on a Single Node</a> </li>
+    
+    </ul>
+  </div>
+</div>
+
+      <footer class="footer">
+        <p class="small">
+        Copyright &copy; 2016 The Apache Software Foundation. 
+        </p>
+      </footer>
+    </div>
+    <script 
src="https://cdnjs.cloudflare.com/ajax/libs/jquery/1.11.3/jquery.min.js";></script>
+    <script>
+      // Try to detect touch-screen devices. Note: Many laptops have touch 
screens.
+      $(document).ready(function() {
+        if ("ontouchstart" in document.documentElement) {
+          $(document.documentElement).addClass("touch");
+        } else {
+          $(document.documentElement).addClass("no-touch");
+        }
+      });
+    </script>
+    <script 
src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/js/bootstrap.min.js";
+            
integrity="sha384-0mSbJDEHialfmuBBQP6A4Qrprq5OVfW37PRR3j5ELqxss1yVqOtnepnHVP9aJ7xS"
+            crossorigin="anonymous"></script>
+    <script>
+      
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+      (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new 
Date();a=s.createElement(o),
+      
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+      
})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+
+      ga('create', 'UA-68448017-1', 'auto');
+      ga('send', 'pageview');
+    </script>
+    <script 
src="https://cdnjs.cloudflare.com/ajax/libs/anchor-js/3.1.0/anchor.js";></script>
+    <script>
+      anchors.options = {
+        placement: 'right',
+        visible: 'touch',
+      };
+      anchors.add();
+    </script>
+  </body>
+</html>
+

http://git-wip-us.apache.org/repos/asf/kudu-site/blob/bc4e6c33/blog/index.html
----------------------------------------------------------------------
diff --git a/blog/index.html b/blog/index.html
index 19e2dd7..ccd79c9 100644
--- a/blog/index.html
+++ b/blog/index.html
@@ -111,17 +111,39 @@
 <!-- Articles -->
 <article>
   <header>
+    <h1 class="entry-title"><a 
href="/2016/09/16/predicate-pushdown.html">Pushing Down Predicate Evaluation in 
Apache Kudu</a></h1>
+    <p class="meta">Posted 16 Sep 2016 by Andrew Wong</p>
+  </header>
+  <div class="entry-content">
+    
+    <p>I had the pleasure of interning with the Apache Kudu team at Cloudera 
this
+summer. This project was my summer contribution to Kudu: a restructuring of the
+scan path to speed up queries.</p>
+
+
+    
+  </div>
+  <div class="read-full">
+    <a class="btn btn-info" href="/2016/09/16/predicate-pushdown.html">Read 
full post...</a>
+  </div>
+</article>
+
+
+
+<!-- Articles -->
+<article>
+  <header>
     <h1 class="entry-title"><a 
href="/2016/08/31/intro-flume-kudu-sink.html">An Introduction to the Flume Kudu 
Sink</a></h1>
     <p class="meta">Posted 31 Aug 2016 by Ara Abrahamian</p>
   </header>
   <div class="entry-content">
     
-    <p>This post discusses the Kudu Flume Sink. First, I’ll give some 
background on why we considered
+    <p>This post discusses the Kudu Flume Sink. First, I&#8217;ll give some 
background on why we considered
 using Kudu, what Flume does for us, and how Flume fits with Kudu in our 
project.</p>
 
 <h2 id="why-kudu">Why Kudu</h2>
 
-<p>Traditionally in the Hadoop ecosystem we’ve dealt with various <em>batch 
processing</em> technologies such
+<p>Traditionally in the Hadoop ecosystem we&#8217;ve dealt with various 
<em>batch processing</em> technologies such
 as MapReduce and the many libraries and tools built on top of it in various 
languages (Apache Pig,
 Apache Hive, Apache Oozie and many others). The main problem with this 
approach is that it needs to
 process the whole data set in batches, again and again, as soon as new data 
gets added. Things get
@@ -161,14 +183,14 @@ queries and processes need to be carefully planned and 
implemented.</p>
 <ul>
   <li>flexible and expressive, thanks to SQL support via Apache Impala 
(incubating)</li>
   <li>a table-oriented, mutable data store that feels like a traditional 
relational database</li>
-  <li>very easy to program, you can even pretend it’s good old MySQL</li>
+  <li>very easy to program, you can even pretend it&#8217;s good old MySQL</li>
   <li>low-latency and relatively high throughput, both for ingest and 
query</li>
 </ul>
 
-<p>At Argyle Data, we’re dealing with complex fraud detection scenarios. We 
need to ingest massive
+<p>At Argyle Data, we&#8217;re dealing with complex fraud detection scenarios. 
We need to ingest massive
 amounts of data, run machine learning algorithms and generate reports. When we 
created our current
 architecture two years ago we decided to opt for a database as the backbone of 
our system. That
-database is Apache Accumulo. It’s a key-value based database which runs on 
top of Hadoop HDFS,
+database is Apache Accumulo. It&#8217;s a key-value based database which runs 
on top of Hadoop HDFS,
 quite similar to HBase but with some important improvements such as cell level 
security and ease
 of deployment and management. To enable querying of this data for quite 
complex reporting and
 analytics, we used Presto, a distributed query engine with a pluggable 
architecture open-sourced
@@ -181,12 +203,12 @@ architecture has served us well, but there were a few 
problems:</p>
   <li>we need to support ad-hoc queries, plus long-term data warehouse 
functionality</li>
 </ul>
 
-<p>So, we’ve started gradually moving the core machine-learning pipeline to 
a streaming based
+<p>So, we&#8217;ve started gradually moving the core machine-learning pipeline 
to a streaming based
 solution. This way we can ingest and process larger data-sets faster in the 
real-time. But then how
 would we take care of ad-hoc queries and long-term persistence? This is where 
Kudu comes in. While
 the machine learning pipeline ingests and processes real-time data, we store a 
copy of the same
 ingested data in Kudu for long-term access and ad-hoc queries. Kudu is our 
<em>data warehouse</em>. By
-using Kudu and Impala, we can retire our in-house Presto connector and rely on 
Impala’s
+using Kudu and Impala, we can retire our in-house Presto connector and rely on 
Impala&#8217;s
 super-fast query engine.</p>
 
 <p>But how would we make sure data is reliably ingested into the streaming 
pipeline <em>and</em> the
@@ -194,10 +216,10 @@ Kudu-based data warehouse? This is where Apache Flume 
comes in.</p>
 
 <h2 id="why-flume">Why Flume</h2>
 
-<p>According to their <a href="http://flume.apache.org/";>website</a> “Flume 
is a distributed, reliable, and
+<p>According to their <a href="http://flume.apache.org/";>website</a> 
&#8220;Flume is a distributed, reliable, and
 available service for efficiently collecting, aggregating, and moving large 
amounts of log data.
 It has a simple and flexible architecture based on streaming data flows. It is 
robust and fault
-tolerant with tunable reliability mechanisms and many failover and recovery 
mechanisms.” As you
+tolerant with tunable reliability mechanisms and many failover and recovery 
mechanisms.&#8221; As you
 can see, nowhere is Hadoop mentioned but Flume is typically used for ingesting 
data to Hadoop
 clusters.</p>
 
@@ -215,7 +237,7 @@ File-based channels are also provided. As for the sources, 
Avro, JMS, Thrift, sp
 source are some of the built-in ones. Flume also ships with many sinks, 
including sinks for writing
 data to HDFS, HBase, Hive, Kafka, as well as to other Flume agents.</p>
 
-<p>In the rest of this post I’ll go over the Kudu Flume sink and show you 
how to configure Flume to
+<p>In the rest of this post I&#8217;ll go over the Kudu Flume sink and show 
you how to configure Flume to
 write ingested data to a Kudu table. The sink has been part of the Kudu 
distribution since the 0.8
 release and the source code can be found <a 
href="https://github.com/apache/kudu/tree/master/java/kudu-flume-sink";>here</a>.</p>
 
@@ -223,7 +245,7 @@ release and the source code can be found <a 
href="https://github.com/apache/kudu
 
 <p>Here is a sample flume configuration file:</p>
 
-<div class="highlighter-rouge"><pre class="highlight"><code>agent1.sources  = 
source1
+<pre><code>agent1.sources  = source1
 agent1.channels = channel1
 agent1.sinks = sink1
 
@@ -242,25 +264,24 @@ agent1.sinks.sink1.channel = channel1
 agent1.sinks.sink1.batchSize = 50
 agent1.sinks.sink1.producer = 
org.apache.kudu.flume.sink.SimpleKuduEventProducer
 </code></pre>
-</div>
 
-<p>We define a source called <code class="highlighter-rouge">source1</code> 
which simply executes a <code class="highlighter-rouge">vmstat</code> command 
to continuously generate
-virtual memory statistics for the machine and queue events into an in-memory 
<code class="highlighter-rouge">channel1</code> channel,
-which in turn is used for writing these events to a Kudu table called <code 
class="highlighter-rouge">stats</code>. We are using
-<code 
class="highlighter-rouge">org.apache.kudu.flume.sink.SimpleKuduEventProducer</code>
 as the producer. <code 
class="highlighter-rouge">SimpleKuduEventProducer</code> is
-the built-in and default producer, but it’s implemented as a showcase for 
how to write Flume
-events into Kudu tables. For any serious functionality we’d have to write a 
custom producer. We
-need to make this producer and the <code 
class="highlighter-rouge">KuduSink</code> class available to Flume. We can do 
that by simply
-copying the <code 
class="highlighter-rouge">kudu-flume-sink-&lt;VERSION&gt;.jar</code> jar file 
from the Kudu distribution to the
-<code class="highlighter-rouge">$FLUME_HOME/plugins.d/kudu-sink/lib</code> 
directory in the Flume installation. The jar file contains
-<code class="highlighter-rouge">KuduSink</code> and all of its dependencies 
(including Kudu java client classes).</p>
+<p>We define a source called <code>source1</code> which simply executes a 
<code>vmstat</code> command to continuously generate
+virtual memory statistics for the machine and queue events into an in-memory 
<code>channel1</code> channel,
+which in turn is used for writing these events to a Kudu table called 
<code>stats</code>. We are using
+<code>org.apache.kudu.flume.sink.SimpleKuduEventProducer</code> as the 
producer. <code>SimpleKuduEventProducer</code> is
+the built-in and default producer, but it&#8217;s implemented as a showcase 
for how to write Flume
+events into Kudu tables. For any serious functionality we&#8217;d have to 
write a custom producer. We
+need to make this producer and the <code>KuduSink</code> class available to 
Flume. We can do that by simply
+copying the <code>kudu-flume-sink-&lt;VERSION&gt;.jar</code> jar file from the 
Kudu distribution to the
+<code>$FLUME_HOME/plugins.d/kudu-sink/lib</code> directory in the Flume 
installation. The jar file contains
+<code>KuduSink</code> and all of its dependencies (including Kudu java client 
classes).</p>
 
 <p>At a minimum, the Kudu Flume Sink needs to know where the Kudu masters are
-(<code class="highlighter-rouge">agent1.sinks.sink1.masterAddresses = 
localhost</code>) and which Kudu table should be used for writing
-Flume events to (<code class="highlighter-rouge">agent1.sinks.sink1.tableName 
= stats</code>). The Kudu Flume Sink doesn’t create this
+(<code>agent1.sinks.sink1.masterAddresses = localhost</code>) and which Kudu 
table should be used for writing
+Flume events to (<code>agent1.sinks.sink1.tableName = stats</code>). The Kudu 
Flume Sink doesn&#8217;t create this
 table, it has to be created before the Kudu Flume Sink is started.</p>
 
-<p>You may also notice the <code class="highlighter-rouge">batchSize</code> 
parameter. Batch size is used for batching up to that many
+<p>You may also notice the <code>batchSize</code> parameter. Batch size is 
used for batching up to that many
 Flume events and flushing the entire batch in one shot. Tuning batchSize 
properly can have a huge
 impact on ingest performance of the Kudu cluster.</p>
 
@@ -278,7 +299,7 @@ impact on ingest performance of the Kudu cluster.</p>
     <tr>
       <td>masterAddresses</td>
       <td>N/A</td>
-      <td>Comma-separated list of “host:port” pairs of the masters (port 
optional)</td>
+      <td>Comma-separated list of &#8220;host:port&#8221; pairs of the masters 
(port optional)</td>
     </tr>
     <tr>
       <td>tableName</td>
@@ -308,93 +329,91 @@ impact on ingest performance of the Kudu cluster.</p>
   </tbody>
 </table>
 
-<p>Let’s take a look at the source code for the built-in producer class:</p>
-
-<div class="highlighter-rouge"><pre class="highlight"><code><span 
class="kd">public</span> <span class="kd">class</span> <span 
class="nc">SimpleKuduEventProducer</span> <span class="kd">implements</span> 
<span class="n">KuduEventProducer</span> <span class="o">{</span>
-  <span class="kd">private</span> <span class="kt">byte</span><span 
class="o">[]</span> <span class="n">payload</span><span class="o">;</span>
-  <span class="kd">private</span> <span class="n">KuduTable</span> <span 
class="n">table</span><span class="o">;</span>
-  <span class="kd">private</span> <span class="n">String</span> <span 
class="n">payloadColumn</span><span class="o">;</span>
-
-  <span class="kd">public</span> <span 
class="n">SimpleKuduEventProducer</span><span class="o">(){</span>
-  <span class="o">}</span>
-
-  <span class="nd">@Override</span>
-  <span class="kd">public</span> <span class="kt">void</span> <span 
class="n">configure</span><span class="o">(</span><span 
class="n">Context</span> <span class="n">context</span><span class="o">)</span> 
<span class="o">{</span>
-    <span class="n">payloadColumn</span> <span class="o">=</span> <span 
class="n">context</span><span class="o">.</span><span 
class="na">getString</span><span class="o">(</span><span 
class="s">"payloadColumn"</span><span class="o">,</span><span 
class="s">"payload"</span><span class="o">);</span>
-  <span class="o">}</span>
-
-  <span class="nd">@Override</span>
-  <span class="kd">public</span> <span class="kt">void</span> <span 
class="n">configure</span><span class="o">(</span><span 
class="n">ComponentConfiguration</span> <span class="n">conf</span><span 
class="o">)</span> <span class="o">{</span>
-  <span class="o">}</span>
-
-  <span class="nd">@Override</span>
-  <span class="kd">public</span> <span class="kt">void</span> <span 
class="n">initialize</span><span class="o">(</span><span class="n">Event</span> 
<span class="n">event</span><span class="o">,</span> <span 
class="n">KuduTable</span> <span class="n">table</span><span class="o">)</span> 
<span class="o">{</span>
-    <span class="k">this</span><span class="o">.</span><span 
class="na">payload</span> <span class="o">=</span> <span 
class="n">event</span><span class="o">.</span><span 
class="na">getBody</span><span class="o">();</span>
-    <span class="k">this</span><span class="o">.</span><span 
class="na">table</span> <span class="o">=</span> <span 
class="n">table</span><span class="o">;</span>
-  <span class="o">}</span>
-
-  <span class="nd">@Override</span>
-  <span class="kd">public</span> <span class="n">List</span><span 
class="o">&lt;</span><span class="n">Operation</span><span 
class="o">&gt;</span> <span class="n">getOperations</span><span 
class="o">()</span> <span class="kd">throws</span> <span 
class="n">FlumeException</span> <span class="o">{</span>
-    <span class="k">try</span> <span class="o">{</span>
-      <span class="n">Insert</span> <span class="n">insert</span> <span 
class="o">=</span> <span class="n">table</span><span class="o">.</span><span 
class="na">newInsert</span><span class="o">();</span>
-      <span class="n">PartialRow</span> <span class="n">row</span> <span 
class="o">=</span> <span class="n">insert</span><span class="o">.</span><span 
class="na">getRow</span><span class="o">();</span>
-      <span class="n">row</span><span class="o">.</span><span 
class="na">addBinary</span><span class="o">(</span><span 
class="n">payloadColumn</span><span class="o">,</span> <span 
class="n">payload</span><span class="o">);</span>
-
-      <span class="k">return</span> <span class="n">Collections</span><span 
class="o">.</span><span class="na">singletonList</span><span 
class="o">((</span><span class="n">Operation</span><span class="o">)</span> 
<span class="n">insert</span><span class="o">);</span>
-    <span class="o">}</span> <span class="k">catch</span> <span 
class="o">(</span><span class="n">Exception</span> <span 
class="n">e</span><span class="o">){</span>
-      <span class="k">throw</span> <span class="k">new</span> <span 
class="n">FlumeException</span><span class="o">(</span><span class="s">"Failed 
to create Kudu Insert object!"</span><span class="o">,</span> <span 
class="n">e</span><span class="o">);</span>
-    <span class="o">}</span>
-  <span class="o">}</span>
-
-  <span class="nd">@Override</span>
-  <span class="kd">public</span> <span class="kt">void</span> <span 
class="n">close</span><span class="o">()</span> <span class="o">{</span>
-  <span class="o">}</span>
-<span class="o">}</span>
+<p>Let&#8217;s take a look at the source code for the built-in producer 
class:</p>
+
+<pre><code class="language-java">public class SimpleKuduEventProducer 
implements KuduEventProducer {
+  private byte[] payload;
+  private KuduTable table;
+  private String payloadColumn;
+
+  public SimpleKuduEventProducer(){
+  }
+
+  @Override
+  public void configure(Context context) {
+    payloadColumn = context.getString("payloadColumn","payload");
+  }
+
+  @Override
+  public void configure(ComponentConfiguration conf) {
+  }
+
+  @Override
+  public void initialize(Event event, KuduTable table) {
+    this.payload = event.getBody();
+    this.table = table;
+  }
+
+  @Override
+  public List&lt;Operation&gt; getOperations() throws FlumeException {
+    try {
+      Insert insert = table.newInsert();
+      PartialRow row = insert.getRow();
+      row.addBinary(payloadColumn, payload);
+
+      return Collections.singletonList((Operation) insert);
+    } catch (Exception e){
+      throw new FlumeException("Failed to create Kudu Insert object!", e);
+    }
+  }
+
+  @Override
+  public void close() {
+  }
+}
 </code></pre>
-</div>
 
-<p><code class="highlighter-rouge">SimpleKuduEventProducer</code> implements 
the <code 
class="highlighter-rouge">org.apache.kudu.flume.sink.KuduEventProducer</code> 
interface,
+<p><code>SimpleKuduEventProducer</code> implements the 
<code>org.apache.kudu.flume.sink.KuduEventProducer</code> interface,
 which itself looks like this:</p>
 
-<div class="highlighter-rouge"><pre class="highlight"><code><span 
class="kd">public</span> <span class="kd">interface</span> <span 
class="nc">KuduEventProducer</span> <span class="kd">extends</span> <span 
class="n">Configurable</span><span class="o">,</span> <span 
class="n">ConfigurableComponent</span> <span class="o">{</span>
-  <span class="cm">/**
+<pre><code class="language-java">public interface KuduEventProducer extends 
Configurable, ConfigurableComponent {
+  /**
    * Initialize the event producer.
    * @param event to be written to Kudu
    * @param table the KuduTable object used for creating Kudu Operation objects
-   */</span>
-  <span class="kt">void</span> <span class="n">initialize</span><span 
class="o">(</span><span class="n">Event</span> <span 
class="n">event</span><span class="o">,</span> <span class="n">KuduTable</span> 
<span class="n">table</span><span class="o">);</span>
+   */
+  void initialize(Event event, KuduTable table);
 
-  <span class="cm">/**
+  /**
    * Get the operations that should be written out to Kudu as a result of this
    * event. This list is written to Kudu using the Kudu client API.
    * @return List of {@link org.kududb.client.Operation} which
    * are written as such to Kudu
-   */</span>
-  <span class="n">List</span><span class="o">&lt;</span><span 
class="n">Operation</span><span class="o">&gt;</span> <span 
class="n">getOperations</span><span class="o">();</span>
+   */
+  List&lt;Operation&gt; getOperations();
 
-  <span class="cm">/*
+  /*
    * Clean up any state. This will be called when the sink is being stopped.
-   */</span>
-  <span class="kt">void</span> <span class="n">close</span><span 
class="o">();</span>
-<span class="o">}</span>
+   */
+  void close();
+}
 </code></pre>
-</div>
 
-<p><code class="highlighter-rouge">public void configure(Context 
context)</code> is called when an instance of our producer is instantiated
-by the KuduSink. SimpleKuduEventProducer’s implementation looks for a 
producer parameter named
-<code class="highlighter-rouge">payloadColumn</code> and uses its value 
(“payload” if not overridden in Flume configuration file) as the
+<p><code>public void configure(Context context)</code> is called when an 
instance of our producer is instantiated
+by the KuduSink. SimpleKuduEventProducer&#8217;s implementation looks for a 
producer parameter named
+<code>payloadColumn</code> and uses its value (&#8220;payload&#8221; if not 
overridden in Flume configuration file) as the
 column which will hold the value of the Flume event payload. If you recall 
from above, we had
-configured the KuduSink to listen for events generated from the <code 
class="highlighter-rouge">vmstat</code> command. Each output row
-from that command will be stored as a new row containing a <code 
class="highlighter-rouge">payload</code> column in the <code 
class="highlighter-rouge">stats</code> table.
-<code class="highlighter-rouge">SimpleKuduEventProducer</code> does not have 
any configuration parameters, but if it had any we would
-define them by prefixing it with <code 
class="highlighter-rouge">producer.</code> (<code 
class="highlighter-rouge">agent1.sinks.sink1.producer.parameter1</code> for
+configured the KuduSink to listen for events generated from the 
<code>vmstat</code> command. Each output row
+from that command will be stored as a new row containing a 
<code>payload</code> column in the <code>stats</code> table.
+<code>SimpleKuduEventProducer</code> does not have any configuration 
parameters, but if it had any we would
+define them by prefixing it with <code>producer.</code> 
(<code>agent1.sinks.sink1.producer.parameter1</code> for
 example).</p>
 
-<p>The main producer logic resides in the <code 
class="highlighter-rouge">public List&lt;Operation&gt; getOperations()</code> 
method. In
-SimpleKuduEventProducer’s implementation we simply insert the binary body of 
the Flume event into
-the Kudu table. Here we call Kudu’s <code 
class="highlighter-rouge">newInsert()</code> to initiate an insert, but could 
have used
-<code class="highlighter-rouge">Upsert</code> if updating an existing row was 
also an option, in fact there’s another producer
-implementation available for doing just that: <code 
class="highlighter-rouge">SimpleKeyedKuduEventProducer</code>. Most probably you
+<p>The main producer logic resides in the <code>public List&lt;Operation&gt; 
getOperations()</code> method. In
+SimpleKuduEventProducer&#8217;s implementation we simply insert the binary 
body of the Flume event into
+the Kudu table. Here we call Kudu&#8217;s <code>newInsert()</code> to initiate 
an insert, but could have used
+<code>Upsert</code> if updating an existing row was also an option, in fact 
there&#8217;s another producer
+implementation available for doing just that: 
<code>SimpleKeyedKuduEventProducer</code>. Most probably you
 will need to write your own custom producer in the real world, but you can 
base your implementation
 on the built-in ones.</p>
 
@@ -491,27 +510,6 @@ covers ongoing development and news in the Apache Kudu 
project.</p>
 
 
 
-<!-- Articles -->
-<article>
-  <header>
-    <h1 class="entry-title"><a href="/2016/08/08/weekly-update.html">Apache 
Kudu Weekly Update August 8th, 2016</a></h1>
-    <p class="meta">Posted 08 Aug 2016 by Todd Lipcon</p>
-  </header>
-  <div class="entry-content">
-    
-    <p>Welcome to the nineteenth edition of the Kudu Weekly Update. This 
weekly blog post
-covers ongoing development and news in the Apache Kudu project.</p>
-
-
-    
-  </div>
-  <div class="read-full">
-    <a class="btn btn-info" href="/2016/08/08/weekly-update.html">Read full 
post...</a>
-  </div>
-</article>
-
-
-
 <!-- Pagination links -->
 
 <nav>
@@ -530,6 +528,8 @@ covers ongoing development and news in the Apache Kudu 
project.</p>
     <h3>Recent posts</h3>
     <ul>
     
+      <li> <a href="/2016/09/16/predicate-pushdown.html">Pushing Down 
Predicate Evaluation in Apache Kudu</a> </li>
+    
       <li> <a href="/2016/08/31/intro-flume-kudu-sink.html">An Introduction to 
the Flume Kudu Sink</a> </li>
     
       <li> <a href="/2016/08/23/new-range-partitioning-features.html">New 
Range Partitioning Features in Kudu 0.10</a> </li>
@@ -558,8 +558,6 @@ covers ongoing development and news in the Apache Kudu 
project.</p>
     
       <li> <a href="/2016/06/17/raft-consensus-single-node.html">Using Raft 
Consensus on a Single Node</a> </li>
     
-      <li> <a href="/2016/06/13/weekly-update.html">Apache Kudu (incubating) 
Weekly Update June 13, 2016</a> </li>
-    
     </ul>
   </div>
 </div>

http://git-wip-us.apache.org/repos/asf/kudu-site/blob/bc4e6c33/blog/page/2/index.html
----------------------------------------------------------------------
diff --git a/blog/page/2/index.html b/blog/page/2/index.html
index 1d359de..af9fb5b 100644
--- a/blog/page/2/index.html
+++ b/blog/page/2/index.html
@@ -111,6 +111,27 @@
 <!-- Articles -->
 <article>
   <header>
+    <h1 class="entry-title"><a href="/2016/08/08/weekly-update.html">Apache 
Kudu Weekly Update August 8th, 2016</a></h1>
+    <p class="meta">Posted 08 Aug 2016 by Todd Lipcon</p>
+  </header>
+  <div class="entry-content">
+    
+    <p>Welcome to the nineteenth edition of the Kudu Weekly Update. This 
weekly blog post
+covers ongoing development and news in the Apache Kudu project.</p>
+
+
+    
+  </div>
+  <div class="read-full">
+    <a class="btn btn-info" href="/2016/08/08/weekly-update.html">Read full 
post...</a>
+  </div>
+</article>
+
+
+
+<!-- Articles -->
+<article>
+  <header>
     <h1 class="entry-title"><a href="/2016/07/26/weekly-update.html">Apache 
Kudu Weekly Update July 26, 2016</a></h1>
     <p class="meta">Posted 26 Jul 2016 by Jean-Daniel Cryans</p>
   </header>
@@ -195,35 +216,6 @@ covers ongoing development and news in the Apache Kudu 
(incubating) project.</p>
 
 
 
-<!-- Articles -->
-<article>
-  <header>
-    <h1 class="entry-title"><a 
href="/2016/07/01/apache-kudu-0-9-1-released.html">Apache Kudu (incubating) 
0.9.1 released</a></h1>
-    <p class="meta">Posted 01 Jul 2016 by Todd Lipcon</p>
-  </header>
-  <div class="entry-content">
-    
-    <p>The Apache Kudu (incubating) team is happy to announce the release of 
Kudu
-0.9.1!</p>
-
-<p>This release fixes a few issues found in the previous 0.9.0 release. All 
users
-of 0.9.0 are encouraged to update to the new version at their earliest 
convenience.</p>
-
-<ul>
-  <li>Read the detailed <a 
href="http://kudu.apache.org/releases/0.9.1/docs/release_notes.html";>Kudu 0.9.1 
release notes</a></li>
-  <li>Download the <a href="http://kudu.apache.org/releases/0.9.1/";>Kudu 0.9.1 
source release</a></li>
-</ul>
-
-
-    
-  </div>
-  <div class="read-full">
-    <a class="btn btn-info" 
href="/2016/07/01/apache-kudu-0-9-1-released.html">Read full post...</a>
-  </div>
-</article>
-
-
-
 <!-- Pagination links -->
 
 <nav>
@@ -244,6 +236,8 @@ of 0.9.0 are encouraged to update to the new version at 
their earliest convenien
     <h3>Recent posts</h3>
     <ul>
     
+      <li> <a href="/2016/09/16/predicate-pushdown.html">Pushing Down 
Predicate Evaluation in Apache Kudu</a> </li>
+    
       <li> <a href="/2016/08/31/intro-flume-kudu-sink.html">An Introduction to 
the Flume Kudu Sink</a> </li>
     
       <li> <a href="/2016/08/23/new-range-partitioning-features.html">New 
Range Partitioning Features in Kudu 0.10</a> </li>
@@ -272,8 +266,6 @@ of 0.9.0 are encouraged to update to the new version at 
their earliest convenien
     
       <li> <a href="/2016/06/17/raft-consensus-single-node.html">Using Raft 
Consensus on a Single Node</a> </li>
     
-      <li> <a href="/2016/06/13/weekly-update.html">Apache Kudu (incubating) 
Weekly Update June 13, 2016</a> </li>
-    
     </ul>
   </div>
 </div>

http://git-wip-us.apache.org/repos/asf/kudu-site/blob/bc4e6c33/blog/page/3/index.html
----------------------------------------------------------------------
diff --git a/blog/page/3/index.html b/blog/page/3/index.html
index 7d5a7db..8d8023d 100644
--- a/blog/page/3/index.html
+++ b/blog/page/3/index.html
@@ -111,6 +111,35 @@
 <!-- Articles -->
 <article>
   <header>
+    <h1 class="entry-title"><a 
href="/2016/07/01/apache-kudu-0-9-1-released.html">Apache Kudu (incubating) 
0.9.1 released</a></h1>
+    <p class="meta">Posted 01 Jul 2016 by Todd Lipcon</p>
+  </header>
+  <div class="entry-content">
+    
+    <p>The Apache Kudu (incubating) team is happy to announce the release of 
Kudu
+0.9.1!</p>
+
+<p>This release fixes a few issues found in the previous 0.9.0 release. All 
users
+of 0.9.0 are encouraged to update to the new version at their earliest 
convenience.</p>
+
+<ul>
+  <li>Read the detailed <a 
href="http://kudu.apache.org/releases/0.9.1/docs/release_notes.html";>Kudu 0.9.1 
release notes</a></li>
+  <li>Download the <a href="http://kudu.apache.org/releases/0.9.1/";>Kudu 0.9.1 
source release</a></li>
+</ul>
+
+
+    
+  </div>
+  <div class="read-full">
+    <a class="btn btn-info" 
href="/2016/07/01/apache-kudu-0-9-1-released.html">Read full post...</a>
+  </div>
+</article>
+
+
+
+<!-- Articles -->
+<article>
+  <header>
     <h1 class="entry-title"><a href="/2016/06/27/weekly-update.html">Apache 
Kudu (incubating) Weekly Update June 27, 2016</a></h1>
     <p class="meta">Posted 27 Jun 2016 by Todd Lipcon</p>
   </header>
@@ -138,7 +167,7 @@ covers ongoing development and news in the Apache Kudu 
(incubating) project.</p>
   <div class="entry-content">
     
     <p>This blog post describes how the 1.0 release of Apache Kudu 
(incubating) will
-support fault tolerance for the Kudu master, finally eliminating Kudu’s last
+support fault tolerance for the Kudu master, finally eliminating Kudu&#8217;s 
last
 single point of failure.</p>
 
 
@@ -196,27 +225,6 @@ replication factor of 1.</p>
 
 
 
-<!-- Articles -->
-<article>
-  <header>
-    <h1 class="entry-title"><a href="/2016/06/13/weekly-update.html">Apache 
Kudu (incubating) Weekly Update June 13, 2016</a></h1>
-    <p class="meta">Posted 13 Jun 2016 by Jean-Daniel Cryans</p>
-  </header>
-  <div class="entry-content">
-    
-    <p>Welcome to the thirteenth edition of the Kudu Weekly Update. This 
weekly blog post
-covers ongoing development and news in the Apache Kudu (incubating) 
project.</p>
-
-
-    
-  </div>
-  <div class="read-full">
-    <a class="btn btn-info" href="/2016/06/13/weekly-update.html">Read full 
post...</a>
-  </div>
-</article>
-
-
-
 <!-- Pagination links -->
 
 <nav>
@@ -237,6 +245,8 @@ covers ongoing development and news in the Apache Kudu 
(incubating) project.</p>
     <h3>Recent posts</h3>
     <ul>
     
+      <li> <a href="/2016/09/16/predicate-pushdown.html">Pushing Down 
Predicate Evaluation in Apache Kudu</a> </li>
+    
       <li> <a href="/2016/08/31/intro-flume-kudu-sink.html">An Introduction to 
the Flume Kudu Sink</a> </li>
     
       <li> <a href="/2016/08/23/new-range-partitioning-features.html">New 
Range Partitioning Features in Kudu 0.10</a> </li>
@@ -265,8 +275,6 @@ covers ongoing development and news in the Apache Kudu 
(incubating) project.</p>
     
       <li> <a href="/2016/06/17/raft-consensus-single-node.html">Using Raft 
Consensus on a Single Node</a> </li>
     
-      <li> <a href="/2016/06/13/weekly-update.html">Apache Kudu (incubating) 
Weekly Update June 13, 2016</a> </li>
-    
     </ul>
   </div>
 </div>

http://git-wip-us.apache.org/repos/asf/kudu-site/blob/bc4e6c33/blog/page/4/index.html
----------------------------------------------------------------------
diff --git a/blog/page/4/index.html b/blog/page/4/index.html
index bcd2a93..9b32932 100644
--- a/blog/page/4/index.html
+++ b/blog/page/4/index.html
@@ -111,6 +111,27 @@
 <!-- Articles -->
 <article>
   <header>
+    <h1 class="entry-title"><a href="/2016/06/13/weekly-update.html">Apache 
Kudu (incubating) Weekly Update June 13, 2016</a></h1>
+    <p class="meta">Posted 13 Jun 2016 by Jean-Daniel Cryans</p>
+  </header>
+  <div class="entry-content">
+    
+    <p>Welcome to the thirteenth edition of the Kudu Weekly Update. This 
weekly blog post
+covers ongoing development and news in the Apache Kudu (incubating) 
project.</p>
+
+
+    
+  </div>
+  <div class="read-full">
+    <a class="btn btn-info" href="/2016/06/13/weekly-update.html">Read full 
post...</a>
+  </div>
+</article>
+
+
+
+<!-- Articles -->
+<article>
+  <header>
     <h1 class="entry-title"><a 
href="/2016/06/10/apache-kudu-0-9-0-released.html">Apache Kudu (incubating) 
0.9.0 released</a></h1>
     <p class="meta">Posted 10 Jun 2016 by Jean-Daniel Cryans</p>
   </header>
@@ -120,7 +141,7 @@
 0.9.0!</p>
 
 <p>This latest version adds basic UPSERT functionality and an improved Apache 
Spark Data Source
-that doesn’t rely on the MapReduce I/O formats. It also improves Tablet 
Server
+that doesn&#8217;t rely on the MapReduce I/O formats. It also improves Tablet 
Server
 restart time as well as write performance under high load. Finally, Kudu now 
enforces
 the specification of a partitioning scheme for new tables.</p>
 
@@ -204,27 +225,6 @@ covers ongoing development and news in the Apache Kudu 
(incubating) project.</p>
 
 
 
-<!-- Articles -->
-<article>
-  <header>
-    <h1 class="entry-title"><a href="/2016/05/23/weekly-update.html">Apache 
Kudu (incubating) Weekly Update May 23, 2016</a></h1>
-    <p class="meta">Posted 23 May 2016 by Todd Lipcon</p>
-  </header>
-  <div class="entry-content">
-    
-    <p>Welcome to the tenth edition of the Kudu Weekly Update. This weekly 
blog post
-covers ongoing development and news in the Apache Kudu (incubating) 
project.</p>
-
-
-    
-  </div>
-  <div class="read-full">
-    <a class="btn btn-info" href="/2016/05/23/weekly-update.html">Read full 
post...</a>
-  </div>
-</article>
-
-
-
 <!-- Pagination links -->
 
 <nav>
@@ -245,6 +245,8 @@ covers ongoing development and news in the Apache Kudu 
(incubating) project.</p>
     <h3>Recent posts</h3>
     <ul>
     
+      <li> <a href="/2016/09/16/predicate-pushdown.html">Pushing Down 
Predicate Evaluation in Apache Kudu</a> </li>
+    
       <li> <a href="/2016/08/31/intro-flume-kudu-sink.html">An Introduction to 
the Flume Kudu Sink</a> </li>
     
       <li> <a href="/2016/08/23/new-range-partitioning-features.html">New 
Range Partitioning Features in Kudu 0.10</a> </li>
@@ -273,8 +275,6 @@ covers ongoing development and news in the Apache Kudu 
(incubating) project.</p>
     
       <li> <a href="/2016/06/17/raft-consensus-single-node.html">Using Raft 
Consensus on a Single Node</a> </li>
     
-      <li> <a href="/2016/06/13/weekly-update.html">Apache Kudu (incubating) 
Weekly Update June 13, 2016</a> </li>
-    
     </ul>
   </div>
 </div>

http://git-wip-us.apache.org/repos/asf/kudu-site/blob/bc4e6c33/blog/page/5/index.html
----------------------------------------------------------------------
diff --git a/blog/page/5/index.html b/blog/page/5/index.html
index 79a8f83..4d1b220 100644
--- a/blog/page/5/index.html
+++ b/blog/page/5/index.html
@@ -111,19 +111,19 @@
 <!-- Articles -->
 <article>
   <header>
-    <h1 class="entry-title"><a href="/2016/05/16/weekly-update.html">Apache 
Kudu (incubating) Weekly Update May 16, 2016</a></h1>
-    <p class="meta">Posted 16 May 2016 by Todd Lipcon</p>
+    <h1 class="entry-title"><a href="/2016/05/23/weekly-update.html">Apache 
Kudu (incubating) Weekly Update May 23, 2016</a></h1>
+    <p class="meta">Posted 23 May 2016 by Todd Lipcon</p>
   </header>
   <div class="entry-content">
     
-    <p>Welcome to the ninth edition of the Kudu Weekly Update. This weekly 
blog post
+    <p>Welcome to the tenth edition of the Kudu Weekly Update. This weekly 
blog post
 covers ongoing development and news in the Apache Kudu (incubating) 
project.</p>
 
 
     
   </div>
   <div class="read-full">
-    <a class="btn btn-info" href="/2016/05/16/weekly-update.html">Read full 
post...</a>
+    <a class="btn btn-info" href="/2016/05/23/weekly-update.html">Read full 
post...</a>
   </div>
 </article>
 
@@ -132,19 +132,19 @@ covers ongoing development and news in the Apache Kudu 
(incubating) project.</p>
 <!-- Articles -->
 <article>
   <header>
-    <h1 class="entry-title"><a href="/2016/05/09/weekly-update.html">Apache 
Kudu (incubating) Weekly Update May 9, 2016</a></h1>
-    <p class="meta">Posted 09 May 2016 by Jean-Daniel Cryans</p>
+    <h1 class="entry-title"><a href="/2016/05/16/weekly-update.html">Apache 
Kudu (incubating) Weekly Update May 16, 2016</a></h1>
+    <p class="meta">Posted 16 May 2016 by Todd Lipcon</p>
   </header>
   <div class="entry-content">
     
-    <p>Welcome to the eighth edition of the Kudu Weekly Update. This weekly 
blog post
+    <p>Welcome to the ninth edition of the Kudu Weekly Update. This weekly 
blog post
 covers ongoing development and news in the Apache Kudu (incubating) 
project.</p>
 
 
     
   </div>
   <div class="read-full">
-    <a class="btn btn-info" href="/2016/05/09/weekly-update.html">Read full 
post...</a>
+    <a class="btn btn-info" href="/2016/05/16/weekly-update.html">Read full 
post...</a>
   </div>
 </article>
 
@@ -153,19 +153,19 @@ covers ongoing development and news in the Apache Kudu 
(incubating) project.</p>
 <!-- Articles -->
 <article>
   <header>
-    <h1 class="entry-title"><a href="/2016/05/03/weekly-update.html">Apache 
Kudu (incubating) Weekly Update May 3, 2016</a></h1>
-    <p class="meta">Posted 03 May 2016 by Todd Lipcon</p>
+    <h1 class="entry-title"><a href="/2016/05/09/weekly-update.html">Apache 
Kudu (incubating) Weekly Update May 9, 2016</a></h1>
+    <p class="meta">Posted 09 May 2016 by Jean-Daniel Cryans</p>
   </header>
   <div class="entry-content">
     
-    <p>Welcome to the seventh edition of the Kudu Weekly Update. This weekly 
blog post
+    <p>Welcome to the eighth edition of the Kudu Weekly Update. This weekly 
blog post
 covers ongoing development and news in the Apache Kudu (incubating) 
project.</p>
 
 
     
   </div>
   <div class="read-full">
-    <a class="btn btn-info" href="/2016/05/03/weekly-update.html">Read full 
post...</a>
+    <a class="btn btn-info" href="/2016/05/09/weekly-update.html">Read full 
post...</a>
   </div>
 </article>
 
@@ -174,18 +174,19 @@ covers ongoing development and news in the Apache Kudu 
(incubating) project.</p>
 <!-- Articles -->
 <article>
   <header>
-    <h1 class="entry-title"><a href="/2016/04/26/ycsb.html">Benchmarking and 
Improving Kudu Insert Performance with YCSB</a></h1>
-    <p class="meta">Posted 26 Apr 2016 by Todd Lipcon</p>
+    <h1 class="entry-title"><a href="/2016/05/03/weekly-update.html">Apache 
Kudu (incubating) Weekly Update May 3, 2016</a></h1>
+    <p class="meta">Posted 03 May 2016 by Todd Lipcon</p>
   </header>
   <div class="entry-content">
     
-    <p>Recently, I wanted to stress-test and benchmark some changes to the 
Kudu RPC server, and decided to use YCSB as a way to generate reasonable load. 
While running YCSB, I noticed interesting results, and what started as an 
unrelated testing exercise eventually yielded some new insights into Kudu’s 
behavior. These insights will motivate changes to default Kudu settings and 
code in upcoming versions. This post details the benchmark setup, analysis, and 
conclusions.</p>
+    <p>Welcome to the seventh edition of the Kudu Weekly Update. This weekly 
blog post
+covers ongoing development and news in the Apache Kudu (incubating) 
project.</p>
 
 
     
   </div>
   <div class="read-full">
-    <a class="btn btn-info" href="/2016/04/26/ycsb.html">Read full post...</a>
+    <a class="btn btn-info" href="/2016/05/03/weekly-update.html">Read full 
post...</a>
   </div>
 </article>
 
@@ -194,19 +195,18 @@ covers ongoing development and news in the Apache Kudu 
(incubating) project.</p>
 <!-- Articles -->
 <article>
   <header>
-    <h1 class="entry-title"><a href="/2016/04/25/weekly-update.html">Apache 
Kudu (incubating) Weekly Update April 25, 2016</a></h1>
-    <p class="meta">Posted 25 Apr 2016 by Todd Lipcon</p>
+    <h1 class="entry-title"><a href="/2016/04/26/ycsb.html">Benchmarking and 
Improving Kudu Insert Performance with YCSB</a></h1>
+    <p class="meta">Posted 26 Apr 2016 by Todd Lipcon</p>
   </header>
   <div class="entry-content">
     
-    <p>Welcome to the sixth edition of the Kudu Weekly Update. This weekly 
blog post
-covers ongoing development and news in the Apache Kudu (incubating) 
project.</p>
+    <p>Recently, I wanted to stress-test and benchmark some changes to the 
Kudu RPC server, and decided to use YCSB as a way to generate reasonable load. 
While running YCSB, I noticed interesting results, and what started as an 
unrelated testing exercise eventually yielded some new insights into 
Kudu&#8217;s behavior. These insights will motivate changes to default Kudu 
settings and code in upcoming versions. This post details the benchmark setup, 
analysis, and conclusions.</p>
 
 
     
   </div>
   <div class="read-full">
-    <a class="btn btn-info" href="/2016/04/25/weekly-update.html">Read full 
post...</a>
+    <a class="btn btn-info" href="/2016/04/26/ycsb.html">Read full post...</a>
   </div>
 </article>
 
@@ -232,6 +232,8 @@ covers ongoing development and news in the Apache Kudu 
(incubating) project.</p>
     <h3>Recent posts</h3>
     <ul>
     
+      <li> <a href="/2016/09/16/predicate-pushdown.html">Pushing Down 
Predicate Evaluation in Apache Kudu</a> </li>
+    
       <li> <a href="/2016/08/31/intro-flume-kudu-sink.html">An Introduction to 
the Flume Kudu Sink</a> </li>
     
       <li> <a href="/2016/08/23/new-range-partitioning-features.html">New 
Range Partitioning Features in Kudu 0.10</a> </li>
@@ -260,8 +262,6 @@ covers ongoing development and news in the Apache Kudu 
(incubating) project.</p>
     
       <li> <a href="/2016/06/17/raft-consensus-single-node.html">Using Raft 
Consensus on a Single Node</a> </li>
     
-      <li> <a href="/2016/06/13/weekly-update.html">Apache Kudu (incubating) 
Weekly Update June 13, 2016</a> </li>
-    
     </ul>
   </div>
 </div>

http://git-wip-us.apache.org/repos/asf/kudu-site/blob/bc4e6c33/blog/page/6/index.html
----------------------------------------------------------------------
diff --git a/blog/page/6/index.html b/blog/page/6/index.html
index 16c39eb..70caca7 100644
--- a/blog/page/6/index.html
+++ b/blog/page/6/index.html
@@ -111,6 +111,27 @@
 <!-- Articles -->
 <article>
   <header>
+    <h1 class="entry-title"><a href="/2016/04/25/weekly-update.html">Apache 
Kudu (incubating) Weekly Update April 25, 2016</a></h1>
+    <p class="meta">Posted 25 Apr 2016 by Todd Lipcon</p>
+  </header>
+  <div class="entry-content">
+    
+    <p>Welcome to the sixth edition of the Kudu Weekly Update. This weekly 
blog post
+covers ongoing development and news in the Apache Kudu (incubating) 
project.</p>
+
+
+    
+  </div>
+  <div class="read-full">
+    <a class="btn btn-info" href="/2016/04/25/weekly-update.html">Read full 
post...</a>
+  </div>
+</article>
+
+
+
+<!-- Articles -->
+<article>
+  <header>
     <h1 class="entry-title"><a 
href="/2016/04/19/kudu-0-8-0-predicate-improvements.html">Predicate 
Improvements in Kudu 0.8</a></h1>
     <p class="meta">Posted 19 Apr 2016 by Dan Burkert</p>
   </header>
@@ -213,27 +234,6 @@ client, plus many other improvements and bug fixes.</p>
 
 
 
-<!-- Articles -->
-<article>
-  <header>
-    <h1 class="entry-title"><a href="/2016/04/11/weekly-update.html">Apache 
Kudu (incubating) Weekly Update April 11, 2016</a></h1>
-    <p class="meta">Posted 11 Apr 2016 by Todd Lipcon</p>
-  </header>
-  <div class="entry-content">
-    
-    <p>Welcome to the fourth edition of the Kudu Weekly Update. This weekly 
blog post
-covers ongoing development and news in the Apache Kudu (incubating) 
project.</p>
-
-
-    
-  </div>
-  <div class="read-full">
-    <a class="btn btn-info" href="/2016/04/11/weekly-update.html">Read full 
post...</a>
-  </div>
-</article>
-
-
-
 <!-- Pagination links -->
 
 <nav>
@@ -254,6 +254,8 @@ covers ongoing development and news in the Apache Kudu 
(incubating) project.</p>
     <h3>Recent posts</h3>
     <ul>
     
+      <li> <a href="/2016/09/16/predicate-pushdown.html">Pushing Down 
Predicate Evaluation in Apache Kudu</a> </li>
+    
       <li> <a href="/2016/08/31/intro-flume-kudu-sink.html">An Introduction to 
the Flume Kudu Sink</a> </li>
     
       <li> <a href="/2016/08/23/new-range-partitioning-features.html">New 
Range Partitioning Features in Kudu 0.10</a> </li>
@@ -282,8 +284,6 @@ covers ongoing development and news in the Apache Kudu 
(incubating) project.</p>
     
       <li> <a href="/2016/06/17/raft-consensus-single-node.html">Using Raft 
Consensus on a Single Node</a> </li>
     
-      <li> <a href="/2016/06/13/weekly-update.html">Apache Kudu (incubating) 
Weekly Update June 13, 2016</a> </li>
-    
     </ul>
   </div>
 </div>

http://git-wip-us.apache.org/repos/asf/kudu-site/blob/bc4e6c33/blog/page/7/index.html
----------------------------------------------------------------------
diff --git a/blog/page/7/index.html b/blog/page/7/index.html
index f39d745..82cdd33 100644
--- a/blog/page/7/index.html
+++ b/blog/page/7/index.html
@@ -111,6 +111,27 @@
 <!-- Articles -->
 <article>
   <header>
+    <h1 class="entry-title"><a href="/2016/04/11/weekly-update.html">Apache 
Kudu (incubating) Weekly Update April 11, 2016</a></h1>
+    <p class="meta">Posted 11 Apr 2016 by Todd Lipcon</p>
+  </header>
+  <div class="entry-content">
+    
+    <p>Welcome to the fourth edition of the Kudu Weekly Update. This weekly 
blog post
+covers ongoing development and news in the Apache Kudu (incubating) 
project.</p>
+
+
+    
+  </div>
+  <div class="read-full">
+    <a class="btn btn-info" href="/2016/04/11/weekly-update.html">Read full 
post...</a>
+  </div>
+</article>
+
+
+
+<!-- Articles -->
+<article>
+  <header>
     <h1 class="entry-title"><a href="/2016/04/04/weekly-update.html">Apache 
Kudu (incubating) Weekly Update April 4, 2016</a></h1>
     <p class="meta">Posted 04 Apr 2016 by Todd Lipcon</p>
   </header>
@@ -137,8 +158,8 @@ covers ongoing development and news in the Apache Kudu 
(incubating) project.</p>
   </header>
   <div class="entry-content">
     
-    <p>Welcome to the second edition of the Kudu Weekly Update. As with last 
week’s
-inaugural post, we’ll cover ongoing development and news in the Apache Kudu
+    <p>Welcome to the second edition of the Kudu Weekly Update. As with last 
week&#8217;s
+inaugural post, we&#8217;ll cover ongoing development and news in the Apache 
Kudu
 project on a weekly basis.</p>
 
 
@@ -159,13 +180,13 @@ project on a weekly basis.</p>
   </header>
   <div class="entry-content">
     
-    <p>Kudu is a fast-moving young open source project, and we’ve heard from 
a few
-members of the community that it can be difficult to keep track of what’s
+    <p>Kudu is a fast-moving young open source project, and we&#8217;ve heard 
from a few
+members of the community that it can be difficult to keep track of what&#8217;s
 going on day-to-day. A typical month comprises 80-100 individual patches
 committed and hundreds of code review and discussion
 emails. So, inspired by similar weekly newsletters like
-<a href="http://llvmweekly.org/";>LLVM Weekly</a> and <a 
href="http://lwn.net/Kernel/";>LWN’s weekly kernel coverage</a>
-we’re going to experiment with our own weekly newsletter covering
+<a href="http://llvmweekly.org/";>LLVM Weekly</a> and <a 
href="http://lwn.net/Kernel/";>LWN&#8217;s weekly kernel coverage</a>
+we&#8217;re going to experiment with our own weekly newsletter covering
 recent development and Kudu-related news.</p>
 
 
@@ -203,29 +224,6 @@ bugs fixed in this release:</p>
 
 
 
-<!-- Articles -->
-<article>
-  <header>
-    <h1 class="entry-title"><a 
href="/2016/02/26/apache-kudu-0-7-0-released.html">Apache Kudu (incubating) 
0.7.0 released</a></h1>
-    <p class="meta">Posted 26 Feb 2016 by Todd Lipcon</p>
-  </header>
-  <div class="entry-content">
-    
-    <p>The Apache Kudu (incubating) team is happy to announce its first 
release as
-part of the ASF Incubator, version 0.7.0!</p>
-
-<p>This latest version has a number of improvements since 0.6.0:</p>
-
-
-    
-  </div>
-  <div class="read-full">
-    <a class="btn btn-info" 
href="/2016/02/26/apache-kudu-0-7-0-released.html">Read full post...</a>
-  </div>
-</article>
-
-
-
 <!-- Pagination links -->
 
 <nav>
@@ -235,6 +233,8 @@ part of the ASF Incubator, version 0.7.0!</p>
     <li class="previous"><a href="/blog/page/6"><span 
aria-hidden="true">&larr;</span> Newer posts</a></li>
   
   
+    <li class="next"><a href="/blog/page/8">Older posts <span 
aria-hidden="true">&rarr;</span></a></li>
+  
   </ul>
 </nav>
 
@@ -244,6 +244,8 @@ part of the ASF Incubator, version 0.7.0!</p>
     <h3>Recent posts</h3>
     <ul>
     
+      <li> <a href="/2016/09/16/predicate-pushdown.html">Pushing Down 
Predicate Evaluation in Apache Kudu</a> </li>
+    
       <li> <a href="/2016/08/31/intro-flume-kudu-sink.html">An Introduction to 
the Flume Kudu Sink</a> </li>
     
       <li> <a href="/2016/08/23/new-range-partitioning-features.html">New 
Range Partitioning Features in Kudu 0.10</a> </li>
@@ -272,8 +274,6 @@ part of the ASF Incubator, version 0.7.0!</p>
     
       <li> <a href="/2016/06/17/raft-consensus-single-node.html">Using Raft 
Consensus on a Single Node</a> </li>
     
-      <li> <a href="/2016/06/13/weekly-update.html">Apache Kudu (incubating) 
Weekly Update June 13, 2016</a> </li>
-    
     </ul>
   </div>
 </div>

Reply via email to