kudu-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From mpe...@apache.org
Subject [1/2] kudu-site git commit: Publish commit(s) from site source repo: ff69430 blog: Minor tweaks to flume article 293d58c jekyll: Use GitHub-flavored markdown and GitHub style highlighting
Date Wed, 31 Aug 2016 21:55:02 GMT
Repository: kudu-site
Updated Branches:
  refs/heads/asf-site 3f1e7692f -> 83485ff3f


http://git-wip-us.apache.org/repos/asf/kudu-site/blob/83485ff3/blog/index.html
----------------------------------------------------------------------
diff --git a/blog/index.html b/blog/index.html
index 44af7e6..19e2dd7 100644
--- a/blog/index.html
+++ b/blog/index.html
@@ -111,7 +111,7 @@
 <!-- Articles -->
 <article>
   <header>
-    <h1 class="entry-title"><a href="/2016/08/31/intro-flume-kudu-sink.html">An Introduction to Kudu Flume Sink</a></h1>
+    <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">
@@ -119,7 +119,8 @@
     <p>This post discusses the Kudu Flume Sink. First, I’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>
 
-<h1 id="why-kudu">Why Kudu</h1>
+<h2 id="why-kudu">Why Kudu</h2>
+
 <p>Traditionally in the Hadoop ecosystem we’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
@@ -191,7 +192,8 @@ super-fast query engine.</p>
 <p>But how would we make sure data is reliably ingested into the streaming pipeline <em>and</em> the
 Kudu-based data warehouse? This is where Apache Flume comes in.</p>
 
-<h1 id="why-flume">Why Flume</h1>
+<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
 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
@@ -217,47 +219,48 @@ data to HDFS, HBase, Hive, Kafka, as well as to other Flume agents.</p>
 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>
 
-<h1 id="configuring-the-kudu-flume-sink">Configuring the Kudu Flume Sink</h1>
+<h2 id="configuring-the-kudu-flume-sink">Configuring the Kudu Flume Sink</h2>
+
 <p>Here is a sample flume configuration file:</p>
 
-<p>```
-agent1.sources  = source1
+<div class="highlighter-rouge"><pre class="highlight"><code>agent1.sources  = source1
 agent1.channels = channel1
-agent1.sinks = sink1</p>
+agent1.sinks = sink1
 
-<p>agent1.sources.source1.type = exec
+agent1.sources.source1.type = exec
 agent1.sources.source1.command = /usr/bin/vmstat 1
-agent1.sources.source1.channels = channel1</p>
+agent1.sources.source1.channels = channel1
 
-<p>agent1.channels.channel1.type = memory
+agent1.channels.channel1.type = memory
 agent1.channels.channel1.capacity = 10000
-agent1.channels.channel1.transactionCapacity = 1000</p>
+agent1.channels.channel1.transactionCapacity = 1000
 
-<p>agent1.sinks.sink1.type = org.apache.flume.sink.kudu.KuduSink
+agent1.sinks.sink1.type = org.apache.flume.sink.kudu.KuduSink
 agent1.sinks.sink1.masterAddresses = localhost
 agent1.sinks.sink1.tableName = stats
 agent1.sinks.sink1.channel = channel1
 agent1.sinks.sink1.batchSize = 50
 agent1.sinks.sink1.producer = org.apache.kudu.flume.sink.SimpleKuduEventProducer
-```</p>
+</code></pre>
+</div>
 
-<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
+<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>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>
+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>At a minimum, the Kudu Flume Sink needs to know where the Kudu masters are
-(<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
+(<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
 table, it has to be created before the Kudu Flume Sink is started.</p>
 
-<p>You may also notice the <code>batchSize</code> parameter. Batch size is used for batching up to that many
+<p>You may also notice the <code class="highlighter-rouge">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>
 
@@ -307,91 +310,91 @@ 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>
 
-<p>```
-public class SimpleKuduEventProducer implements KuduEventProducer {
-  private byte[] payload;
-  private KuduTable table;
-  private String payloadColumn;</p>
-
-<p>public SimpleKuduEventProducer(){
-  }</p>
-
-<p>@Override
-  public void configure(Context context) {
-    payloadColumn = context.getString(“payloadColumn”,”payload”);
-  }</p>
-
-<p>@Override
-  public void configure(ComponentConfiguration conf) {
-  }</p>
-
-<p>@Override
-  public void initialize(Event event, KuduTable table) {
-    this.payload = event.getBody();
-    this.table = table;
-  }</p>
-
-<p>@Override
-  public List<operation> getOperations() throws FlumeException {
-    try {
-      Insert insert = table.newInsert();
-      PartialRow row = insert.getRow();
-      row.addBinary(payloadColumn, payload);</operation></p>
-
-<pre><code>  return Collections.singletonList((Operation) insert);
-} catch (Exception e){
-  throw new FlumeException("Failed to create Kudu Insert object!", e);
-}   }
+<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>
 </code></pre>
+</div>
 
-<p>@Override
-  public void close() {
-  }
-}
-```</p>
-
-<p><code>SimpleKuduEventProducer</code> implements the <code>org.apache.kudu.flume.sink.KuduEventProducer</code> interface,
+<p><code class="highlighter-rouge">SimpleKuduEventProducer</code> implements the <code class="highlighter-rouge">org.apache.kudu.flume.sink.KuduEventProducer</code> interface,
 which itself looks like this:</p>
 
-<p>```
-public interface KuduEventProducer extends Configurable, ConfigurableComponent {
-  /**
+<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">/**
    * Initialize the event producer.
    * @param event to be written to Kudu
    * @param table the KuduTable object used for creating Kudu Operation objects
-   */
-  void initialize(Event event, KuduTable table);</p>
+   */</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>
 
-<p>/**
+  <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
-   */
-  List<operation> getOperations();</operation></p>
+   */</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>
 
-<p>/*
+  <span class="cm">/*
    * Clean up any state. This will be called when the sink is being stopped.
-   */
-  void close();
-}
-```</p>
+   */</span>
+  <span class="kt">void</span> <span class="n">close</span><span class="o">();</span>
+<span class="o">}</span>
+</code></pre>
+</div>
 
-<p><code>public void configure(Context context)</code> is called when an instance of our producer is instantiated
+<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>payloadColumn</code> and uses its value (“payload” if not overridden in Flume configuration file) as the
+<code class="highlighter-rouge">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>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
+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
 example).</p>
 
-<p>The main producer logic resides in the <code>public List&lt;Operation&gt; getOperations()</code> method. In
+<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>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
+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
 will need to write your own custom producer in the real world, but you can base your implementation
 on the built-in ones.</p>
 
@@ -400,7 +403,8 @@ custom event producer is not required to write data to Kudu. See
 <a href="https://gerrit.cloudera.org/#/c/4034/">here</a> for a work-in-progress generic event producer for
 Avro-encoded Events.</p>
 
-<h1 id="conclusion">Conclusion</h1>
+<h2 id="conclusion">Conclusion</h2>
+
 <p>Kudu is a scalable data store which lets us ingest insane amounts of data per second. Apache Flume
 helps us aggregate data from various sources, and the Kudu Flume Sink lets us easily store
 the aggregated Flume events into Kudu. Together they enable us to create a data warehouse out of
@@ -408,7 +412,8 @@ disparate sources.</p>
 
 <p><em>Ara Abrahamian is a software engineer at Argyle Data building fraud detection systems using
 sophisticated machine learning methods. Ara is the original author of the Flume Kudu Sink that
-is included in the Kudu distribution. You can follow him on Twitter at @ara_e.</em></p>
+is included in the Kudu distribution. You can follow him on Twitter at
+<a href="https://twitter.com/ara_e">@ara_e</a>.</em></p>
 
 
     
@@ -525,7 +530,7 @@ covers ongoing development and news in the Apache Kudu project.</p>
     <h3>Recent posts</h3>
     <ul>
     
-      <li> <a href="/2016/08/31/intro-flume-kudu-sink.html">An Introduction to Kudu Flume Sink</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>
     

http://git-wip-us.apache.org/repos/asf/kudu-site/blob/83485ff3/blog/page/2/index.html
----------------------------------------------------------------------
diff --git a/blog/page/2/index.html b/blog/page/2/index.html
index 472d5dc..1d359de 100644
--- a/blog/page/2/index.html
+++ b/blog/page/2/index.html
@@ -244,7 +244,7 @@ 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/08/31/intro-flume-kudu-sink.html">An Introduction to Kudu Flume Sink</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>
     

http://git-wip-us.apache.org/repos/asf/kudu-site/blob/83485ff3/blog/page/3/index.html
----------------------------------------------------------------------
diff --git a/blog/page/3/index.html b/blog/page/3/index.html
index 841a385..7d5a7db 100644
--- a/blog/page/3/index.html
+++ b/blog/page/3/index.html
@@ -237,7 +237,7 @@ covers ongoing development and news in the Apache Kudu (incubating) project.</p>
     <h3>Recent posts</h3>
     <ul>
     
-      <li> <a href="/2016/08/31/intro-flume-kudu-sink.html">An Introduction to Kudu Flume Sink</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>
     

http://git-wip-us.apache.org/repos/asf/kudu-site/blob/83485ff3/blog/page/4/index.html
----------------------------------------------------------------------
diff --git a/blog/page/4/index.html b/blog/page/4/index.html
index 9a36dc8..bcd2a93 100644
--- a/blog/page/4/index.html
+++ b/blog/page/4/index.html
@@ -245,7 +245,7 @@ covers ongoing development and news in the Apache Kudu (incubating) project.</p>
     <h3>Recent posts</h3>
     <ul>
     
-      <li> <a href="/2016/08/31/intro-flume-kudu-sink.html">An Introduction to Kudu Flume Sink</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>
     

http://git-wip-us.apache.org/repos/asf/kudu-site/blob/83485ff3/blog/page/5/index.html
----------------------------------------------------------------------
diff --git a/blog/page/5/index.html b/blog/page/5/index.html
index f35c743..79a8f83 100644
--- a/blog/page/5/index.html
+++ b/blog/page/5/index.html
@@ -232,7 +232,7 @@ covers ongoing development and news in the Apache Kudu (incubating) project.</p>
     <h3>Recent posts</h3>
     <ul>
     
-      <li> <a href="/2016/08/31/intro-flume-kudu-sink.html">An Introduction to Kudu Flume Sink</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>
     

http://git-wip-us.apache.org/repos/asf/kudu-site/blob/83485ff3/blog/page/6/index.html
----------------------------------------------------------------------
diff --git a/blog/page/6/index.html b/blog/page/6/index.html
index 7e526c2..16c39eb 100644
--- a/blog/page/6/index.html
+++ b/blog/page/6/index.html
@@ -254,7 +254,7 @@ covers ongoing development and news in the Apache Kudu (incubating) project.</p>
     <h3>Recent posts</h3>
     <ul>
     
-      <li> <a href="/2016/08/31/intro-flume-kudu-sink.html">An Introduction to Kudu Flume Sink</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>
     

http://git-wip-us.apache.org/repos/asf/kudu-site/blob/83485ff3/blog/page/7/index.html
----------------------------------------------------------------------
diff --git a/blog/page/7/index.html b/blog/page/7/index.html
index 7f46619..f39d745 100644
--- a/blog/page/7/index.html
+++ b/blog/page/7/index.html
@@ -244,7 +244,7 @@ part of the ASF Incubator, version 0.7.0!</p>
     <h3>Recent posts</h3>
     <ul>
     
-      <li> <a href="/2016/08/31/intro-flume-kudu-sink.html">An Introduction to Kudu Flume Sink</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>
     

http://git-wip-us.apache.org/repos/asf/kudu-site/blob/83485ff3/faq.html
----------------------------------------------------------------------
diff --git a/faq.html b/faq.html
index e69d9a1..d2444f4 100644
--- a/faq.html
+++ b/faq.html
@@ -347,8 +347,8 @@ enforcing “external consistency” in two different ways: one that optimizes f
 requires the user to perform additional work and another that requires no additional
 work but can result in some additional latency.</li>
   <li>Scans have “Read Committed” consistency by default. If the user requires strict-serializable
-scans it can choose the <code>READ_AT_SNAPSHOT</code> mode and, optionally, provide a timestamp. The default
-option is non-blocking but the <code>READ_AT_SNAPSHOT</code> option may block when reading from non-leader
+scans it can choose the <code class="highlighter-rouge">READ_AT_SNAPSHOT</code> mode and, optionally, provide a timestamp. The default
+option is non-blocking but the <code class="highlighter-rouge">READ_AT_SNAPSHOT</code> option may block when reading from non-leader
 replicas.</li>
 </ul>
 
@@ -375,7 +375,7 @@ tests, before releasing Kudu 1.0.</p>
 
 <p>Kudu provides direct access via Java and C++ APIs. An experimental Python API is
 also available and is expected to be fully supported in the future. The easiest
-way to load data into Kudu is to use a <code>CREATE TABLE ... AS SELECT * FROM ...</code>
+way to load data into Kudu is to use a <code class="highlighter-rouge">CREATE TABLE ... AS SELECT * FROM ...</code>
 statement in Impala. Although Kudu has not been extensively tested to work with
 ingest tools such as Flume, Sqoop, or Kafka, several of these have been
 experimentally tested. Explicit support for these ingest tools is expected with
@@ -384,7 +384,7 @@ Kudu’s first generally available release.</p>
 <h4 id="whats-the-most-efficient-way-to-bulk-load-data-into-kudu">What’s the most efficient way to bulk load data into Kudu?</h4>
 
 <p>The easiest way to load data into Kudu is if the data is already managed by Impala.
-In this case, a simple <code>INSERT INTO TABLE some_kudu_table SELECT * FROM some_csv_table</code>
+In this case, a simple <code class="highlighter-rouge">INSERT INTO TABLE some_kudu_table SELECT * FROM some_csv_table</code>
 does the trick.</p>
 
 <p>You can also use Kudu’s MapReduce OutputFormat to load data from HDFS, HBase, or
@@ -537,8 +537,9 @@ features.</p>
 Impala can help if you have it available. You can use it to copy your data into
 Parquet format using a statement like:</p>
 
-<pre><code>INSERT INTO TABLE some_parquet_table SELECT * FROM kudu_table
+<div class="highlighter-rouge"><pre class="highlight"><code>INSERT INTO TABLE some_parquet_table SELECT * FROM kudu_table
 </code></pre>
+</div>
 
 <p>then use <a href="http://hadoop.apache.org/docs/r1.2.1/distcp2.html">distcp</a>
 to copy the Parquet data to another cluster. While Kudu is in beta, we’re not

http://git-wip-us.apache.org/repos/asf/kudu-site/blob/83485ff3/feed.xml
----------------------------------------------------------------------
diff --git a/feed.xml b/feed.xml
index 6800739..86ebf57 100644
--- a/feed.xml
+++ b/feed.xml
@@ -1,7 +1,8 @@
-<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom"><generator uri="http://jekyllrb.com" version="2.5.3">Jekyll</generator><link href="/feed.xml" rel="self" type="application/atom+xml" /><link href="/" rel="alternate" type="text/html" /><updated>2016-08-31T09:22:20-07:00</updated><id>/</id><entry><title>An Introduction to Kudu Flume Sink</title><link href="/2016/08/31/intro-flume-kudu-sink.html" rel="alternate" type="text/html" title="An Introduction to Kudu Flume Sink" /><published>2016-08-31T00:00:00-07:00</published><updated>2016-08-31T00:00:00-07:00</updated><id>/2016/08/31/intro-flume-kudu-sink</id><content type="html" xml:base="/2016/08/31/intro-flume-kudu-sink.html">&lt;p&gt;This post discusses the Kudu Flume Sink. First, I’ll give some background on why we considered
+<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom"><generator uri="http://jekyllrb.com" version="2.5.3">Jekyll</generator><link href="/feed.xml" rel="self" type="application/atom+xml" /><link href="/" rel="alternate" type="text/html" /><updated>2016-08-31T14:53:42-07:00</updated><id>/</id><entry><title>An Introduction to the Flume Kudu Sink</title><link href="/2016/08/31/intro-flume-kudu-sink.html" rel="alternate" type="text/html" title="An Introduction to the Flume Kudu Sink" /><published>2016-08-31T00:00:00-07:00</published><updated>2016-08-31T00:00:00-07:00</updated><id>/2016/08/31/intro-flume-kudu-sink</id><content type="html" xml:base="/2016/08/31/intro-flume-kudu-sink.html">&lt;p&gt;This post discusses the Kudu Flume Sink. First, I’ll give some background on why we considered
 using Kudu, what Flume does for us, and how Flume fits with Kudu in our project.&lt;/p&gt;
 
-&lt;h1 id=&quot;why-kudu&quot;&gt;Why Kudu&lt;/h1&gt;
+&lt;h2 id=&quot;why-kudu&quot;&gt;Why Kudu&lt;/h2&gt;
+
 &lt;p&gt;Traditionally in the Hadoop ecosystem we’ve dealt with various &lt;em&gt;batch processing&lt;/em&gt; 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
@@ -73,7 +74,8 @@ super-fast query engine.&lt;/p&gt;
 &lt;p&gt;But how would we make sure data is reliably ingested into the streaming pipeline &lt;em&gt;and&lt;/em&gt; the
 Kudu-based data warehouse? This is where Apache Flume comes in.&lt;/p&gt;
 
-&lt;h1 id=&quot;why-flume&quot;&gt;Why Flume&lt;/h1&gt;
+&lt;h2 id=&quot;why-flume&quot;&gt;Why Flume&lt;/h2&gt;
+
 &lt;p&gt;According to their &lt;a href=&quot;http://flume.apache.org/&quot;&gt;website&lt;/a&gt; “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
@@ -99,47 +101,48 @@ data to HDFS, HBase, Hive, Kafka, as well as to other Flume agents.&lt;/p&gt;
 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 &lt;a href=&quot;https://github.com/apache/kudu/tree/master/java/kudu-flume-sink&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;
 
-&lt;h1 id=&quot;configuring-the-kudu-flume-sink&quot;&gt;Configuring the Kudu Flume Sink&lt;/h1&gt;
+&lt;h2 id=&quot;configuring-the-kudu-flume-sink&quot;&gt;Configuring the Kudu Flume Sink&lt;/h2&gt;
+
 &lt;p&gt;Here is a sample flume configuration file:&lt;/p&gt;
 
-&lt;p&gt;```
-agent1.sources  = source1
+&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;agent1.sources  = source1
 agent1.channels = channel1
-agent1.sinks = sink1&lt;/p&gt;
+agent1.sinks = sink1
 
-&lt;p&gt;agent1.sources.source1.type = exec
+agent1.sources.source1.type = exec
 agent1.sources.source1.command = /usr/bin/vmstat 1
-agent1.sources.source1.channels = channel1&lt;/p&gt;
+agent1.sources.source1.channels = channel1
 
-&lt;p&gt;agent1.channels.channel1.type = memory
+agent1.channels.channel1.type = memory
 agent1.channels.channel1.capacity = 10000
-agent1.channels.channel1.transactionCapacity = 1000&lt;/p&gt;
+agent1.channels.channel1.transactionCapacity = 1000
 
-&lt;p&gt;agent1.sinks.sink1.type = org.apache.flume.sink.kudu.KuduSink
+agent1.sinks.sink1.type = org.apache.flume.sink.kudu.KuduSink
 agent1.sinks.sink1.masterAddresses = localhost
 agent1.sinks.sink1.tableName = stats
 agent1.sinks.sink1.channel = channel1
 agent1.sinks.sink1.batchSize = 50
 agent1.sinks.sink1.producer = org.apache.kudu.flume.sink.SimpleKuduEventProducer
-```&lt;/p&gt;
+&lt;/code&gt;&lt;/pre&gt;
+&lt;/div&gt;
 
-&lt;p&gt;We define a source called &lt;code&gt;source1&lt;/code&gt; which simply executes a &lt;code&gt;vmstat&lt;/code&gt; command to continuously generate
-virtual memory statistics for the machine and queue events into an in-memory &lt;code&gt;channel1&lt;/code&gt; channel,
-which in turn is used for writing these events to a Kudu table called &lt;code&gt;stats&lt;/code&gt;. We are using
-&lt;code&gt;org.apache.kudu.flume.sink.SimpleKuduEventProducer&lt;/code&gt; as the producer. &lt;code&gt;SimpleKuduEventProducer&lt;/code&gt; is
+&lt;p&gt;We define a source called &lt;code class=&quot;highlighter-rouge&quot;&gt;source1&lt;/code&gt; which simply executes a &lt;code class=&quot;highlighter-rouge&quot;&gt;vmstat&lt;/code&gt; command to continuously generate
+virtual memory statistics for the machine and queue events into an in-memory &lt;code class=&quot;highlighter-rouge&quot;&gt;channel1&lt;/code&gt; channel,
+which in turn is used for writing these events to a Kudu table called &lt;code class=&quot;highlighter-rouge&quot;&gt;stats&lt;/code&gt;. We are using
+&lt;code class=&quot;highlighter-rouge&quot;&gt;org.apache.kudu.flume.sink.SimpleKuduEventProducer&lt;/code&gt; as the producer. &lt;code class=&quot;highlighter-rouge&quot;&gt;SimpleKuduEventProducer&lt;/code&gt; 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 &lt;code&gt;KuduSink&lt;/code&gt; class available to Flume. We can do that by simply
-copying the &lt;code&gt;kudu-flume-sink-&amp;lt;VERSION&amp;gt;.jar&lt;/code&gt; jar file from the Kudu distribution to the
-&lt;code&gt;$FLUME_HOME/plugins.d/kudu-sink/lib&lt;/code&gt; directory in the Flume installation. The jar file contains
-&lt;code&gt;KuduSink&lt;/code&gt; and all of its dependencies (including Kudu java client classes).&lt;/p&gt;
+need to make this producer and the &lt;code class=&quot;highlighter-rouge&quot;&gt;KuduSink&lt;/code&gt; class available to Flume. We can do that by simply
+copying the &lt;code class=&quot;highlighter-rouge&quot;&gt;kudu-flume-sink-&amp;lt;VERSION&amp;gt;.jar&lt;/code&gt; jar file from the Kudu distribution to the
+&lt;code class=&quot;highlighter-rouge&quot;&gt;$FLUME_HOME/plugins.d/kudu-sink/lib&lt;/code&gt; directory in the Flume installation. The jar file contains
+&lt;code class=&quot;highlighter-rouge&quot;&gt;KuduSink&lt;/code&gt; and all of its dependencies (including Kudu java client classes).&lt;/p&gt;
 
 &lt;p&gt;At a minimum, the Kudu Flume Sink needs to know where the Kudu masters are
-(&lt;code&gt;agent1.sinks.sink1.masterAddresses = localhost&lt;/code&gt;) and which Kudu table should be used for writing
-Flume events to (&lt;code&gt;agent1.sinks.sink1.tableName = stats&lt;/code&gt;). The Kudu Flume Sink doesn’t create this
+(&lt;code class=&quot;highlighter-rouge&quot;&gt;agent1.sinks.sink1.masterAddresses = localhost&lt;/code&gt;) and which Kudu table should be used for writing
+Flume events to (&lt;code class=&quot;highlighter-rouge&quot;&gt;agent1.sinks.sink1.tableName = stats&lt;/code&gt;). The Kudu Flume Sink doesn’t create this
 table, it has to be created before the Kudu Flume Sink is started.&lt;/p&gt;
 
-&lt;p&gt;You may also notice the &lt;code&gt;batchSize&lt;/code&gt; parameter. Batch size is used for batching up to that many
+&lt;p&gt;You may also notice the &lt;code class=&quot;highlighter-rouge&quot;&gt;batchSize&lt;/code&gt; 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.&lt;/p&gt;
 
@@ -189,91 +192,91 @@ impact on ingest performance of the Kudu cluster.&lt;/p&gt;
 
 &lt;p&gt;Let’s take a look at the source code for the built-in producer class:&lt;/p&gt;
 
-&lt;p&gt;```
-public class SimpleKuduEventProducer implements KuduEventProducer {
-  private byte[] payload;
-  private KuduTable table;
-  private String payloadColumn;&lt;/p&gt;
-
-&lt;p&gt;public SimpleKuduEventProducer(){
-  }&lt;/p&gt;
-
-&lt;p&gt;@Override
-  public void configure(Context context) {
-    payloadColumn = context.getString(“payloadColumn”,”payload”);
-  }&lt;/p&gt;
-
-&lt;p&gt;@Override
-  public void configure(ComponentConfiguration conf) {
-  }&lt;/p&gt;
-
-&lt;p&gt;@Override
-  public void initialize(Event event, KuduTable table) {
-    this.payload = event.getBody();
-    this.table = table;
-  }&lt;/p&gt;
-
-&lt;p&gt;@Override
-  public List&lt;operation&gt; getOperations() throws FlumeException {
-    try {
-      Insert insert = table.newInsert();
-      PartialRow row = insert.getRow();
-      row.addBinary(payloadColumn, payload);&lt;/operation&gt;&lt;/p&gt;
-
-&lt;pre&gt;&lt;code&gt;  return Collections.singletonList((Operation) insert);
-} catch (Exception e){
-  throw new FlumeException(&quot;Failed to create Kudu Insert object!&quot;, e);
-}   }
+&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;kd&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;SimpleKuduEventProducer&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;implements&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;KuduEventProducer&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;
+  &lt;span class=&quot;kd&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;byte&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;[]&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;payload&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;;&lt;/span&gt;
+  &lt;span class=&quot;kd&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;KuduTable&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;table&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;;&lt;/span&gt;
+  &lt;span class=&quot;kd&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;String&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;payloadColumn&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;;&lt;/span&gt;
+
+  &lt;span class=&quot;kd&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;SimpleKuduEventProducer&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(){&lt;/span&gt;
+  &lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;
+
+  &lt;span class=&quot;nd&quot;&gt;@Override&lt;/span&gt;
+  &lt;span class=&quot;kd&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;void&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;configure&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Context&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;context&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;
+    &lt;span class=&quot;n&quot;&gt;payloadColumn&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;context&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;getString&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;payloadColumn&quot;&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;payload&quot;&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;);&lt;/span&gt;
+  &lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;
+
+  &lt;span class=&quot;nd&quot;&gt;@Override&lt;/span&gt;
+  &lt;span class=&quot;kd&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;void&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;configure&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;ComponentConfiguration&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;conf&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;
+  &lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;
+
+  &lt;span class=&quot;nd&quot;&gt;@Override&lt;/span&gt;
+  &lt;span class=&quot;kd&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;void&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;initialize&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Event&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;event&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;KuduTable&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;table&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;
+    &lt;span class=&quot;k&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;payload&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;event&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;getBody&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;();&lt;/span&gt;
+    &lt;span class=&quot;k&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;table&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;table&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;;&lt;/span&gt;
+  &lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;
+
+  &lt;span class=&quot;nd&quot;&gt;@Override&lt;/span&gt;
+  &lt;span class=&quot;kd&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;List&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Operation&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;getOperations&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;throws&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;FlumeException&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;
+    &lt;span class=&quot;k&quot;&gt;try&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;
+      &lt;span class=&quot;n&quot;&gt;Insert&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;insert&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;table&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;newInsert&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;();&lt;/span&gt;
+      &lt;span class=&quot;n&quot;&gt;PartialRow&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;row&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;insert&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;getRow&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;();&lt;/span&gt;
+      &lt;span class=&quot;n&quot;&gt;row&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;addBinary&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;payloadColumn&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;payload&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;);&lt;/span&gt;
+
+      &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Collections&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;singletonList&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;((&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Operation&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;insert&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;);&lt;/span&gt;
+    &lt;span class=&quot;o&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;catch&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Exception&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;){&lt;/span&gt;
+      &lt;span class=&quot;k&quot;&gt;throw&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;FlumeException&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;Failed to create Kudu Insert object!&quot;&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;);&lt;/span&gt;
+    &lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;
+  &lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;
+
+  &lt;span class=&quot;nd&quot;&gt;@Override&lt;/span&gt;
+  &lt;span class=&quot;kd&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;void&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;close&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;
+  &lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;
+&lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;
 &lt;/code&gt;&lt;/pre&gt;
+&lt;/div&gt;
 
-&lt;p&gt;@Override
-  public void close() {
-  }
-}
-```&lt;/p&gt;
-
-&lt;p&gt;&lt;code&gt;SimpleKuduEventProducer&lt;/code&gt; implements the &lt;code&gt;org.apache.kudu.flume.sink.KuduEventProducer&lt;/code&gt; interface,
+&lt;p&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;SimpleKuduEventProducer&lt;/code&gt; implements the &lt;code class=&quot;highlighter-rouge&quot;&gt;org.apache.kudu.flume.sink.KuduEventProducer&lt;/code&gt; interface,
 which itself looks like this:&lt;/p&gt;
 
-&lt;p&gt;```
-public interface KuduEventProducer extends Configurable, ConfigurableComponent {
-  /**
+&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;kd&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;interface&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;KuduEventProducer&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;extends&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Configurable&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;ConfigurableComponent&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;
+  &lt;span class=&quot;cm&quot;&gt;/**
    * Initialize the event producer.
    * @param event to be written to Kudu
    * @param table the KuduTable object used for creating Kudu Operation objects
-   */
-  void initialize(Event event, KuduTable table);&lt;/p&gt;
+   */&lt;/span&gt;
+  &lt;span class=&quot;kt&quot;&gt;void&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;initialize&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Event&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;event&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;KuduTable&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;table&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;);&lt;/span&gt;
 
-&lt;p&gt;/**
+  &lt;span class=&quot;cm&quot;&gt;/**
    * 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
-   */
-  List&lt;operation&gt; getOperations();&lt;/operation&gt;&lt;/p&gt;
+   */&lt;/span&gt;
+  &lt;span class=&quot;n&quot;&gt;List&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Operation&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;getOperations&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;();&lt;/span&gt;
 
-&lt;p&gt;/*
+  &lt;span class=&quot;cm&quot;&gt;/*
    * Clean up any state. This will be called when the sink is being stopped.
-   */
-  void close();
-}
-```&lt;/p&gt;
+   */&lt;/span&gt;
+  &lt;span class=&quot;kt&quot;&gt;void&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;close&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;();&lt;/span&gt;
+&lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;
+&lt;/code&gt;&lt;/pre&gt;
+&lt;/div&gt;
 
-&lt;p&gt;&lt;code&gt;public void configure(Context context)&lt;/code&gt; is called when an instance of our producer is instantiated
+&lt;p&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;public void configure(Context context)&lt;/code&gt; is called when an instance of our producer is instantiated
 by the KuduSink. SimpleKuduEventProducer’s implementation looks for a producer parameter named
-&lt;code&gt;payloadColumn&lt;/code&gt; and uses its value (“payload” if not overridden in Flume configuration file) as the
+&lt;code class=&quot;highlighter-rouge&quot;&gt;payloadColumn&lt;/code&gt; 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 &lt;code&gt;vmstat&lt;/code&gt; command. Each output row
-from that command will be stored as a new row containing a &lt;code&gt;payload&lt;/code&gt; column in the &lt;code&gt;stats&lt;/code&gt; table.
-&lt;code&gt;SimpleKuduEventProducer&lt;/code&gt; does not have any configuration parameters, but if it had any we would
-define them by prefixing it with &lt;code&gt;producer.&lt;/code&gt; (&lt;code&gt;agent1.sinks.sink1.producer.parameter1&lt;/code&gt; for
+configured the KuduSink to listen for events generated from the &lt;code class=&quot;highlighter-rouge&quot;&gt;vmstat&lt;/code&gt; command. Each output row
+from that command will be stored as a new row containing a &lt;code class=&quot;highlighter-rouge&quot;&gt;payload&lt;/code&gt; column in the &lt;code class=&quot;highlighter-rouge&quot;&gt;stats&lt;/code&gt; table.
+&lt;code class=&quot;highlighter-rouge&quot;&gt;SimpleKuduEventProducer&lt;/code&gt; does not have any configuration parameters, but if it had any we would
+define them by prefixing it with &lt;code class=&quot;highlighter-rouge&quot;&gt;producer.&lt;/code&gt; (&lt;code class=&quot;highlighter-rouge&quot;&gt;agent1.sinks.sink1.producer.parameter1&lt;/code&gt; for
 example).&lt;/p&gt;
 
-&lt;p&gt;The main producer logic resides in the &lt;code&gt;public List&amp;lt;Operation&amp;gt; getOperations()&lt;/code&gt; method. In
+&lt;p&gt;The main producer logic resides in the &lt;code class=&quot;highlighter-rouge&quot;&gt;public List&amp;lt;Operation&amp;gt; getOperations()&lt;/code&gt; method. In
 SimpleKuduEventProducer’s implementation we simply insert the binary body of the Flume event into
-the Kudu table. Here we call Kudu’s &lt;code&gt;newInsert()&lt;/code&gt; to initiate an insert, but could have used
-&lt;code&gt;Upsert&lt;/code&gt; if updating an existing row was also an option, in fact there’s another producer
-implementation available for doing just that: &lt;code&gt;SimpleKeyedKuduEventProducer&lt;/code&gt;. Most probably you
+the Kudu table. Here we call Kudu’s &lt;code class=&quot;highlighter-rouge&quot;&gt;newInsert()&lt;/code&gt; to initiate an insert, but could have used
+&lt;code class=&quot;highlighter-rouge&quot;&gt;Upsert&lt;/code&gt; if updating an existing row was also an option, in fact there’s another producer
+implementation available for doing just that: &lt;code class=&quot;highlighter-rouge&quot;&gt;SimpleKeyedKuduEventProducer&lt;/code&gt;. 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.&lt;/p&gt;
 
@@ -282,7 +285,8 @@ custom event producer is not required to write data to Kudu. See
 &lt;a href=&quot;https://gerrit.cloudera.org/#/c/4034/&quot;&gt;here&lt;/a&gt; for a work-in-progress generic event producer for
 Avro-encoded Events.&lt;/p&gt;
 
-&lt;h1 id=&quot;conclusion&quot;&gt;Conclusion&lt;/h1&gt;
+&lt;h2 id=&quot;conclusion&quot;&gt;Conclusion&lt;/h2&gt;
+
 &lt;p&gt;Kudu is a scalable data store which lets us ingest insane amounts of data per second. Apache Flume
 helps us aggregate data from various sources, and the Kudu Flume Sink lets us easily store
 the aggregated Flume events into Kudu. Together they enable us to create a data warehouse out of
@@ -290,10 +294,12 @@ disparate sources.&lt;/p&gt;
 
 &lt;p&gt;&lt;em&gt;Ara Abrahamian is a software engineer at Argyle Data building fraud detection systems using
 sophisticated machine learning methods. Ara is the original author of the Flume Kudu Sink that
-is included in the Kudu distribution. You can follow him on Twitter at @ara_e.&lt;/em&gt;&lt;/p&gt;</content><author><name>Ara Abrahamian</name></author><summary>This post discusses the Kudu Flume Sink. First, I’ll give some background on why we considered
+is included in the Kudu distribution. You can follow him on Twitter at
+&lt;a href=&quot;https://twitter.com/ara_e&quot;&gt;@ara_e&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;</content><author><name>Ara Abrahamian</name></author><summary>This post discusses the Kudu Flume Sink. First, I’ll give some background on why we considered
 using Kudu, what Flume does for us, and how Flume fits with Kudu in our project.
 
 Why Kudu
+
 Traditionally in the Hadoop ecosystem we’ve dealt with various batch processing 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
@@ -366,6 +372,7 @@ But how would we make sure data is reliably ingested into the streaming pipeline
 Kudu-based data warehouse? This is where Apache Flume comes in.
 
 Why Flume
+
 According to their website “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
@@ -392,9 +399,9 @@ write ingested data to a Kudu table. The sink has been part of the Kudu distribu
 release and the source code can be found here.
 
 Configuring the Kudu Flume Sink
+
 Here is a sample flume configuration file:
 
-```
 agent1.sources  = source1
 agent1.channels = channel1
 agent1.sinks = sink1
@@ -413,7 +420,8 @@ agent1.sinks.sink1.tableName = stats
 agent1.sinks.sink1.channel = channel1
 agent1.sinks.sink1.batchSize = 50
 agent1.sinks.sink1.producer = org.apache.kudu.flume.sink.SimpleKuduEventProducer
-```
+
+
 
 We define a source called source1 which simply executes a vmstat command to continuously generate
 virtual memory statistics for the machine and queue events into an in-memory channel1 channel,
@@ -481,53 +489,52 @@ Here is a complete list of KuduSink parameters:
 
 Let’s take a look at the source code for the built-in producer class:
 
-```
 public class SimpleKuduEventProducer implements KuduEventProducer {
   private byte[] payload;
   private KuduTable table;
   private String payloadColumn;
 
-public SimpleKuduEventProducer(){
+  public SimpleKuduEventProducer(){
   }
 
-@Override
+  @Override
   public void configure(Context context) {
-    payloadColumn = context.getString(“payloadColumn”,”payload”);
+    payloadColumn = context.getString(&quot;payloadColumn&quot;,&quot;payload&quot;);
   }
 
-@Override
+  @Override
   public void configure(ComponentConfiguration conf) {
   }
 
-@Override
+  @Override
   public void initialize(Event event, KuduTable table) {
     this.payload = event.getBody();
     this.table = table;
   }
 
-@Override
-  public List getOperations() throws FlumeException {
+  @Override
+  public List&amp;lt;Operation&amp;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(&quot;Failed to create Kudu Insert object!&quot;, e);
-}   }
-
+      return Collections.singletonList((Operation) insert);
+    } catch (Exception e){
+      throw new FlumeException(&quot;Failed to create Kudu Insert object!&quot;, e);
+    }
+  }
 
-@Override
+  @Override
   public void close() {
   }
 }
-```
+
+
 
 SimpleKuduEventProducer implements the org.apache.kudu.flume.sink.KuduEventProducer interface,
 which itself looks like this:
 
-```
 public interface KuduEventProducer extends Configurable, ConfigurableComponent {
   /**
    * Initialize the event producer.
@@ -536,20 +543,21 @@ public interface KuduEventProducer extends Configurable, ConfigurableComponent {
    */
   void initialize(Event event, KuduTable table);
 
-/**
+  /**
    * 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
    */
-  List getOperations();
+  List&amp;lt;Operation&amp;gt; getOperations();
 
-/*
+  /*
    * Clean up any state. This will be called when the sink is being stopped.
    */
   void close();
 }
-```
+
+
 
 public void configure(Context context) is called when an instance of our producer is instantiated
 by the KuduSink. SimpleKuduEventProducer’s implementation looks for a producer parameter named
@@ -575,6 +583,7 @@ here for a work-in-progress generic event producer for
 Avro-encoded Events.
 
 Conclusion
+
 Kudu is a scalable data store which lets us ingest insane amounts of data per second. Apache Flume
 helps us aggregate data from various sources, and the Kudu Flume Sink lets us easily store
 the aggregated Flume events into Kudu. Together they enable us to create a data warehouse out of
@@ -582,7 +591,8 @@ disparate sources.
 
 Ara Abrahamian is a software engineer at Argyle Data building fraud detection systems using
 sophisticated machine learning methods. Ara is the original author of the Flume Kudu Sink that
-is included in the Kudu distribution. You can follow him on Twitter at @ara_e.</summary></entry><entry><title>New Range Partitioning Features in Kudu 0.10</title><link href="/2016/08/23/new-range-partitioning-features.html" rel="alternate" type="text/html" title="New Range Partitioning Features in Kudu 0.10" /><published>2016-08-23T00:00:00-07:00</published><updated>2016-08-23T00:00:00-07:00</updated><id>/2016/08/23/new-range-partitioning-features</id><content type="html" xml:base="/2016/08/23/new-range-partitioning-features.html">&lt;p&gt;Kudu 0.10 is shipping with a few important new features for range partitioning.
+is included in the Kudu distribution. You can follow him on Twitter at
+@ara_e.</summary></entry><entry><title>New Range Partitioning Features in Kudu 0.10</title><link href="/2016/08/23/new-range-partitioning-features.html" rel="alternate" type="text/html" title="New Range Partitioning Features in Kudu 0.10" /><published>2016-08-23T00:00:00-07:00</published><updated>2016-08-23T00:00:00-07:00</updated><id>/2016/08/23/new-range-partitioning-features</id><content type="html" xml:base="/2016/08/23/new-range-partitioning-features.html">&lt;p&gt;Kudu 0.10 is shipping with a few important new features for range partitioning.
 These features are designed to make Kudu easier to scale for certain workloads,
 like time series. This post will introduce these features, and discuss how to use
 them to effectively design tables for scalability and performance.&lt;/p&gt;
@@ -761,20 +771,20 @@ from a single-master configuration to a multi-master one. Along the way, he
 started building some common infrastructure for command-line tooling.&lt;/p&gt;
 
     &lt;p&gt;Since Kudu’s initial release, it has included separate binaries for different
-administrative or operational tools (e.g. &lt;code&gt;kudu-ts-cli&lt;/code&gt;, &lt;code&gt;kudu-ksck&lt;/code&gt;, &lt;code&gt;kudu-fs_dump&lt;/code&gt;,
-&lt;code&gt;log-dump&lt;/code&gt;, etc). Despite having similar usage, these tools don’t share much code,
+administrative or operational tools (e.g. &lt;code class=&quot;highlighter-rouge&quot;&gt;kudu-ts-cli&lt;/code&gt;, &lt;code class=&quot;highlighter-rouge&quot;&gt;kudu-ksck&lt;/code&gt;, &lt;code class=&quot;highlighter-rouge&quot;&gt;kudu-fs_dump&lt;/code&gt;,
+&lt;code class=&quot;highlighter-rouge&quot;&gt;log-dump&lt;/code&gt;, etc). Despite having similar usage, these tools don’t share much code,
 and the separate statically linked binaries make the Kudu packages take more disk
 space than strictly necessary.&lt;/p&gt;
 
-    &lt;p&gt;Adar’s work has introduced a new top-level &lt;code&gt;kudu&lt;/code&gt; binary which exposes a set of subcommands,
-much like the &lt;code&gt;git&lt;/code&gt; and &lt;code&gt;docker&lt;/code&gt; binaries with which readers may be familiar.
+    &lt;p&gt;Adar’s work has introduced a new top-level &lt;code class=&quot;highlighter-rouge&quot;&gt;kudu&lt;/code&gt; binary which exposes a set of subcommands,
+much like the &lt;code class=&quot;highlighter-rouge&quot;&gt;git&lt;/code&gt; and &lt;code class=&quot;highlighter-rouge&quot;&gt;docker&lt;/code&gt; binaries with which readers may be familiar.
 For example, a new tool he has built for dumping peer identifiers from a tablet’s
-consensus metadata is triggered using &lt;code&gt;kudu tablet cmeta print_replica_uuids&lt;/code&gt;.&lt;/p&gt;
+consensus metadata is triggered using &lt;code class=&quot;highlighter-rouge&quot;&gt;kudu tablet cmeta print_replica_uuids&lt;/code&gt;.&lt;/p&gt;
 
     &lt;p&gt;This new tool will be available in the upcoming 0.10.0 release; however, migration
 of the existing tools to the new infrastructure has not yet been completed. We
 expect that by Kudu 1.0, the old tools will be removed in favor of more subcommands
-of the &lt;code&gt;kudu&lt;/code&gt; tool.&lt;/p&gt;
+of the &lt;code class=&quot;highlighter-rouge&quot;&gt;kudu&lt;/code&gt; tool.&lt;/p&gt;
   &lt;/li&gt;
   &lt;li&gt;
     &lt;p&gt;Todd Lipcon picked up the work started by David Alves in July to provide
@@ -798,7 +808,7 @@ was &lt;a href=&quot;https://gerrit.cloudera.org/#/c/3840/&quot;&gt;committed&lt
 docs will be published as part of the 0.10.0 release.&lt;/p&gt;
   &lt;/li&gt;
   &lt;li&gt;
-    &lt;p&gt;Alexey also continued work on implementing the &lt;code&gt;AUTO_FLUSH_BACKGROUND&lt;/code&gt; write
+    &lt;p&gt;Alexey also continued work on implementing the &lt;code class=&quot;highlighter-rouge&quot;&gt;AUTO_FLUSH_BACKGROUND&lt;/code&gt; write
 mode for the C++ client. This feature makes it easier to implement high-throughput
 ingest using the C++ API by automatically handling the batching and flushing of writes
 based on a configurable buffer size.&lt;/p&gt;
@@ -913,8 +923,8 @@ new name and status.&lt;/li&gt;
 
 &lt;ul&gt;
   &lt;li&gt;
-    &lt;p&gt;Dan Burkert contributed a few patches that repackage the Java client under &lt;code&gt;org.apache.kudu&lt;/code&gt;
-in place of &lt;code&gt;org.kududb&lt;/code&gt;. This was done in a &lt;strong&gt;backward-incompatible&lt;/strong&gt; way, meaning that import
+    &lt;p&gt;Dan Burkert contributed a few patches that repackage the Java client under &lt;code class=&quot;highlighter-rouge&quot;&gt;org.apache.kudu&lt;/code&gt;
+in place of &lt;code class=&quot;highlighter-rouge&quot;&gt;org.kududb&lt;/code&gt;. This was done in a &lt;strong&gt;backward-incompatible&lt;/strong&gt; way, meaning that import
 statements will have to be modified in existing Java code to compile against a newer Kudu JAR
 version (from 0.10.0 onward). This stems from &lt;a href=&quot;http://mail-archives.apache.org/mod_mbox/kudu-dev/201605.mbox/%3CCAGpTDNcJohQBgjzXafXJQdqmBB4sL495p5V_BJRXk_nAGWbzhA@mail.gmail.com%3E&quot;&gt;a discussion&lt;/a&gt;
 initiated in May. It won’t have an impact on C++ or Python users, and it isn’t affecting wire
@@ -924,12 +934,12 @@ compatibility.&lt;/p&gt;
     &lt;p&gt;Still on the Java-side, J-D Cryans pushed &lt;a href=&quot;https://gerrit.cloudera.org/#/c/3055/&quot;&gt;a patch&lt;/a&gt;
 that completely changes how Exceptions are managed. Before this change, users had to introspect
 generic Exception objects, making it a guessing game and discouraging good error handling.
-Now, the synchronous client’s methods throw &lt;code&gt;KuduException&lt;/code&gt; which packages a &lt;code&gt;Status&lt;/code&gt; object
+Now, the synchronous client’s methods throw &lt;code class=&quot;highlighter-rouge&quot;&gt;KuduException&lt;/code&gt; which packages a &lt;code class=&quot;highlighter-rouge&quot;&gt;Status&lt;/code&gt; object
 that can be interrogated. This is very similar to how the C++ API works.&lt;/p&gt;
 
     &lt;p&gt;Existing code that uses the new Kudu JAR should still compile since this change replaces generic
-&lt;code&gt;Exception&lt;/code&gt; with a more specific &lt;code&gt;KuduException&lt;/code&gt;. Error handling done by string-matching the
-exception messages should now use the provided &lt;code&gt;Status&lt;/code&gt; object.&lt;/p&gt;
+&lt;code class=&quot;highlighter-rouge&quot;&gt;Exception&lt;/code&gt; with a more specific &lt;code class=&quot;highlighter-rouge&quot;&gt;KuduException&lt;/code&gt;. Error handling done by string-matching the
+exception messages should now use the provided &lt;code class=&quot;highlighter-rouge&quot;&gt;Status&lt;/code&gt; object.&lt;/p&gt;
   &lt;/li&gt;
   &lt;li&gt;
     &lt;p&gt;Alexey Serbin’s &lt;a href=&quot;https://gerrit.cloudera.org/#/c/3619/&quot;&gt;patch&lt;/a&gt; that adds Doxygen-based
@@ -937,11 +947,11 @@ documentation was pushed and the new API documentation for C++ developers will b
 with the next release.&lt;/p&gt;
   &lt;/li&gt;
   &lt;li&gt;
-    &lt;p&gt;Todd has made many improvements to the &lt;code&gt;ksck&lt;/code&gt; tool over the last week. Building upon Will
-Berkeley’s &lt;a href=&quot;https://gerrit.cloudera.org/#/c/3632/&quot;&gt;WIP patch for KUDU-1516&lt;/a&gt;, &lt;code&gt;ksck&lt;/code&gt; can
+    &lt;p&gt;Todd has made many improvements to the &lt;code class=&quot;highlighter-rouge&quot;&gt;ksck&lt;/code&gt; tool over the last week. Building upon Will
+Berkeley’s &lt;a href=&quot;https://gerrit.cloudera.org/#/c/3632/&quot;&gt;WIP patch for KUDU-1516&lt;/a&gt;, &lt;code class=&quot;highlighter-rouge&quot;&gt;ksck&lt;/code&gt; can
 now detect more problematic situations like if a tablet doesn’t have a majority of replicas on
 live tablet servers, or if those replicas aren’t in a good state.
-&lt;code&gt;ksck&lt;/code&gt; is also &lt;a href=&quot;https://gerrit.cloudera.org/#/c/3705/&quot;&gt;now faster&lt;/a&gt; when run against a large
+&lt;code class=&quot;highlighter-rouge&quot;&gt;ksck&lt;/code&gt; is also &lt;a href=&quot;https://gerrit.cloudera.org/#/c/3705/&quot;&gt;now faster&lt;/a&gt; when run against a large
 cluster with a lot of tablets, among other improvements.&lt;/p&gt;
   &lt;/li&gt;
   &lt;li&gt;


Mime
View raw message