You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by te...@apache.org on 2016/10/09 15:12:49 UTC

[11/52] [partial] hbase-site git commit: Published site at e06c3676f1273f033e3e185ee9c1ec52c1c7cb31.

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/c7e84622/book.html
----------------------------------------------------------------------
diff --git a/book.html b/book.html
index d244150..876f41c 100644
--- a/book.html
+++ b/book.html
@@ -4,11 +4,11 @@
 <meta charset="UTF-8">
 <!--[if IE]><meta http-equiv="X-UA-Compatible" content="IE=edge"><![endif]-->
 <meta name="viewport" content="width=device-width, initial-scale=1.0">
-<meta name="generator" content="Asciidoctor 1.5.2">
+<meta name="generator" content="Asciidoctor 1.5.3">
 <meta name="author" content="Apache HBase Team">
 <title>Apache HBase &#8482; Reference Guide</title>
 <link rel="stylesheet" href="./hbase.css">
-<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.2.0/css/font-awesome.min.css">
+<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.4.0/css/font-awesome.min.css">
 <link rel="stylesheet" href="./coderay-asciidoctor.css">
 </head>
 <body class="book toc2 toc-left">
@@ -261,17 +261,22 @@
 <li><a href="#_integration_testing_with_an_hbase_mini_cluster">154. Integration Testing with an HBase Mini-Cluster</a></li>
 </ul>
 </li>
+<li><a href="#protobuf">Protobuf in HBase</a>
+<ul class="sectlevel1">
+<li><a href="#_protobuf">155. Protobuf</a></li>
+</ul>
+</li>
 <li><a href="#zookeeper">ZooKeeper</a>
 <ul class="sectlevel1">
-<li><a href="#_using_existing_zookeeper_ensemble">155. Using existing ZooKeeper ensemble</a></li>
-<li><a href="#zk.sasl.auth">156. SASL Authentication with ZooKeeper</a></li>
+<li><a href="#_using_existing_zookeeper_ensemble">156. Using existing ZooKeeper ensemble</a></li>
+<li><a href="#zk.sasl.auth">157. SASL Authentication with ZooKeeper</a></li>
 </ul>
 </li>
 <li><a href="#community">Community</a>
 <ul class="sectlevel1">
-<li><a href="#_decisions">157. Decisions</a></li>
-<li><a href="#community.roles">158. Community Roles</a></li>
-<li><a href="#hbase.commit.msg.format">159. Commit Message format</a></li>
+<li><a href="#_decisions">158. Decisions</a></li>
+<li><a href="#community.roles">159. Community Roles</a></li>
+<li><a href="#hbase.commit.msg.format">160. Commit Message format</a></li>
 </ul>
 </li>
 <li><a href="#_appendix">Appendix</a>
@@ -281,7 +286,7 @@
 <li><a href="#hbck.in.depth">Appendix C: hbck In Depth</a></li>
 <li><a href="#appendix_acl_matrix">Appendix D: Access Control Matrix</a></li>
 <li><a href="#compression">Appendix E: Compression and Data Block Encoding In HBase</a></li>
-<li><a href="#data.block.encoding.enable">160. Enable Data Block Encoding</a></li>
+<li><a href="#data.block.encoding.enable">161. Enable Data Block Encoding</a></li>
 <li><a href="#sql">Appendix F: SQL over HBase</a></li>
 <li><a href="#ycsb">Appendix G: YCSB</a></li>
 <li><a href="#_hfile_format_2">Appendix H: HFile format</a></li>
@@ -290,8 +295,8 @@
 <li><a href="#asf">Appendix K: HBase and the Apache Software Foundation</a></li>
 <li><a href="#orca">Appendix L: Apache HBase Orca</a></li>
 <li><a href="#tracing">Appendix M: Enabling Dapper-like Tracing in HBase</a></li>
-<li><a href="#tracing.client.modifications">161. Client Modifications</a></li>
-<li><a href="#tracing.client.shell">162. Tracing from HBase Shell</a></li>
+<li><a href="#tracing.client.modifications">162. Client Modifications</a></li>
+<li><a href="#tracing.client.shell">163. Tracing from HBase Shell</a></li>
 <li><a href="#hbase.rpc">Appendix N: 0.95 RPC Specification</a></li>
 </ul>
 </li>
@@ -5243,7 +5248,7 @@ example9</code></pre>
 <div class="listingblock">
 <div class="content">
 <pre># The java implementation to use.
-export JAVA_HOME=/usr/java/jdk1.7.0/
+export JAVA_HOME=/usr/java/jdk1.8.0/
 
 # The maximum amount of heap to use. Default is left to JVM default.
 export HBASE_HEAPSIZE=4G</pre>
@@ -5816,7 +5821,7 @@ It may be possible to skip across versions&#8201;&#8212;&#8201;for example go fr
 <p>APIs available in a patch version will be available in all later patch versions. However, new APIs may be added which will not be available in earlier patch versions.</p>
 </li>
 <li>
-<p>New APIs introduced in a patch version will only be added in a source compatible way <span class="footnote">[<a id="_footnoteref_1" class="footnote" href="#_footnote_1" title="View footnote.">1</a>]</span>: i.e. code that implements public APIs will continue to compile.</p>
+<p>New APIs introduced in a patch version will only be added in a source compatible way <sup class="footnote">[<a id="_footnoteref_1" class="footnote" href="#_footnote_1" title="View footnote.">1</a>]</sup>: i.e. code that implements public APIs will continue to compile.</p>
 </li>
 <li>
 <p>Example: A user using a newly deprecated API does not need to modify application code with HBase API calls until the next major version.</p>
@@ -5880,7 +5885,7 @@ It may be possible to skip across versions&#8201;&#8212;&#8201;for example go fr
 <div class="title">Summary</div>
 <ul>
 <li>
-<p>A patch upgrade is a drop-in replacement. Any change that is not Java binary and source compatible would not be allowed.<span class="footnote">[<a id="_footnoteref_2" class="footnote" href="#_footnote_2" title="View footnote.">2</a>]</span> Downgrading versions within patch releases may not be compatible.</p>
+<p>A patch upgrade is a drop-in replacement. Any change that is not Java binary and source compatible would not be allowed.<sup class="footnote">[<a id="_footnoteref_2" class="footnote" href="#_footnote_2" title="View footnote.">2</a>]</sup> Downgrading versions within patch releases may not be compatible.</p>
 </li>
 <li>
 <p>A minor upgrade requires no application/client code modification. Ideally it would be a drop-in replacement but client code, coprocessors, filters, etc might have to be recompiled if new jars are used.</p>
@@ -5891,7 +5896,7 @@ It may be possible to skip across versions&#8201;&#8212;&#8201;for example go fr
 </ul>
 </div>
 <table class="tableblock frame-all grid-all spread">
-<caption class="title">Table 3. Compatibility Matrix <span class="footnote">[<a id="_footnoteref_3" class="footnote" href="#_footnote_3" title="View footnote.">3</a>]</span></caption>
+<caption class="title">Table 3. Compatibility Matrix <sup class="footnote">[<a id="_footnoteref_3" class="footnote" href="#_footnote_3" title="View footnote.">3</a>]</sup></caption>
 <colgroup>
 <col style="width: 25%;">
 <col style="width: 25%;">
@@ -5919,7 +5924,7 @@ It may be possible to skip across versions&#8201;&#8212;&#8201;for example go fr
 </tr>
 <tr>
 <td class="tableblock halign-left valign-top"><p class="tableblock">File Format Compatibility</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">N <span class="footnote">[<a id="_footnoteref_4" class="footnote" href="#_footnote_4" title="View footnote.">4</a>]</span></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">N <sup class="footnote">[<a id="_footnoteref_4" class="footnote" href="#_footnote_4" title="View footnote.">4</a>]</sup></p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">Y</p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">Y</p></td>
 </tr>
@@ -15757,31 +15762,51 @@ If you use HBase shell, the general command pattern is as follows:</p>
 <tbody>
 <tr>
 <td class="tableblock halign-left valign-top"><p class="tableblock"><code>hbase.hstore.compaction.date.tiered.max.storefile.age.millis</code></p></td>
-<td class="tableblock halign-left valign-top"><div><div class="paragraph">
+<td class="tableblock halign-left valign-top"><div><div id="toc" class="toc">
+<div id="toctitle">Contents</div>
+
+</div>
+<div class="paragraph">
 <p>Files with max-timestamp smaller than this will no longer be compacted.Default at Long.MAX_VALUE.</p>
 </div></div></td>
 </tr>
 <tr>
 <td class="tableblock halign-left valign-top"><p class="tableblock"><code>hbase.hstore.compaction.date.tiered.base.window.millis</code></p></td>
-<td class="tableblock halign-left valign-top"><div><div class="paragraph">
+<td class="tableblock halign-left valign-top"><div><div id="toc" class="toc">
+<div id="toctitle">Contents</div>
+
+</div>
+<div class="paragraph">
 <p>Base window size in milliseconds. Default at 6 hours.</p>
 </div></div></td>
 </tr>
 <tr>
 <td class="tableblock halign-left valign-top"><p class="tableblock"><code>hbase.hstore.compaction.date.tiered.windows.per.tier</code></p></td>
-<td class="tableblock halign-left valign-top"><div><div class="paragraph">
+<td class="tableblock halign-left valign-top"><div><div id="toc" class="toc">
+<div id="toctitle">Contents</div>
+
+</div>
+<div class="paragraph">
 <p>Number of windows per tier. Default at 4.</p>
 </div></div></td>
 </tr>
 <tr>
 <td class="tableblock halign-left valign-top"><p class="tableblock"><code>hbase.hstore.compaction.date.tiered.incoming.window.min</code></p></td>
-<td class="tableblock halign-left valign-top"><div><div class="paragraph">
+<td class="tableblock halign-left valign-top"><div><div id="toc" class="toc">
+<div id="toctitle">Contents</div>
+
+</div>
+<div class="paragraph">
 <p>Minimal number of files to compact in the incoming window. Set it to expected number of files in the window to avoid wasteful compaction. Default at 6.</p>
 </div></div></td>
 </tr>
 <tr>
 <td class="tableblock halign-left valign-top"><p class="tableblock"><code>hbase.hstore.compaction.date.tiered.window.policy.class</code></p></td>
-<td class="tableblock halign-left valign-top"><div><div class="paragraph">
+<td class="tableblock halign-left valign-top"><div><div id="toc" class="toc">
+<div id="toctitle">Contents</div>
+
+</div>
+<div class="paragraph">
 <p>The policy to select store files within the same time window. It doesn\u2019t apply to the incoming window. Default at exploring compaction. This is to avoid wasteful compaction.</p>
 </div></div></td>
 </tr>
@@ -15937,7 +15962,11 @@ For example, if your regions are 30 GB, 12 x 2.5 GB stripes might be a good star
 <tbody>
 <tr>
 <td class="tableblock halign-left valign-top"><p class="tableblock"><code>hbase.store.stripe.initialStripeCount</code></p></td>
-<td class="tableblock halign-left valign-top"><div><div class="paragraph">
+<td class="tableblock halign-left valign-top"><div><div id="toc" class="toc">
+<div id="toctitle">Contents</div>
+
+</div>
+<div class="paragraph">
 <p>The number of stripes to create when stripe compaction is enabled. You can use it as follows:</p>
 </div>
 <div class="ulist">
@@ -15962,7 +15991,11 @@ one hash prefix per region, pre-splitting may make sense.</p>
 </tr>
 <tr>
 <td class="tableblock halign-left valign-top"><p class="tableblock"><code>hbase.store.stripe.sizeToSplit</code></p></td>
-<td class="tableblock halign-left valign-top"><div><div class="paragraph">
+<td class="tableblock halign-left valign-top"><div><div id="toc" class="toc">
+<div id="toctitle">Contents</div>
+
+</div>
+<div class="paragraph">
 <p>The maximum size a stripe grows before splitting. Use this in
 conjunction with <code>hbase.store.stripe.splitPartCount</code> to
 control the target stripe size (<code>sizeToSplit = splitPartsCount * target
@@ -15971,7 +16004,11 @@ stripe size</code>), according to the above sizing considerations.</p>
 </tr>
 <tr>
 <td class="tableblock halign-left valign-top"><p class="tableblock"><code>hbase.store.stripe.splitPartCount</code></p></td>
-<td class="tableblock halign-left valign-top"><div><div class="paragraph">
+<td class="tableblock halign-left valign-top"><div><div id="toc" class="toc">
+<div id="toctitle">Contents</div>
+
+</div>
+<div class="paragraph">
 <p>The number of new stripes to create when splitting a stripe. The default is 2, which is appropriate for most cases. For non-uniform row keys, you can experiment with increasing the number to 3 or 4, to isolate the arriving updates into narrower slice of the region without additional splits being required.</p>
 </div></div></td>
 </tr>
@@ -19507,14 +19544,14 @@ which implements the <code>WalObserver</code> interface and will not break if ne
 </div>
 </div>
 <div class="sect2">
-<h3 id="_endpoint_coprocessor"><a class="anchor" href="#_endpoint_coprocessor"></a>87.2. Endpoint Coprocessor</h3>
+<h3 id="cpeps"><a class="anchor" href="#cpeps"></a>87.2. Endpoint Coprocessor</h3>
 <div class="paragraph">
 <p>Endpoint processors allow you to perform computation at the location of the data.
 See <a href="#cp_analogies">Coprocessor Analogy</a>. An example is the need to calculate a running
 average or summation for an entire table which spans hundreds of regions.</p>
 </div>
 <div class="paragraph">
-<p>In contract to observer coprocessors, where your code is run transparently, endpoint
+<p>In contrast to observer coprocessors, where your code is run transparently, endpoint
 coprocessors must be explicitly invoked using the
 <a href="https://hbase.apache.org/devapidocs/org/apache/hadoop/hbase/client/Table.html#coprocessorService%28java.lang.Class,%20byte%5B%5D,%20byte%5B%5D,%20org.apache.hadoop.hbase.client.coprocessor.Batch.Call%29">CoprocessorService()</a>
 method available in
@@ -19534,6 +19571,18 @@ HBase cluster from 0.94 or earlier to 0.96 or later, you need to reimplement you
 coprocessor.</p>
 </div>
 <div class="paragraph">
+<p>Coprocessor Endpoints should make no use of HBase internals and
+only avail of public APIs; ideally a CPEP should depend on Interfaces
+and data structures only. This is not always possible but beware
+that doing so makes the Endpoint brittle, liable to breakage as HBase
+internals evolve. HBase internal APIs annotated as private or evolving
+do not have to respect semantic versioning rules or general java rules on
+deprecation before removal. While generated protobuf files are
+absent the hbase audience annotations&#8201;&#8212;&#8201;they are created by the
+protobuf protoc tool which knows nothing of how HBase works&#8201;&#8212;&#8201;they should be consided <code>@InterfaceAudience.Private</code> so are liable to
+change.</p>
+</div>
+<div class="paragraph">
 <p><a href="#cp_example">Examples</a> provides working examples of endpoint coprocessors.</p>
 </div>
 </div>
@@ -19605,7 +19654,7 @@ Ties are broken arbitrarily.</p>
 </div>
 </li>
 <li>
-<p>Put your code HBase&#8217;s classpath. One easy way to do this is to drop the jar
+<p>Put your code on HBase&#8217;s classpath. One easy way to do this is to drop the jar
 (containing you code and all the dependencies) into the <code>lib/</code> directory in the
 HBase installation.</p>
 </li>
@@ -19710,10 +19759,9 @@ it in HDFS.<br>
 <a href="https://issues.apache.org/jira/browse/HBASE-14548">HBASE-14548</a> allows a directory containing the jars
 or some wildcards to be specified, such as: hdfs://&lt;namenode&gt;:&lt;port&gt;/user/&lt;hadoop-user&gt;/ or
 hdfs://&lt;namenode&gt;:&lt;port&gt;/user/&lt;hadoop-user&gt;/*.jar. Please note that if a directory is specified,
-all jar files(.jar) directly in the directory are added,
-but it does not search files in the subtree rooted in the directory.
-And do not contain any wildcard if you would like to specify a directory.
-This enhancement applies to the ways of using the JAVA API as well.</p>
+all jar files(.jar) in the directory are added. It does not search for files in sub-directories.
+Do not use a wildcard if you would like to specify a directory. This enhancement applies to the
+usage via the JAVA API as well.</p>
 </li>
 <li>
 <p>Class name: The full class name of the Coprocessor.</p>
@@ -24877,7 +24925,7 @@ In this case, or if you are in a OLAP environment and require having locality, t
 <div class="sectionbody">
 <div class="paragraph">
 <p>HBase emits metrics which adhere to the <a href="http://hadoop.apache.org/core/docs/current/api/org/apache/hadoop/metrics/package-summary.html">Hadoop metrics</a> API.
-Starting with HBase 0.95<span class="footnote">[<a id="_footnoteref_5" class="footnote" href="#_footnote_5" title="View footnote.">5</a>]</span>, HBase is configured to emit a default set of metrics with a default sampling period of every 10 seconds.
+Starting with HBase 0.95<sup class="footnote">[<a id="_footnoteref_5" class="footnote" href="#_footnote_5" title="View footnote.">5</a>]</sup>, HBase is configured to emit a default set of metrics with a default sampling period of every 10 seconds.
 You can use HBase metrics in conjunction with Ganglia.
 You can also filter which metrics are emitted and extend the metrics framework to capture custom metrics appropriate for your environment.</p>
 </div>
@@ -25851,7 +25899,7 @@ The new layout will be:</p>
 <div class="sect2">
 <h3 id="_replication_metrics"><a class="anchor" href="#_replication_metrics"></a>134.5. Replication Metrics</h3>
 <div class="paragraph">
-<p>The following metrics are exposed at the global region server level and (since HBase 0.95) at the peer level:</p>
+<p>The following metrics are exposed at the global region server level and at the peer level:</p>
 </div>
 <div class="dlist">
 <dl>
@@ -25871,6 +25919,34 @@ The new layout will be:</p>
 <dd>
 <p>age of last batch that was shipped by the replication source</p>
 </dd>
+<dt class="hdlist1"><code>source.completedLogs</code></dt>
+<dd>
+<p>The number of write-ahead-log files that have completed their acknowledged sending to the peer associated with this source. Increments to this metric are a part of normal operation of HBase replication.</p>
+</dd>
+<dt class="hdlist1"><code>source.completedRecoverQueues</code></dt>
+<dd>
+<p>The number of recovery queues this source has completed sending to the associated peer. Increments to this metric are a part of normal recovery of HBase replication in the face of failed Region Servers.</p>
+</dd>
+<dt class="hdlist1"><code>source.uncleanlyClosedLogs</code></dt>
+<dd>
+<p>The number of write-ahead-log files the replication system considered completed after reaching the end of readable entries in the face of an uncleanly closed file.</p>
+</dd>
+<dt class="hdlist1"><code>source.ignoredUncleanlyClosedLogContentsInBytes</code></dt>
+<dd>
+<p>When a write-ahead-log file is not closed cleanly, there will likely be some entry that has been partially serialized. This metric contains the number of bytes of such entries the HBase replication system believes were remaining at the end of files skipped in the face of an uncleanly closed file. Those bytes should either be in different file or represent a client write that was not acknowledged.</p>
+</dd>
+<dt class="hdlist1"><code>source.restartedLogReading</code></dt>
+<dd>
+<p>The number of times the HBase replication system detected that it failed to correctly parse a cleanly closed write-ahead-log file. In this circumstance, the system replays the entire log from the beginning, ensuring that no edits fail to be acknowledged by the associated peer. Increments to this metric indicate that the HBase replication system is having difficulty correctly handling failures in the underlying distributed storage system. No dataloss should occur, but you should check Region Server log files for details of the failures.</p>
+</dd>
+<dt class="hdlist1"><code>source.repeatedLogFileBytes</code></dt>
+<dd>
+<p>When the HBase replication system determines that it needs to replay a given write-ahead-log file, this metric is incremented by the number of bytes the replication system believes had already been acknowledged by the associated peer prior to starting over.</p>
+</dd>
+<dt class="hdlist1"><code>source.closedLogsWithUnknownFileLength</code></dt>
+<dd>
+<p>Incremented when the HBase replication system believes it is at the end of a write-ahead-log file but it can not determine the length of that file in the underlying distributed storage system. Could indicate dataloss since the replication system is unable to determine if the end of readable entries lines up with the expected end of the file. You should check Region Server log files for details of the failures.</p>
+</dd>
 </dl>
 </div>
 </div>
@@ -29895,6 +29971,152 @@ Starting the mini-cluster takes about 20-30 seconds, but that should be appropri
 </div>
 </div>
 </div>
+<h1 id="protobuf" class="sect0"><a class="anchor" href="#protobuf"></a>Protobuf in HBase</h1>
+<div class="openblock partintro">
+<div class="content">
+HBase uses Google&#8217;s <a href="http://protobuf.protobufs">protobufs</a> wherever
+it persists metadata&#8201;&#8212;&#8201;in the tail of hfiles or Cells written by
+HBase into the system hbase;meta table or when HBase writes znodes
+to zookeeper, etc.&#8201;&#8212;&#8201;and when it passes objects over the wire making
+<a href="#hbase.rpc">RPCs</a>. HBase uses protobufs to describe the RPC
+Interfaces (Services) we expose to clients, for example the <code>Admin</code> and <code>Client</code>
+Interfaces that the RegionServer fields,
+or specifying the arbitrary extensions added by developers via our
+<a href="#cp">Coprocessor Endpoint</a> mechanism.
+In this chapter we go into detail for  developers who are looking to
+understand better how it all works. This chapter is of particular
+use to those who would amend or extend HBase functionality.
+</div>
+</div>
+<div class="sect1">
+<h2 id="_protobuf"><a class="anchor" href="#_protobuf"></a>155. Protobuf</h2>
+<div class="sectionbody">
+<div class="paragraph">
+<p>With protobuf, you describe serializations and services in a <code>.protos</code> file.
+You then feed these descriptors to a protobuf tool, the <code>protoc</code> binary,
+to generate classes that can marshall and unmarshall the described serializations
+and field the specified Services.</p>
+</div>
+<div class="paragraph">
+<p>See the <code>README.txt</code> in the HBase sub-modules for detail on how
+to run the class generation on a per-module basis;
+e.g. see <code>hbase-protocol/README.txt</code> for how to generated protobuf classes
+in the hbase-protocol module.</p>
+</div>
+<div class="paragraph">
+<p>In HBase, <code>.proto</code> files are either in the <code>hbase-protocol</code> module, a module
+dedicated to hosting the common proto files and the protoc generated classes
+that HBase uses internally serializing metadata or, for extensions to hbase
+such as REST or Coprocessor Endpoints that need their own descriptors, their
+protos are located inside the function&#8217;s hosting module: e.g. <code>hbase-rest</code>
+is home to the REST proto files and the <code>hbase-rsgroup</code> table grouping
+Coprocessor Endpoint has all protos that have to do with table grouping.</p>
+</div>
+<div class="paragraph">
+<p>Protos are hosted by the module that makes use of them. While
+this makes it so generation of protobuf classes is distributed, done
+per module, we do it this way so modules encapsulate all to do with
+the functionality they bring to hbase.</p>
+</div>
+<div class="paragraph">
+<p>Extensions whether REST or Coprocessor Endpoints will make use
+of core HBase protos found back in the hbase-protocol module. They&#8217;ll
+use these core protos when they want to serialize a Cell or a Put or
+refer to a particular node via ServerName, etc., as part of providing the
+CPEP Service. Going forward, after the release of hbase-2.0.0, this
+practice needs to whither. We&#8217;ll make plain why in the later
+<a href="#shaded.protobuf">hbase-2.0.0</a> section.</p>
+</div>
+<div class="sect2">
+<h3 id="shaded.protobuf"><a class="anchor" href="#shaded.protobuf"></a>155.1. hbase-2.0.0 and the shading of protobufs (HBASE-15638)</h3>
+<div class="paragraph">
+<p>As of hbase-2.0.0, our protobuf usage gets a little more involved. HBase
+core protobuf references are offset so as to refer to a private,
+bundled protobuf. Core stops referring to protobuf
+classes at com.google.protobuf.* and instead references protobuf at
+the HBase-specific offset
+org.apache.hadoop.hbase.shaded.com.google.protobuf.*.  We do this indirection
+so hbase core can evolve its protobuf version independent of whatever our
+dependencies rely on. For instance, HDFS serializes using protobuf.
+HDFS is on our CLASSPATH. Without the above described indirection, our
+protobuf versions would have to align. HBase would be stuck
+on the HDFS protobuf version until HDFS decided upgrade. HBase
+and HDFS verions would be tied.</p>
+</div>
+<div class="paragraph">
+<p>We had to move on from protobuf-2.5.0 because we need facilities
+added in protobuf-3.1.0; in particular being able to save on
+copies and avoiding bringing protobufs onheap for
+serialization/deserialization.</p>
+</div>
+<div class="paragraph">
+<p>In hbase-2.0.0, we introduced a new module, <code>hbase-protocol-shaded</code>
+inside which we contained all to do with protobuf and its subsequent
+relocation/shading. This module is in essence a copy of much of the old
+<code>hbase-protocol</code> but with an extra shading/relocation step (see the <code>README.txt</code>
+and the <code>poms.xml</code> in this module for more on how to trigger this
+effect and how it all works). Core was moved to depend on this new
+module.</p>
+</div>
+<div class="paragraph">
+<p>That said, a complication arises around Coprocessor Endpoints (CPEPs).
+CPEPs depend on public HBase APIs that reference protobuf classes at
+<code>com.google.protobuf.*</code> explicitly. For example, in our Table Interface
+we have the below as the means by which you obtain a CPEP Service
+to make invocations against:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="CodeRay highlight"><code data-lang="java">...
+  &lt;T <span class="directive">extends</span> com.google.protobuf.Service,R&gt; <span class="predefined-type">Map</span>&lt;<span class="type">byte</span><span class="type">[]</span>,R&gt; coprocessorService(
+   <span class="predefined-type">Class</span>&lt;T&gt; service, <span class="type">byte</span><span class="type">[]</span> startKey, <span class="type">byte</span><span class="type">[]</span> endKey,
+     org.apache.hadoop.hbase.client.coprocessor.Batch.Call&lt;T,R&gt; callable)
+  <span class="directive">throws</span> com.google.protobuf.ServiceException, <span class="predefined-type">Throwable</span></code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p>Existing CPEPs will have made reference to core HBase protobufs
+specifying ServerNames or carrying Mutations.
+So as to continue being able to service CPEPs and their references
+to <code>com.google.protobuf.<strong></code> across the upgrade to hbase-2.0.0 and beyond,
+HBase needs to be able to deal with both
+<code>com.google.protobuf.</strong></code> references and its internal offset
+<code>org.apache.hadoop.hbase.shaded.com.google.protobuf.*</code> protobufs.</p>
+</div>
+<div class="paragraph">
+<p>The <code>hbase-protocol-shaded</code> module hosts all
+protobufs used by HBase core as well as the internal shaded version of
+protobufs that hbase depends on. hbase-client and hbase-server, etc.,
+depend on this module.</p>
+</div>
+<div class="paragraph">
+<p>But for the vestigial CPEP references to the (non-shaded) content of
+<code>hbase-protocol</code>, we keep around most of this  module going forward
+just so it is available to CPEPs.  Retaining the most of <code>hbase-protocol</code>
+makes for overlapping, 'duplicated' proto instances where some exist as
+non-shaded/non-relocated here in their old module
+location but also in the new location, shaded under
+<code>hbase-protocol-shaded</code>. In other words, there is an instance
+of the generated protobuf class
+<code>org.apache.hadoop.hbase.protobuf.generated.ServerName</code>
+in hbase-protocol and another generated instance that is the same in all
+regards except its protobuf references are to the internal shaded
+version at <code>org.apache.hadoop.hbase.shaded.protobuf.generated.ServerName</code>
+(note the 'shaded' addition in the middle of the package name).</p>
+</div>
+<div class="paragraph">
+<p>If you extend a proto in <code>hbase-protocol-shaded</code> for  internal use,
+consider extending it also in
+<code>hbase-protocol</code> (and regenerating).</p>
+</div>
+<div class="paragraph">
+<p>Going forward, we will provide a new module of common types for use
+by CPEPs that will have the same guarantees against change as does our
+public API. TODO.</p>
+</div>
+</div>
+</div>
+</div>
 <h1 id="zookeeper" class="sect0"><a class="anchor" href="#zookeeper"></a>ZooKeeper</h1>
 <div class="openblock partintro">
 <div class="content">
@@ -30016,7 +30238,7 @@ zookeeper could start dropping sessions if it has to run through a directory of
 </div>
 </div>
 <div class="sect1">
-<h2 id="_using_existing_zookeeper_ensemble"><a class="anchor" href="#_using_existing_zookeeper_ensemble"></a>155. Using existing ZooKeeper ensemble</h2>
+<h2 id="_using_existing_zookeeper_ensemble"><a class="anchor" href="#_using_existing_zookeeper_ensemble"></a>156. Using existing ZooKeeper ensemble</h2>
 <div class="sectionbody">
 <div class="paragraph">
 <p>To point HBase at an existing ZooKeeper cluster, one that is not managed by HBase, set <code>HBASE_MANAGES_ZK</code> in <em>conf/hbase-env.sh</em> to false</p>
@@ -30053,7 +30275,7 @@ Additionally, see the <a href="http://wiki.apache.org/hadoop/ZooKeeper/FAQ#A7">Z
 </div>
 </div>
 <div class="sect1">
-<h2 id="zk.sasl.auth"><a class="anchor" href="#zk.sasl.auth"></a>156. SASL Authentication with ZooKeeper</h2>
+<h2 id="zk.sasl.auth"><a class="anchor" href="#zk.sasl.auth"></a>157. SASL Authentication with ZooKeeper</h2>
 <div class="sectionbody">
 <div class="paragraph">
 <p>Newer releases of Apache HBase (&gt;= 0.92) will support connecting to a ZooKeeper Quorum that supports SASL authentication (which is available in ZooKeeper versions 3.4.0 or later).</p>
@@ -30063,7 +30285,7 @@ Additionally, see the <a href="http://wiki.apache.org/hadoop/ZooKeeper/FAQ#A7">Z
 ZooKeeper/HBase mutual authentication (<a href="https://issues.apache.org/jira/browse/HBASE-2418">HBASE-2418</a>) is required as part of a complete secure HBase configuration (<a href="https://issues.apache.org/jira/browse/HBASE-3025">HBASE-3025</a>). For simplicity of explication, this section ignores additional configuration required (Secure HDFS and Coprocessor configuration). It&#8217;s recommended to begin with an HBase-managed ZooKeeper configuration (as opposed to a standalone ZooKeeper quorum) for ease of learning.</p>
 </div>
 <div class="sect2">
-<h3 id="_operating_system_prerequisites"><a class="anchor" href="#_operating_system_prerequisites"></a>156.1. Operating System Prerequisites</h3>
+<h3 id="_operating_system_prerequisites"><a class="anchor" href="#_operating_system_prerequisites"></a>157.1. Operating System Prerequisites</h3>
 <div class="paragraph">
 <p>You need to have a working Kerberos KDC setup.
 For each <code>$HOST</code> that will run a ZooKeeper server, you should have a principle <code>zookeeper/$HOST</code>.
@@ -30099,7 +30321,7 @@ The ZooKeeper client and server libraries manage their own ticket refreshment by
 </div>
 </div>
 <div class="sect2">
-<h3 id="_hbase_managed_zookeeper_configuration"><a class="anchor" href="#_hbase_managed_zookeeper_configuration"></a>156.2. HBase-managed ZooKeeper Configuration</h3>
+<h3 id="_hbase_managed_zookeeper_configuration"><a class="anchor" href="#_hbase_managed_zookeeper_configuration"></a>157.2. HBase-managed ZooKeeper Configuration</h3>
 <div class="paragraph">
 <p>On each node that will run a zookeeper, a master, or a regionserver, create a <a href="http://docs.oracle.com/javase/1.4.2/docs/guide/security/jgss/tutorials/LoginConfigFile.html">JAAS</a>        configuration file in the conf directory of the node&#8217;s <em>HBASE_HOME</em>        directory that looks like the following:</p>
 </div>
@@ -30191,7 +30413,7 @@ bin/hbase regionserver start</pre>
 </div>
 </div>
 <div class="sect2">
-<h3 id="_external_zookeeper_configuration"><a class="anchor" href="#_external_zookeeper_configuration"></a>156.3. External ZooKeeper Configuration</h3>
+<h3 id="_external_zookeeper_configuration"><a class="anchor" href="#_external_zookeeper_configuration"></a>157.3. External ZooKeeper Configuration</h3>
 <div class="paragraph">
 <p>Add a JAAS configuration file that looks like:</p>
 </div>
@@ -30292,7 +30514,7 @@ bin/hbase regionserver start</pre>
 </div>
 </div>
 <div class="sect2">
-<h3 id="_zookeeper_server_authentication_log_output"><a class="anchor" href="#_zookeeper_server_authentication_log_output"></a>156.4. ZooKeeper Server Authentication Log Output</h3>
+<h3 id="_zookeeper_server_authentication_log_output"><a class="anchor" href="#_zookeeper_server_authentication_log_output"></a>157.4. ZooKeeper Server Authentication Log Output</h3>
 <div class="paragraph">
 <p>If the configuration above is successful, you should see something similar to the following in your ZooKeeper server logs:</p>
 </div>
@@ -30314,7 +30536,7 @@ bin/hbase regionserver start</pre>
 </div>
 </div>
 <div class="sect2">
-<h3 id="_zookeeper_client_authentication_log_output"><a class="anchor" href="#_zookeeper_client_authentication_log_output"></a>156.5. ZooKeeper Client Authentication Log Output</h3>
+<h3 id="_zookeeper_client_authentication_log_output"><a class="anchor" href="#_zookeeper_client_authentication_log_output"></a>157.5. ZooKeeper Client Authentication Log Output</h3>
 <div class="paragraph">
 <p>On the ZooKeeper client side (HBase master or regionserver), you should see something similar to the following:</p>
 </div>
@@ -30335,7 +30557,7 @@ bin/hbase regionserver start</pre>
 </div>
 </div>
 <div class="sect2">
-<h3 id="_configuration_from_scratch"><a class="anchor" href="#_configuration_from_scratch"></a>156.6. Configuration from Scratch</h3>
+<h3 id="_configuration_from_scratch"><a class="anchor" href="#_configuration_from_scratch"></a>157.6. Configuration from Scratch</h3>
 <div class="paragraph">
 <p>This has been tested on the current standard Amazon Linux AMI.
 First setup KDC and principals as described above.
@@ -30361,9 +30583,9 @@ bin/hbase regionserver &amp;</pre>
 </div>
 </div>
 <div class="sect2">
-<h3 id="_future_improvements"><a class="anchor" href="#_future_improvements"></a>156.7. Future improvements</h3>
+<h3 id="_future_improvements"><a class="anchor" href="#_future_improvements"></a>157.7. Future improvements</h3>
 <div class="sect3">
-<h4 id="_fix_target_cached_classpath_txt"><a class="anchor" href="#_fix_target_cached_classpath_txt"></a>156.7.1. Fix target/cached_classpath.txt</h4>
+<h4 id="_fix_target_cached_classpath_txt"><a class="anchor" href="#_fix_target_cached_classpath_txt"></a>157.7.1. Fix target/cached_classpath.txt</h4>
 <div class="paragraph">
 <p>You must override the standard hadoop-core jar file from the <code>target/cached_classpath.txt</code> file with the version containing the HADOOP-7070 fix.
 You can use the following script to do this:</p>
@@ -30376,13 +30598,13 @@ mv target/tmp.txt target/cached_classpath.txt</pre>
 </div>
 </div>
 <div class="sect3">
-<h4 id="_set_jaas_configuration_programmatically"><a class="anchor" href="#_set_jaas_configuration_programmatically"></a>156.7.2. Set JAAS configuration programmatically</h4>
+<h4 id="_set_jaas_configuration_programmatically"><a class="anchor" href="#_set_jaas_configuration_programmatically"></a>157.7.2. Set JAAS configuration programmatically</h4>
 <div class="paragraph">
 <p>This would avoid the need for a separate Hadoop jar that fixes <a href="https://issues.apache.org/jira/browse/HADOOP-7070">HADOOP-7070</a>.</p>
 </div>
 </div>
 <div class="sect3">
-<h4 id="_elimination_of_code_kerberos_removehostfromprincipal_code_and_kerberos_removerealmfromprincipal"><a class="anchor" href="#_elimination_of_code_kerberos_removehostfromprincipal_code_and_kerberos_removerealmfromprincipal"></a>156.7.3. Elimination of <code>kerberos.removeHostFromPrincipal</code> and`kerberos.removeRealmFromPrincipal`</h4>
+<h4 id="_elimination_of_code_kerberos_removehostfromprincipal_code_and_kerberos_removerealmfromprincipal"><a class="anchor" href="#_elimination_of_code_kerberos_removehostfromprincipal_code_and_kerberos_removerealmfromprincipal"></a>157.7.3. Elimination of <code>kerberos.removeHostFromPrincipal</code> and`kerberos.removeRealmFromPrincipal`</h4>
 
 </div>
 </div>
@@ -30390,7 +30612,7 @@ mv target/tmp.txt target/cached_classpath.txt</pre>
 </div>
 <h1 id="community" class="sect0"><a class="anchor" href="#community"></a>Community</h1>
 <div class="sect1">
-<h2 id="_decisions"><a class="anchor" href="#_decisions"></a>157. Decisions</h2>
+<h2 id="_decisions"><a class="anchor" href="#_decisions"></a>158. Decisions</h2>
 <div class="sectionbody">
 <div class="paragraph">
 <div class="title">Feature Branches</div>
@@ -30462,7 +30684,7 @@ We also are currently in violation of this basic tenet&#8201;&#8212;&#8201;repli
 </div>
 </div>
 <div class="sect1">
-<h2 id="community.roles"><a class="anchor" href="#community.roles"></a>158. Community Roles</h2>
+<h2 id="community.roles"><a class="anchor" href="#community.roles"></a>159. Community Roles</h2>
 <div class="sectionbody">
 <div id="owner" class="paragraph">
 <div class="title">Component Owner/Lieutenant</div>
@@ -30489,7 +30711,7 @@ Owners do not need to be committers.</p>
 </div>
 </div>
 <div class="sect1">
-<h2 id="hbase.commit.msg.format"><a class="anchor" href="#hbase.commit.msg.format"></a>159. Commit Message format</h2>
+<h2 id="hbase.commit.msg.format"><a class="anchor" href="#hbase.commit.msg.format"></a>160. Commit Message format</h2>
 <div class="sectionbody">
 <div class="paragraph">
 <p>We <a href="http://search-hadoop.com/m/Gwxwl10cFHa1">agreed</a> to the following Git commit message format:</p>
@@ -30736,47 +30958,75 @@ is available at <a href="http://asciidoctor.org/docs/user-manual/" class="bare">
 <tr>
 <td class="tableblock halign-left valign-top"><p class="tableblock">A paragraph</p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">a paragraph</p></td>
-<td class="tableblock halign-left valign-top"><div><div class="paragraph">
+<td class="tableblock halign-left valign-top"><div><div id="toc" class="toc">
+<div id="toctitle">Contents</div>
+
+</div>
+<div class="paragraph">
 <p>Just type some text with a blank line at the top and bottom.</p>
 </div></div></td>
 </tr>
 <tr>
 <td class="tableblock halign-left valign-top"><p class="tableblock">Add line breaks within a paragraph without adding blank lines</p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">Manual line breaks</p></td>
-<td class="tableblock halign-left valign-top"><div><div class="paragraph">
+<td class="tableblock halign-left valign-top"><div><div id="toc" class="toc">
+<div id="toctitle">Contents</div>
+
+</div>
+<div class="paragraph">
 <p>This will break + at the plus sign. Or prefix the whole paragraph with a line containing '[%hardbreaks]'</p>
 </div></div></td>
 </tr>
 <tr>
 <td class="tableblock halign-left valign-top"><p class="tableblock">Give a title to anything</p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">Colored italic bold differently-sized text</p></td>
-<td class="tableblock halign-left valign-top"><div></div></td>
+<td class="tableblock halign-left valign-top"><div><div id="toc" class="toc">
+<div id="toctitle">Contents</div>
+
+</div>
+</div></td>
 </tr>
 <tr>
 <td class="tableblock halign-left valign-top"><p class="tableblock">In-Line Code or commands</p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">monospace</p></td>
-<td class="tableblock halign-left valign-top"><div><div class="paragraph">
+<td class="tableblock halign-left valign-top"><div><div id="toc" class="toc">
+<div id="toctitle">Contents</div>
+
+</div>
+<div class="paragraph">
 <p>`text`</p>
 </div></div></td>
 </tr>
 <tr>
 <td class="tableblock halign-left valign-top"><p class="tableblock">In-line literal content (things to be typed exactly as shown)</p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">bold mono</p></td>
-<td class="tableblock halign-left valign-top"><div><div class="paragraph">
+<td class="tableblock halign-left valign-top"><div><div id="toc" class="toc">
+<div id="toctitle">Contents</div>
+
+</div>
+<div class="paragraph">
 <p>*`typethis`*</p>
 </div></div></td>
 </tr>
 <tr>
 <td class="tableblock halign-left valign-top"><p class="tableblock">In-line replaceable content (things to substitute with your own values)</p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">bold italic mono</p></td>
-<td class="tableblock halign-left valign-top"><div><div class="paragraph">
+<td class="tableblock halign-left valign-top"><div><div id="toc" class="toc">
+<div id="toctitle">Contents</div>
+
+</div>
+<div class="paragraph">
 <p>*_typesomething_*</p>
 </div></div></td>
 </tr>
 <tr>
 <td class="tableblock halign-left valign-top"><p class="tableblock">Code blocks with highlighting</p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">monospace, highlighted, preserve space</p></td>
-<td class="tableblock halign-left valign-top"><div><div class="literalblock">
+<td class="tableblock halign-left valign-top"><div><div id="toc" class="toc">
+<div id="toctitle">Contents</div>
+
+</div>
+<div class="literalblock">
 <div class="content">
 <pre>[source,java]
 ----
@@ -30789,7 +31039,11 @@ is available at <a href="http://asciidoctor.org/docs/user-manual/" class="bare">
 <tr>
 <td class="tableblock halign-left valign-top"><p class="tableblock">Code block included from a separate file</p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">included just as though it were part of the main file</p></td>
-<td class="tableblock halign-left valign-top"><div><div class="literalblock">
+<td class="tableblock halign-left valign-top"><div><div id="toc" class="toc">
+<div id="toctitle">Contents</div>
+
+</div>
+<div class="literalblock">
 <div class="content">
 <pre>[source,ruby]
 ----
@@ -30801,21 +31055,33 @@ include\::path/to/app.rb[]
 <tr>
 <td class="tableblock halign-left valign-top"><p class="tableblock">Include only part of a separate file</p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">Similar to Javadoc</p></td>
-<td class="tableblock halign-left valign-top"><div><div class="paragraph">
+<td class="tableblock halign-left valign-top"><div><div id="toc" class="toc">
+<div id="toctitle">Contents</div>
+
+</div>
+<div class="paragraph">
 <p>See <a href="http://asciidoctor.org/docs/user-manual/#by-tagged-regions" class="bare">http://asciidoctor.org/docs/user-manual/#by-tagged-regions</a></p>
 </div></div></td>
 </tr>
 <tr>
 <td class="tableblock halign-left valign-top"><p class="tableblock">Filenames, directory names, new terms</p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">italic</p></td>
-<td class="tableblock halign-left valign-top"><div><div class="paragraph">
+<td class="tableblock halign-left valign-top"><div><div id="toc" class="toc">
+<div id="toctitle">Contents</div>
+
+</div>
+<div class="paragraph">
 <p>_hbase-default.xml_</p>
 </div></div></td>
 </tr>
 <tr>
 <td class="tableblock halign-left valign-top"><p class="tableblock">External naked URLs</p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">A link with the URL as link text</p></td>
-<td class="tableblock halign-left valign-top"><div><div class="listingblock">
+<td class="tableblock halign-left valign-top"><div><div id="toc" class="toc">
+<div id="toctitle">Contents</div>
+
+</div>
+<div class="listingblock">
 <div class="content">
 <pre>link:http://www.google.com</pre>
 </div>
@@ -30824,7 +31090,11 @@ include\::path/to/app.rb[]
 <tr>
 <td class="tableblock halign-left valign-top"><p class="tableblock">External URLs with text</p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">A link with arbitrary link text</p></td>
-<td class="tableblock halign-left valign-top"><div><div class="listingblock">
+<td class="tableblock halign-left valign-top"><div><div id="toc" class="toc">
+<div id="toctitle">Contents</div>
+
+</div>
+<div class="listingblock">
 <div class="content">
 <pre>link:http://www.google.com[Google]</pre>
 </div>
@@ -30833,7 +31103,11 @@ include\::path/to/app.rb[]
 <tr>
 <td class="tableblock halign-left valign-top"><p class="tableblock">Create an internal anchor to cross-reference</p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">not rendered</p></td>
-<td class="tableblock halign-left valign-top"><div><div class="listingblock">
+<td class="tableblock halign-left valign-top"><div><div id="toc" class="toc">
+<div id="toctitle">Contents</div>
+
+</div>
+<div class="listingblock">
 <div class="content">
 <pre>[[anchor_name]]</pre>
 </div>
@@ -30842,7 +31116,11 @@ include\::path/to/app.rb[]
 <tr>
 <td class="tableblock halign-left valign-top"><p class="tableblock">Cross-reference an existing anchor using its default title</p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">an internal hyperlink using the element title if available, otherwise using the anchor name</p></td>
-<td class="tableblock halign-left valign-top"><div><div class="listingblock">
+<td class="tableblock halign-left valign-top"><div><div id="toc" class="toc">
+<div id="toctitle">Contents</div>
+
+</div>
+<div class="listingblock">
 <div class="content">
 <pre>&lt;&lt;anchor_name&gt;&gt;</pre>
 </div>
@@ -30851,7 +31129,11 @@ include\::path/to/app.rb[]
 <tr>
 <td class="tableblock halign-left valign-top"><p class="tableblock">Cross-reference an existing anchor using custom text</p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">an internal hyperlink using arbitrary text</p></td>
-<td class="tableblock halign-left valign-top"><div><div class="listingblock">
+<td class="tableblock halign-left valign-top"><div><div id="toc" class="toc">
+<div id="toctitle">Contents</div>
+
+</div>
+<div class="listingblock">
 <div class="content">
 <pre>&lt;&lt;anchor_name,Anchor Text&gt;&gt;</pre>
 </div>
@@ -30860,7 +31142,11 @@ include\::path/to/app.rb[]
 <tr>
 <td class="tableblock halign-left valign-top"><p class="tableblock">A block image</p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">The image with alt text</p></td>
-<td class="tableblock halign-left valign-top"><div><div class="listingblock">
+<td class="tableblock halign-left valign-top"><div><div id="toc" class="toc">
+<div id="toctitle">Contents</div>
+
+</div>
+<div class="listingblock">
 <div class="content">
 <pre>image::sunset.jpg[Alt Text]</pre>
 </div>
@@ -30872,7 +31158,11 @@ include\::path/to/app.rb[]
 <tr>
 <td class="tableblock halign-left valign-top"><p class="tableblock">An inline image</p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">The image with alt text, as part of the text flow</p></td>
-<td class="tableblock halign-left valign-top"><div><div class="listingblock">
+<td class="tableblock halign-left valign-top"><div><div id="toc" class="toc">
+<div id="toctitle">Contents</div>
+
+</div>
+<div class="listingblock">
 <div class="content">
 <pre>image:sunset.jpg [Alt Text]</pre>
 </div>
@@ -30884,7 +31174,11 @@ include\::path/to/app.rb[]
 <tr>
 <td class="tableblock halign-left valign-top"><p class="tableblock">Link to a remote image</p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">show an image hosted elsewhere</p></td>
-<td class="tableblock halign-left valign-top"><div><div class="listingblock">
+<td class="tableblock halign-left valign-top"><div><div id="toc" class="toc">
+<div id="toctitle">Contents</div>
+
+</div>
+<div class="listingblock">
 <div class="content">
 <pre>image::http://inkscape.org/doc/examples/tux.svg[Tux,250,350]</pre>
 </div>
@@ -30896,14 +31190,22 @@ include\::path/to/app.rb[]
 <tr>
 <td class="tableblock halign-left valign-top"><p class="tableblock">Add dimensions or a URL to the image</p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">depends</p></td>
-<td class="tableblock halign-left valign-top"><div><div class="paragraph">
+<td class="tableblock halign-left valign-top"><div><div id="toc" class="toc">
+<div id="toctitle">Contents</div>
+
+</div>
+<div class="paragraph">
 <p>inside the brackets after the alt text, specify width, height and/or link="http://my_link.com"</p>
 </div></div></td>
 </tr>
 <tr>
 <td class="tableblock halign-left valign-top"><p class="tableblock">A footnote</p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">subscript link which takes you to the footnote</p></td>
-<td class="tableblock halign-left valign-top"><div><div class="listingblock">
+<td class="tableblock halign-left valign-top"><div><div id="toc" class="toc">
+<div id="toctitle">Contents</div>
+
+</div>
+<div class="listingblock">
 <div class="content">
 <pre>Some text.footnote:[The footnote text.]</pre>
 </div>
@@ -30912,7 +31214,11 @@ include\::path/to/app.rb[]
 <tr>
 <td class="tableblock halign-left valign-top"><p class="tableblock">A note or warning with no title</p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">The admonition image followed by the admonition</p></td>
-<td class="tableblock halign-left valign-top"><div><div class="listingblock">
+<td class="tableblock halign-left valign-top"><div><div id="toc" class="toc">
+<div id="toctitle">Contents</div>
+
+</div>
+<div class="listingblock">
 <div class="content">
 <pre>NOTE:My note here</pre>
 </div>
@@ -30926,7 +31232,11 @@ include\::path/to/app.rb[]
 <tr>
 <td class="tableblock halign-left valign-top"><p class="tableblock">A complex note</p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">The note has a title and/or multiple paragraphs and/or code blocks or lists, etc</p></td>
-<td class="tableblock halign-left valign-top"><div><div class="literalblock">
+<td class="tableblock halign-left valign-top"><div><div id="toc" class="toc">
+<div id="toctitle">Contents</div>
+
+</div>
+<div class="literalblock">
 <div class="content">
 <pre>.The Title
 [NOTE]
@@ -30942,7 +31252,11 @@ some source code
 <tr>
 <td class="tableblock halign-left valign-top"><p class="tableblock">Bullet lists</p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">bullet lists</p></td>
-<td class="tableblock halign-left valign-top"><div><div class="listingblock">
+<td class="tableblock halign-left valign-top"><div><div id="toc" class="toc">
+<div id="toctitle">Contents</div>
+
+</div>
+<div class="listingblock">
 <div class="content">
 <pre>* list item 1</pre>
 </div>
@@ -30954,7 +31268,11 @@ some source code
 <tr>
 <td class="tableblock halign-left valign-top"><p class="tableblock">Numbered lists</p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">numbered list</p></td>
-<td class="tableblock halign-left valign-top"><div><div class="listingblock">
+<td class="tableblock halign-left valign-top"><div><div id="toc" class="toc">
+<div id="toctitle">Contents</div>
+
+</div>
+<div class="listingblock">
 <div class="content">
 <pre>. list item 2</pre>
 </div>
@@ -30966,7 +31284,11 @@ some source code
 <tr>
 <td class="tableblock halign-left valign-top"><p class="tableblock">Checklists</p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">Checked or unchecked boxes</p></td>
-<td class="tableblock halign-left valign-top"><div><div class="paragraph">
+<td class="tableblock halign-left valign-top"><div><div id="toc" class="toc">
+<div id="toctitle">Contents</div>
+
+</div>
+<div class="paragraph">
 <p>Checked:</p>
 </div>
 <div class="listingblock">
@@ -30986,7 +31308,11 @@ some source code
 <tr>
 <td class="tableblock halign-left valign-top"><p class="tableblock">Multiple levels of lists</p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">bulleted or numbered or combo</p></td>
-<td class="tableblock halign-left valign-top"><div><div class="listingblock">
+<td class="tableblock halign-left valign-top"><div><div id="toc" class="toc">
+<div id="toctitle">Contents</div>
+
+</div>
+<div class="listingblock">
 <div class="content">
 <pre>. Numbered (1), at top level
 * Bullet (2), nested under 1
@@ -31001,7 +31327,11 @@ some source code
 <tr>
 <td class="tableblock halign-left valign-top"><p class="tableblock">Labelled lists / variablelists</p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">a list item title or summary followed by content</p></td>
-<td class="tableblock halign-left valign-top"><div><div class="listingblock">
+<td class="tableblock halign-left valign-top"><div><div id="toc" class="toc">
+<div id="toctitle">Contents</div>
+
+</div>
+<div class="listingblock">
 <div class="content">
 <pre>Title:: content
 
@@ -31013,7 +31343,11 @@ Title::
 <tr>
 <td class="tableblock halign-left valign-top"><p class="tableblock">Sidebars, quotes, or other blocks of text</p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">a block of text, formatted differently from the default</p></td>
-<td class="tableblock halign-left valign-top"><div><div class="paragraph">
+<td class="tableblock halign-left valign-top"><div><div id="toc" class="toc">
+<div id="toctitle">Contents</div>
+
+</div>
+<div class="paragraph">
 <p>Delimited using different delimiters,
 see <a href="http://asciidoctor.org/docs/user-manual/#built-in-blocks-summary" class="bare">http://asciidoctor.org/docs/user-manual/#built-in-blocks-summary</a>.
 Some of the examples above use delimiters like ...., ----,====.</p>
@@ -31048,7 +31382,11 @@ ____</pre>
 <tr>
 <td class="tableblock halign-left valign-top"><p class="tableblock">Nested Sections</p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">chapter, section, sub-section, etc</p></td>
-<td class="tableblock halign-left valign-top"><div><div class="listingblock">
+<td class="tableblock halign-left valign-top"><div><div id="toc" class="toc">
+<div id="toctitle">Contents</div>
+
+</div>
+<div class="listingblock">
 <div class="content">
 <pre>= Book (or chapter if the chapter can be built alone, see the leveloffset info below)
 
@@ -31066,7 +31404,11 @@ ____</pre>
 <tr>
 <td class="tableblock halign-left valign-top"><p class="tableblock">Include one file from another</p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">Content is included as though it were inline</p></td>
-<td class="tableblock halign-left valign-top"><div><div class="listingblock">
+<td class="tableblock halign-left valign-top"><div><div id="toc" class="toc">
+<div id="toctitle">Contents</div>
+
+</div>
+<div class="listingblock">
 <div class="content">
 <pre>include::[/path/to/file.adoc]</pre>
 </div>
@@ -31078,21 +31420,33 @@ ____</pre>
 <tr>
 <td class="tableblock halign-left valign-top"><p class="tableblock">A table</p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">a table</p></td>
-<td class="tableblock halign-left valign-top"><div><div class="paragraph">
+<td class="tableblock halign-left valign-top"><div><div id="toc" class="toc">
+<div id="toctitle">Contents</div>
+
+</div>
+<div class="paragraph">
 <p>See <a href="http://asciidoctor.org/docs/user-manual/#tables" class="bare">http://asciidoctor.org/docs/user-manual/#tables</a>. Generally rows are separated by newlines and columns by pipes</p>
 </div></div></td>
 </tr>
 <tr>
 <td class="tableblock halign-left valign-top"><p class="tableblock">Comment out a single line</p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">A  line is skipped during rendering</p></td>
-<td class="tableblock halign-left valign-top"><div><div class="paragraph">
+<td class="tableblock halign-left valign-top"><div><div id="toc" class="toc">
+<div id="toctitle">Contents</div>
+
+</div>
+<div class="paragraph">
 <p><code>// This line won&#8217;t show up</code></p>
 </div></div></td>
 </tr>
 <tr>
 <td class="tableblock halign-left valign-top"><p class="tableblock">Comment out a block</p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">A section of the file is skipped during rendering</p></td>
-<td class="tableblock halign-left valign-top"><div><div class="listingblock">
+<td class="tableblock halign-left valign-top"><div><div id="toc" class="toc">
+<div id="toctitle">Contents</div>
+
+</div>
+<div class="listingblock">
 <div class="content">
 <pre>////
 Nothing between the slashes will show up.
@@ -31103,7 +31457,11 @@ Nothing between the slashes will show up.
 <tr>
 <td class="tableblock halign-left valign-top"><p class="tableblock">Highlight text for review</p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">text shows up with yellow background</p></td>
-<td class="tableblock halign-left valign-top"><div><div class="listingblock">
+<td class="tableblock halign-left valign-top"><div><div id="toc" class="toc">
+<div id="toctitle">Contents</div>
+
+</div>
+<div class="listingblock">
 <div class="content">
 <pre>Test between #hash marks# is highlighted yellow.</pre>
 </div>
@@ -32731,7 +33089,7 @@ Options:
 </div>
 </div>
 <div class="sect1">
-<h2 id="data.block.encoding.enable"><a class="anchor" href="#data.block.encoding.enable"></a>160. Enable Data Block Encoding</h2>
+<h2 id="data.block.encoding.enable"><a class="anchor" href="#data.block.encoding.enable"></a>161. Enable Data Block Encoding</h2>
 <div class="sectionbody">
 <div class="paragraph">
 <p>Codecs are built into HBase so no extra configuration is needed.
@@ -33649,7 +34007,7 @@ The <code>LocalFileSpanReceiver</code> looks in <em>hbase-site.xml</em>      for
 </div>
 </div>
 <div class="sect1">
-<h2 id="tracing.client.modifications"><a class="anchor" href="#tracing.client.modifications"></a>161. Client Modifications</h2>
+<h2 id="tracing.client.modifications"><a class="anchor" href="#tracing.client.modifications"></a>162. Client Modifications</h2>
 <div class="sectionbody">
 <div class="paragraph">
 <p>In order to turn on tracing in your client code, you must initialize the module sending spans to receiver once per client process.</p>
@@ -33707,7 +34065,7 @@ See the HTrace <em>README</em> for more information on Samplers.</p>
 </div>
 </div>
 <div class="sect1">
-<h2 id="tracing.client.shell"><a class="anchor" href="#tracing.client.shell"></a>162. Tracing from HBase Shell</h2>
+<h2 id="tracing.client.shell"><a class="anchor" href="#tracing.client.shell"></a>163. Tracing from HBase Shell</h2>
 <div class="sectionbody">
 <div class="paragraph">
 <p>You can use <code>trace</code> command for tracing requests from HBase Shell. <code>trace 'start'</code> command turns on tracing and <code>trace 'stop'</code> command turns off tracing.</p>
@@ -34017,7 +34375,7 @@ The server will return cellblocks compressed using this same compressor as long
 <div id="footer">
 <div id="footer-text">
 Version 2.0.0-SNAPSHOT<br>
-Last updated 2016-09-29 14:44:28 +00:00
+Last updated 2016-10-06 14:31:45 UTC
 </div>
 </div>
 </body>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/c7e84622/bulk-loads.html
----------------------------------------------------------------------
diff --git a/bulk-loads.html b/bulk-loads.html
index ea211c3..a41fa28 100644
--- a/bulk-loads.html
+++ b/bulk-loads.html
@@ -7,7 +7,7 @@
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20160929" />
+    <meta name="Date-Revision-yyyymmdd" content="20161009" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013;  
       Bulk Loads in Apache HBase (TM)
@@ -305,7 +305,7 @@ under the License. -->
                         <a href="http://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2016-09-29</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2016-10-09</li>
             </p>
                 </div>