Added: hbase/hbase.apache.org/trunk/book/apks03.html
URL: 
http://svn.apache.org/viewvc/hbase/hbase.apache.org/trunk/book/apks03.html?rev=1616896&view=auto
==============================================================================
--- hbase/hbase.apache.org/trunk/book/apks03.html (added)
+++ hbase/hbase.apache.org/trunk/book/apks03.html Fri Aug  8 22:19:16 2014
@@ -0,0 +1,64 @@
+<html><head>
+      <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+   <title>K.3.&nbsp;RPC</title><link rel="stylesheet" type="text/css" 
href="${baserdir}/src/main/site/resources/css/freebsd_docbook.css"><meta 
name="generator" content="DocBook XSL Stylesheets V1.78.1"><link rel="home" 
href="book.html" title="The Apache HBase&#153; Reference Guide"><link rel="up" 
href="hbase.rpc.html" title="Appendix&nbsp;K.&nbsp;0.95 RPC 
Specification"><link rel="prev" href="apks02.html" title="K.2.&nbsp;TODO"><link 
rel="next" href="apks04.html" title="K.4.&nbsp;Notes"></head><body 
bgcolor="white" text="black" link="#0000FF" vlink="#840084" 
alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation 
header"><tr><th colspan="3" align="center">K.3.&nbsp;RPC</th></tr><tr><td 
width="20%" align="left"><a accesskey="p" 
href="apks02.html">Prev</a>&nbsp;</td><th width="60%" 
align="center">Appendix&nbsp;K.&nbsp;0.95 RPC Specification</th><td width="20%" 
align="right">&nbsp;<a accesskey="n" 
href="apks04.html">Next</a></td></tr></table><hr></div><script typ
 e="text/javascript">
+    var disqus_shortname = 'hbase'; // required: replace example with your 
forum shortname
+    var disqus_url = 'http://hbase.apache.org/book/.html';
+    </script><div class="section"><div class="titlepage"><div><div><h2 
class="title" style="clear: both"><a 
name="d4029e22394"></a>K.3.&nbsp;RPC</h2></div></div></div><p>The client will 
send setup information on connection establish. Thereafter, the client
+            invokes methods against the remote server sending a protobuf 
Message and receiving a
+            protobuf Message in response. Communication is synchronous. All 
back and forth is
+            preceded by an int that has the total length of the 
request/response. Optionally,
+            Cells(KeyValues) can be passed outside of protobufs in 
follow-behind Cell blocks
+            (because <a class="link" 
href="https://docs.google.com/document/d/1WEtrq-JTIUhlnlnvA0oYRLp0F8MKpEBeBSCFcQiacdw/edit#";
 target="_top">we
+                can&#8217;t protobuf megabytes of KeyValues</a> or Cells). 
These CellBlocks are encoded
+            and optionally compressed.</p><p></p><p>For more detail on the 
protobufs involved, see the <a class="link" 
href="http://svn.apache.org/viewvc/hbase/trunk/hbase-protocol/src/main/protobuf/RPC.proto?view=markup";
 target="_top">RPC.proto</a>
+            file in trunk.</p><div class="section"><div 
class="titlepage"><div><div><h3 class="title"><a 
name="d4029e22408"></a>K.3.1.&nbsp;Connection 
Setup</h3></div></div></div><p>Client initiates connection.</p><div 
class="section"><div class="titlepage"><div><div><h4 class="title"><a 
name="d4029e22413"></a>K.3.1.1.&nbsp;Client</h4></div></div></div><p>On 
connection setup, client sends a preamble followed by a connection header. 
</p><div class="section"><div class="titlepage"><div><div><h5 class="title"><a 
name="d4029e22418"></a>K.3.1.1.1.&nbsp;&lt;preamble&gt;</h5></div></div></div><pre
 class="programlisting">&lt;MAGIC 4 byte integer&gt; &lt;1 byte RPC Format 
Version&gt; &lt;1 byte auth type&gt;<a href="#ftn.d4029e22424" class="footnote" 
name="d4029e22424"><sup class="footnote">[35]</sup></a></pre><p>E.g.: 
HBas0x000x50 -- 4 bytes of MAGIC -- &#8216;HBas&#8217; -- plus one-byte of
+                        version, 0 in this case, and one byte, 0x50 (SIMPLE). 
of an auth
+                        type.</p></div><div class="section"><div 
class="titlepage"><div><div><h5 class="title"><a 
name="d4029e22429"></a>K.3.1.1.2.&nbsp;&lt;Protobuf ConnectionHeader 
Message&gt;</h5></div></div></div><p>Has user info, and &#8220;protocol&#8221;, 
as well as the encoders and compression the
+                        client will use sending CellBlocks. CellBlock encoders 
and compressors are
+                        for the life of the connection. CellBlock encoders 
implement
+                        org.apache.hadoop.hbase.codec.Codec. CellBlocks may 
then also be compressed.
+                        Compressors implement 
org.apache.hadoop.io.compress.CompressionCodec. This
+                        protobuf is written using writeDelimited so is 
prefaced by a pb varint with
+                        its serialized length</p></div></div><div 
class="section"><div class="titlepage"><div><div><h4 class="title"><a 
name="d4029e22435"></a>K.3.1.2.&nbsp;Server</h4></div></div></div><p>After 
client sends preamble and connection header, server does NOT respond if
+                    successful connection setup. No response means server is 
READY to accept
+                    requests and to give out response. If the version or 
authentication in the
+                    preamble is not agreeable or the server has trouble 
parsing the preamble, it
+                    will throw a 
org.apache.hadoop.hbase.ipc.FatalConnectionException explaining the
+                    error and will then disconnect. If the client in the 
connection header -- i.e.
+                    the protobuf&#8217;d Message that comes after the 
connection preamble -- asks for for
+                    a Service the server does not support or a codec the 
server does not have, again
+                    we throw a FatalConnectionException with 
explanation.</p></div></div><div class="section"><div 
class="titlepage"><div><div><h3 class="title"><a 
name="d4029e22440"></a>K.3.2.&nbsp;Request</h3></div></div></div><p>After a 
Connection has been set up, client makes requests. Server responds.</p><p>A 
request is made up of a protobuf RequestHeader followed by a protobuf Message
+                parameter. The header includes the method name and optionally, 
metadata on the
+                optional CellBlock that may be following. The parameter type 
suits the method being
+                invoked: i.e. if we are doing a getRegionInfo request, the 
protobuf Message param
+                will be an instance of GetRegionInfoRequest. The response will 
be a
+                GetRegionInfoResponse. The CellBlock is optionally used 
ferrying the bulk of the RPC
+                data: i.e Cells/KeyValues.</p><div class="section"><div 
class="titlepage"><div><div><h4 class="title"><a 
name="d4029e22447"></a>K.3.2.1.&nbsp;Request Parts</h4></div></div></div><div 
class="section"><div class="titlepage"><div><div><h5 class="title"><a 
name="d4029e22450"></a>K.3.2.1.1.&nbsp;&lt;Total 
Length&gt;</h5></div></div></div><p>The request is prefaced by an int that 
holds the total length of what
+                        follows.</p></div><div class="section"><div 
class="titlepage"><div><div><h5 class="title"><a 
name="d4029e22455"></a>K.3.2.1.2.&nbsp;&lt;Protobuf RequestHeader 
Message&gt;</h5></div></div></div><p>Will have call.id, trace.id, and method 
name, etc. including optional
+                        Metadata on the Cell block IFF one is following. Data 
is protobuf&#8217;d inline
+                        in this pb Message or optionally comes in the 
following CellBlock</p></div><div class="section"><div 
class="titlepage"><div><div><h5 class="title"><a 
name="d4029e22460"></a>K.3.2.1.3.&nbsp;&lt;Protobuf Param 
Message&gt;</h5></div></div></div><p>If the method being invoked is 
getRegionInfo, if you study the Service
+                        descriptor for the client to regionserver protocol, 
you will find that the
+                        request sends a GetRegionInfoRequest protobuf Message 
param in this
+                        position.</p></div><div class="section"><div 
class="titlepage"><div><div><h5 class="title"><a 
name="d4029e22465"></a>K.3.2.1.4.&nbsp;&lt;CellBlock&gt;</h5></div></div></div><p>An
 encoded and optionally compressed Cell block.</p></div></div></div><div 
class="section"><div class="titlepage"><div><div><h3 class="title"><a 
name="d4029e22472"></a>K.3.3.&nbsp;Response</h3></div></div></div><p>Same as 
Request, it is a protobuf ResponseHeader followed by a protobuf Message
+                response where the Message response type suits the method 
invoked. Bulk of the data
+                may come in a following CellBlock.</p><div 
class="section"><div class="titlepage"><div><div><h4 class="title"><a 
name="d4029e22477"></a>K.3.3.1.&nbsp;Response Parts</h4></div></div></div><div 
class="section"><div class="titlepage"><div><div><h5 class="title"><a 
name="d4029e22480"></a>K.3.3.1.1.&nbsp;&lt;Total 
Length&gt;</h5></div></div></div><p>The response is prefaced by an int that 
holds the total length of what
+                        follows.</p></div><div class="section"><div 
class="titlepage"><div><div><h5 class="title"><a 
name="d4029e22485"></a>K.3.3.1.2.&nbsp;&lt;Protobuf ResponseHeader 
Message&gt;</h5></div></div></div><p>Will have call.id, etc. Will include 
exception if failed processing.
+                        &nbsp;Optionally includes metadata on optional, IFF 
there is a CellBlock
+                        following.</p></div><div class="section"><div 
class="titlepage"><div><div><h5 class="title"><a 
name="d4029e22490"></a>K.3.3.1.3.&nbsp;&lt;Protobuf Response 
Message&gt;</h5></div></div></div><p>Return or may be nothing if exception. If 
the method being invoked is
+                        getRegionInfo, if you study the Service descriptor for 
the client to
+                        regionserver protocol, you will find that the response 
sends a
+                        GetRegionInfoResponse protobuf Message param in this 
position.</p></div><div class="section"><div class="titlepage"><div><div><h5 
class="title"><a 
name="d4029e22495"></a>K.3.3.1.4.&nbsp;&lt;CellBlock&gt;</h5></div></div></div><p>An
 encoded and optionally compressed Cell block.</p></div></div></div><div 
class="section"><div class="titlepage"><div><div><h3 class="title"><a 
name="d4029e22502"></a>K.3.4.&nbsp;Exceptions</h3></div></div></div><p>There 
are two distinct types. There is the request failed which is encapsulated
+                inside the response header for the response. The connection 
stays open to receive
+                new requests. The second type, the FatalConnectionException, 
kills the
+                connection.</p><p>Exceptions can carry extra information. See 
the ExceptionResponse protobuf type.
+                It has a flag to indicate do-no-retry as well as other 
miscellaneous payload to help
+                improve client responsiveness.</p></div><div 
class="section"><div class="titlepage"><div><div><h3 class="title"><a 
name="d4029e22509"></a>K.3.5.&nbsp;CellBlocks</h3></div></div></div><p>These 
are not versioned. Server can do the codec or it cannot. If new version of a
+                codec with say, tighter encoding, then give it a new class 
name. Codecs will live on
+                the server for all time so old clients can 
connect.</p></div><div class="footnotes"><br><hr style="width:100; 
text-align:left;margin-left: 0"><div id="ftn.d4029e22424" 
class="footnote"><p><a href="#d4029e22424" class="para"><sup class="para">[35] 
</sup></a> We need the auth method spec. here so the connection header is 
encoded if auth enabled.</p></div></div></div><div 
id="disqus_thread"></div><script type="text/javascript">
+    /* * * DON'T EDIT BELOW THIS LINE * * */
+    (function() {
+        var dsq = document.createElement('script'); dsq.type = 
'text/javascript'; dsq.async = true;
+        dsq.src = 'http://' + disqus_shortname + '.disqus.com/embed.js';
+        (document.getElementsByTagName('head')[0] || 
document.getElementsByTagName('body')[0]).appendChild(dsq);
+    })();
+</script><noscript>Please enable JavaScript to view the <a 
href="http://disqus.com/?ref_noscript";>comments powered by 
Disqus.</a></noscript><a href="http://disqus.com"; class="dsq-brlink">comments 
powered by <span class="logo-disqus">Disqus</span></a><div 
class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td 
width="40%" align="left"><a accesskey="p" 
href="apks02.html">Prev</a>&nbsp;</td><td width="20%" align="center"><a 
accesskey="u" href="hbase.rpc.html">Up</a></td><td width="40%" 
align="right">&nbsp;<a accesskey="n" 
href="apks04.html">Next</a></td></tr><tr><td width="40%" align="left" 
valign="top">K.2.&nbsp;TODO&nbsp;</td><td width="20%" align="center"><a 
accesskey="h" href="book.html">Home</a></td><td width="40%" align="right" 
valign="top">&nbsp;K.4.&nbsp;Notes</td></tr></table></div></body></html>
\ No newline at end of file

Added: hbase/hbase.apache.org/trunk/book/apks04.html
URL: 
http://svn.apache.org/viewvc/hbase/hbase.apache.org/trunk/book/apks04.html?rev=1616896&view=auto
==============================================================================
--- hbase/hbase.apache.org/trunk/book/apks04.html (added)
+++ hbase/hbase.apache.org/trunk/book/apks04.html Fri Aug  8 22:19:16 2014
@@ -0,0 +1,43 @@
+<html><head>
+      <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+   <title>K.4.&nbsp;Notes</title><link rel="stylesheet" type="text/css" 
href="${baserdir}/src/main/site/resources/css/freebsd_docbook.css"><meta 
name="generator" content="DocBook XSL Stylesheets V1.78.1"><link rel="home" 
href="book.html" title="The Apache HBase&#153; Reference Guide"><link rel="up" 
href="hbase.rpc.html" title="Appendix&nbsp;K.&nbsp;0.95 RPC 
Specification"><link rel="prev" href="apks03.html" title="K.3.&nbsp;RPC"><link 
rel="next" href="book_index.html" title="Index"></head><body bgcolor="white" 
text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div 
class="navheader"><table width="100%" summary="Navigation header"><tr><th 
colspan="3" align="center">K.4.&nbsp;Notes</th></tr><tr><td width="20%" 
align="left"><a accesskey="p" href="apks03.html">Prev</a>&nbsp;</td><th 
width="60%" align="center">Appendix&nbsp;K.&nbsp;0.95 RPC Specification</th><td 
width="20%" align="right">&nbsp;<a accesskey="n" 
href="book_index.html">Next</a></td></tr></table><hr></div><script ty
 pe="text/javascript">
+    var disqus_shortname = 'hbase'; // required: replace example with your 
forum shortname
+    var disqus_url = 'http://hbase.apache.org/book/.html';
+    </script><div class="section"><div class="titlepage"><div><div><h2 
class="title" style="clear: both"><a 
name="d4029e22514"></a>K.4.&nbsp;Notes</h2></div></div></div><div 
class="section"><div class="titlepage"><div><div><h3 class="title"><a 
name="d4029e22517"></a>K.4.1.&nbsp;Constraints</h3></div></div></div><p>In some 
part, current wire-format -- i.e. all requests and responses preceeded by
+                a length -- has been dictated by current server non-async 
architecture.</p></div><div class="section"><div 
class="titlepage"><div><div><h3 class="title"><a 
name="d4029e22522"></a>K.4.2.&nbsp;One fat pb request or 
header+param</h3></div></div></div><p>We went with pb header followed by pb 
param making a request and a pb header
+                followed by pb response for now. Doing header+param rather 
than a single protobuf
+                Message with both header and param content:</p><p>
+                </p><div class="orderedlist"><ol class="orderedlist" 
type="1"><li class="listitem"><p>Is closer to what we currently 
have</p></li><li class="listitem"><p>Having a single fat pb requires extra 
copying putting the already pb&#8217;d
+                            param into the body of the fat request pb (and 
same making
+                            result)</p></li><li class="listitem"><p>We can 
decide whether to accept the request or not before we read the
+                            param; for example, the request might be low 
priority. &nbsp;As is, we read
+                            header+param in one go as server is currently 
implemented so this is a
+                            TODO.</p></li></ol></div><p>
+            </p><p>The advantages are minor. &nbsp;If later, fat request has 
clear advantage, can roll out
+                a v2 later.</p></div><div class="section"><div 
class="titlepage"><div><div><h3 class="title"><a 
name="rpc.configs"></a>K.4.3.&nbsp;RPC 
Configurations</h3></div></div></div><div class="section"><div 
class="titlepage"><div><div><h4 class="title"><a 
name="d4029e22545"></a>K.4.3.1.&nbsp;CellBlock 
Codecs</h4></div></div></div><p>To enable a codec other than the default <code 
class="classname">KeyValueCodec</code>,
+                    set <code class="varname">hbase.client.rpc.codec</code> to 
the name of the Codec class to
+                    use. Codec must implement hbase's <code 
class="classname">Codec</code> Interface. After
+                    connection setup, all passed cellblocks will be sent with 
this codec. The server
+                    will return cellblocks using this same codec as long as 
the codec is on the
+                    servers' CLASSPATH (else you will get
+                        <code 
class="classname">UnsupportedCellCodecException</code>).</p><p>To change the 
default codec, set
+                        <code 
class="varname">hbase.client.default.rpc.codec</code>. </p><p>To disable 
cellblocks completely and to go pure protobuf, set the default to
+                    the empty String and do not specify a codec in your 
Configuration. So, set
+                        <code 
class="varname">hbase.client.default.rpc.codec</code> to the empty string and do
+                    not set <code 
class="varname">hbase.client.rpc.codec</code>. This will cause the client to
+                    connect to the server with no codec specified. If a server 
sees no codec, it
+                    will return all responses in pure protobuf. Running pure 
protobuf all the time
+                    will be slower than running with cellblocks. 
</p></div><div class="section"><div class="titlepage"><div><div><h4 
class="title"><a 
name="d4029e22575"></a>K.4.3.2.&nbsp;Compression</h4></div></div></div><p>Uses 
hadoops compression codecs. To enable compressing of passed CellBlocks,
+                    set <code 
class="varname">hbase.client.rpc.compressor</code> to the name of the Compressor
+                    to use. Compressor must implement Hadoops' 
CompressionCodec Interface. After
+                    connection setup, all passed cellblocks will be sent 
compressed. The server will
+                    return cellblocks compressed using this same compressor as 
long as the
+                    compressor is on its CLASSPATH (else you will get
+                        <code 
class="classname">UnsupportedCompressionCodecException</code>).</p></div></div></div><div
 id="disqus_thread"></div><script type="text/javascript">
+    /* * * DON'T EDIT BELOW THIS LINE * * */
+    (function() {
+        var dsq = document.createElement('script'); dsq.type = 
'text/javascript'; dsq.async = true;
+        dsq.src = 'http://' + disqus_shortname + '.disqus.com/embed.js';
+        (document.getElementsByTagName('head')[0] || 
document.getElementsByTagName('body')[0]).appendChild(dsq);
+    })();
+</script><noscript>Please enable JavaScript to view the <a 
href="http://disqus.com/?ref_noscript";>comments powered by 
Disqus.</a></noscript><a href="http://disqus.com"; class="dsq-brlink">comments 
powered by <span class="logo-disqus">Disqus</span></a><div 
class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td 
width="40%" align="left"><a accesskey="p" 
href="apks03.html">Prev</a>&nbsp;</td><td width="20%" align="center"><a 
accesskey="u" href="hbase.rpc.html">Up</a></td><td width="40%" 
align="right">&nbsp;<a accesskey="n" 
href="book_index.html">Next</a></td></tr><tr><td width="40%" align="left" 
valign="top">K.3.&nbsp;RPC&nbsp;</td><td width="20%" align="center"><a 
accesskey="h" href="book.html">Home</a></td><td width="40%" align="right" 
valign="top">&nbsp;Index</td></tr></table></div></body></html>
\ No newline at end of file

Added: 
hbase/hbase.apache.org/trunk/book/appendix_contributing_to_documentation.html
URL: 
http://svn.apache.org/viewvc/hbase/hbase.apache.org/trunk/book/appendix_contributing_to_documentation.html?rev=1616896&view=auto
==============================================================================
--- 
hbase/hbase.apache.org/trunk/book/appendix_contributing_to_documentation.html 
(added)
+++ 
hbase/hbase.apache.org/trunk/book/appendix_contributing_to_documentation.html 
Fri Aug  8 22:19:16 2014
@@ -0,0 +1,24 @@
+<html><head>
+      <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+   <title>Appendix&nbsp;A.&nbsp;Contributing to Documentation</title><link 
rel="stylesheet" type="text/css" 
href="${baserdir}/src/main/site/resources/css/freebsd_docbook.css"><meta 
name="generator" content="DocBook XSL Stylesheets V1.78.1"><link rel="home" 
href="appendix_contributing_to_documentation.html" 
title="Appendix&nbsp;A.&nbsp;Contributing to Documentation"><link rel="next" 
href="apas02.html" title="A.2.&nbsp;Contributing to Documentation or Other 
Strings"></head><body bgcolor="white" text="black" link="#0000FF" 
vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" 
summary="Navigation header"><tr><th colspan="3" 
align="center">Appendix&nbsp;A.&nbsp;Contributing to 
Documentation</th></tr><tr><td width="20%" align="left">&nbsp;</td><th 
width="60%" align="center">&nbsp;</th><td width="20%" align="right">&nbsp;<a 
accesskey="n" href="apas02.html">Next</a></td></tr></table><hr></div><script 
type="text/javascript">
+    var disqus_shortname = 'hbase'; // required: replace example with your 
forum shortname
+    var disqus_url = 
'http://hbase.apache.org/book/appendix_contributing_to_documentation.html';
+    </script><div class="appendix"><div class="titlepage"><div><div><h2 
class="title"><a 
name="appendix_contributing_to_documentation"></a>Appendix&nbsp;A.&nbsp;Contributing
 to Documentation</h2></div></div></div><div class="toc"><p><b>Table of 
Contents</b></p><dl class="toc"><dt><span class="section"><a 
href="appendix_contributing_to_documentation.html#d9580e47">A.1. Getting Access 
to the Wiki</a></span></dt><dt><span class="section"><a href="apas02.html">A.2. 
Contributing to Documentation or Other Strings</a></span></dt><dt><span 
class="section"><a href="apas03.html">A.3. Editing the HBase 
Website</a></span></dt><dt><span class="section"><a href="apas04.html">A.4. 
Editing the HBase Reference Guide</a></span></dt><dt><span class="section"><a 
href="apas05.html">A.5. Auto-Generated Content</a></span></dt><dt><span 
class="section"><a href="apas06.html">A.6. Multi-Page and Single-Page 
Output</a></span></dt><dt><span class="section"><a href="apas07.html">A.7. 
Images in the HBase Referen
 ce Guide</a></span></dt><dt><span class="section"><a href="apas08.html">A.8. 
Adding a New Chapter to the HBase Reference Guide</a></span></dt><dt><span 
class="section"><a href="apas09.html">A.9. Docbook Common 
Issues</a></span></dt></dl></div><p>The Apache HBase project welcomes 
contributions to all aspects of the project, including
+        the documentation. In HBase, documentation includes the following 
areas, and probably some
+        others:</p><div class="itemizedlist"><ul class="itemizedlist" 
style="list-style-type: disc; "><li class="listitem"><p>The <a class="link" 
href="http://hbase.apache.org/book.html"; target="_top">HBase Reference
+                    Guide</a> (this book)</p></li><li class="listitem"><p>The 
<a class="link" href="http://hbase.apache.org/"; target="_top">HBase 
website</a>e</p></li><li class="listitem"><p>The <a class="link" 
href="http://wiki.apache.org/hadoop/Hbase"; target="_top">HBase
+                Wiki</a></p></li><li class="listitem"><p>API 
documentation</p></li><li class="listitem"><p>Command-line utility output and 
help text</p></li><li class="listitem"><p>Web UI strings, explicit help text, 
context-sensitive strings, and others</p></li><li class="listitem"><p>Log 
messages</p></li><li class="listitem"><p>Comments in source files, 
configuration files, and others</p></li><li class="listitem"><p>Localization of 
any of the above into target languages other than 
English</p></li></ul></div><p>No matter which area you want to help out with, 
the first step is almost always to
+        download (typically by cloning the Git repository) and familiarize 
yourself with the HBase
+        source code. The only exception in the list above is the HBase Wiki, 
which is edited online.
+        For information on downloading and building the source, see <a 
class="xref" href="">???</a>.</p><div class="section"><div 
class="titlepage"><div><div><h2 class="title" style="clear: both"><a 
name="d9580e47"></a>A.1.&nbsp;Getting Access to the 
Wiki</h2></div></div></div><p>The HBase Wiki is not well-maintained and much of 
its content has been moved into the
+            HBase Reference Guide (this guide). However, some pages on the 
Wiki are well maintained,
+            and it would be great to have some volunteers willing to help out 
with the Wiki. To
+            request access to the Wiki, register a new account at <a 
class="link" href="https://wiki.apache.org/hadoop/Hbase?action=newaccount"; 
target="_top">https://wiki.apache.org/hadoop/Hbase?action=newaccount</a>. 
Contact one of the
+            HBase committers, who can either give you access or refer you to 
someone who can.</p></div></div><div id="disqus_thread"></div><script 
type="text/javascript">
+    /* * * DON'T EDIT BELOW THIS LINE * * */
+    (function() {
+        var dsq = document.createElement('script'); dsq.type = 
'text/javascript'; dsq.async = true;
+        dsq.src = 'http://' + disqus_shortname + '.disqus.com/embed.js';
+        (document.getElementsByTagName('head')[0] || 
document.getElementsByTagName('body')[0]).appendChild(dsq);
+    })();
+</script><noscript>Please enable JavaScript to view the <a 
href="http://disqus.com/?ref_noscript";>comments powered by 
Disqus.</a></noscript><a href="http://disqus.com"; class="dsq-brlink">comments 
powered by <span class="logo-disqus">Disqus</span></a><div 
class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td 
width="40%" align="left">&nbsp;</td><td width="20%" 
align="center">&nbsp;</td><td width="40%" align="right">&nbsp;<a accesskey="n" 
href="apas02.html">Next</a></td></tr><tr><td width="40%" align="left" 
valign="top">&nbsp;</td><td width="20%" align="center">&nbsp;</td><td 
width="40%" align="right" valign="top">&nbsp;A.2.&nbsp;Contributing to 
Documentation or Other Strings</td></tr></table></div></body></html>
\ No newline at end of file

Added: hbase/hbase.apache.org/trunk/book/ch01s14.html
URL: 
http://svn.apache.org/viewvc/hbase/hbase.apache.org/trunk/book/ch01s14.html?rev=1616896&view=auto
==============================================================================
--- hbase/hbase.apache.org/trunk/book/ch01s14.html (added)
+++ hbase/hbase.apache.org/trunk/book/ch01s14.html Fri Aug  8 22:19:16 2014
@@ -0,0 +1,85 @@
+<html><head>
+      <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+   <title>1.14.&nbsp;HBase and HDFS</title><link rel="stylesheet" 
type="text/css" 
href="${baserdir}/src/main/site/resources/css/freebsd_docbook.css"><meta 
name="generator" content="DocBook XSL Stylesheets V1.78.1"><link rel="home" 
href="troubleshooting.html" title="Chapter&nbsp;1.&nbsp;Troubleshooting and 
Debugging Apache HBase"><link rel="up" href="troubleshooting.html" 
title="Chapter&nbsp;1.&nbsp;Troubleshooting and Debugging Apache HBase"><link 
rel="prev" href="trouble.versions.html" title="1.13.&nbsp;HBase and Hadoop 
version issues"><link rel="next" href="trouble.tests.html" 
title="1.15.&nbsp;Running unit or integration tests"></head><body 
bgcolor="white" text="black" link="#0000FF" vlink="#840084" 
alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation 
header"><tr><th colspan="3" align="center">1.14.&nbsp;HBase and 
HDFS</th></tr><tr><td width="20%" align="left"><a accesskey="p" 
href="trouble.versions.html">Prev</a>&nbsp;</td><th width="60%" align="center"
 >&nbsp;</th><td width="20%" align="right">&nbsp;<a accesskey="n" 
 >href="trouble.tests.html">Next</a></td></tr></table><hr></div><script 
 >type="text/javascript">
+    var disqus_shortname = 'hbase'; // required: replace example with your 
forum shortname
+    var disqus_url = 'http://hbase.apache.org/book/.html';
+    </script><div class="section"><div class="titlepage"><div><div><h2 
class="title" style="clear: both"><a name="d226e1050"></a>1.14.&nbsp;HBase and 
HDFS</h2></div></div></div><p>General configuration guidance for Apache HDFS is 
out of the scope of this guide. Refer to
+      the documentation available at <a class="link" 
href="http://hadoop.apache.org/"; target="_top">http://hadoop.apache.org/</a> 
for extensive
+      information about configuring HDFS. This section deals with HDFS in 
terms of HBase. </p><p>In most cases, HBase stores its data in Apache HDFS. 
This includes the HFiles containing
+      the data, as well as the write-ahead logs (WALs) which store data before 
it is written to the
+      HFiles and protect against RegionServer crashes. HDFS provides 
reliability and protection to
+      data in HBase because it is distributed. To operate with the most 
efficiency, HBase needs data
+    to be available locally. Therefore, it is a good practice to run an HDFS 
datanode on each
+    RegionServer.</p><div class="variablelist"><p class="title"><b>Important 
Information and Guidelines for HBase and HDFS</b></p><dl 
class="variablelist"><dt><span class="term">HBase is a client of 
HDFS.</span></dt><dd><p>HBase is an HDFS client, using the HDFS <code 
class="code">DFSClient</code> class, and references
+            to this class appear in HBase logs with other HDFS client log 
messages.</p></dd><dt><span class="term">Configuration is necessary in multiple 
places.</span></dt><dd><p>Some HDFS configurations relating to HBase need to be 
done at the HDFS (server) side.
+            Others must be done within HBase (at the client side). Other 
settings need
+            to be set at both the server and client side.
+          </p></dd><dt><span class="term">Write errors which affect HBase may 
be logged in the HDFS logs rather than HBase logs.</span></dt><dd><p>When 
writing, HDFS pipelines communications from one datanode to another. HBase
+            communicates to both the HDFS namenode and datanode, using the 
HDFS client classes.
+            Communication problems between datanodes are logged in the HDFS 
logs, not the HBase
+            logs.</p><p>HDFS writes are always local when possible. HBase 
RegionServers should not
+            experience many write errors, because they write the local 
datanode. If the datanode
+            cannot replicate the blocks, the errors are logged in HDFS, not in 
the HBase
+            RegionServer logs.</p></dd><dt><span class="term">HBase 
communicates with HDFS using two different ports.</span></dt><dd><p>HBase 
communicates with datanodes using the <code class="code">ipc.Client</code> 
interface and
+            the <code class="code">DataNode</code> class. References to these 
will appear in HBase logs. Each of
+            these communication channels use a different port (50010 and 50020 
by default). The
+            ports are configured in the HDFS configuration, via the
+              <code class="code">dfs.datanode.address</code> and <code 
class="code">dfs.datanode.ipc.address</code>
+            parameters.</p></dd><dt><span class="term">Errors may be logged in 
HBase, HDFS, or both.</span></dt><dd><p>When troubleshooting HDFS issues in 
HBase, check logs in both places for errors.</p></dd><dt><span 
class="term">HDFS takes a while to mark a node as dead. You can configure HDFS 
to avoid using stale
+          datanodes.</span></dt><dd><p>By default, HDFS does not mark a node 
as dead until it is unreachable for 630
+            seconds. In Hadoop 1.1 and Hadoop 2.x, this can be alleviated by 
enabling checks for
+            stale datanodes, though this check is disabled by default. You can 
enable the check for
+            reads and writes separately, via <code 
class="code">dfs.namenode.avoid.read.stale.datanode</code> and
+              <code class="code">dfs.namenode.avoid.write.stale.datanode 
settings</code>. A stale datanode is one
+            that has not been reachable for <code 
class="code">dfs.namenode.stale.datanode.interval</code>
+            (default is 30 seconds). Stale datanodes are avoided, and marked 
as the last possible
+            target for a read or write operation. For configuration details, 
see the HDFS
+            documentation.</p></dd><dt><span class="term">Settings for HDFS 
retries and timeouts are important to HBase.</span></dt><dd><p>You can 
configure settings for various retries and timeouts. Always refer to the
+            HDFS documentation for current recommendations and defaults. Some 
of the settings
+            important to HBase are listed here. Defaults are current as of 
Hadoop 2.3. Check the
+            Hadoop documentation for the most current values and 
recommendations.</p><div class="variablelist"><p 
class="title"><b>Retries</b></p><dl class="variablelist"><dt><span 
class="term"><code class="code">ipc.client.connect.max.retries</code> (default: 
10)</span></dt><dd><p>The number of times a client will attempt to establish a 
connection with the
+                  server. This value sometimes needs to be increased. You can 
specify different
+                  setting for the maximum number of retries if a timeout 
occurs. For SASL
+                  connections, the number of retries is hard-coded at 15 and 
cannot be
+                  configured.</p></dd><dt><span class="term"><code 
class="code">ipc.client.connect.max.retries.on.timeouts</code> (default: 
45)</span></dt><dd><p>The number of times a client will attempt to establish a 
connection
+                with the server in the event of a timeout. If some retries are 
due to timeouts and
+                some are due to other reasons, this counter is added to
+                <code class="code">ipc.client.connect.max.retries</code>, so 
the maximum number of retries for
+                all reasons could be the combined value.</p></dd><dt><span 
class="term"><code class="code">dfs.client.block.write.retries</code> (default: 
3)</span></dt><dd><p>How many times the client attempts to write to the 
datanode. After the
+              number of retries is reached, the client reconnects to the 
namenode to get a new
+              location of a datanode. You can try increasing this 
value.</p></dd></dl></div><div class="variablelist"><p class="title"><b>HDFS 
Heartbeats</b></p><p>HDFS heartbeats are entirely on the HDFS side, between the 
namenode and datanodes.</p><dl class="variablelist"><dt><span 
class="term"><code class="code">dfs.heartbeat.interval</code> (default: 
3)</span></dt><dd><p>The interval at which a node heartbeats.</p></dd><dt><span 
class="term"><code class="code">dfs.namenode.heartbeat.recheck-interval</code> 
(default: 300000)</span></dt><dd><p>The interval of time between heartbeat 
checks. The total time before a node is
+                  marked as stale is determined by the following formula, 
which works out to 10
+                  minutes and 30 seconds:</p><pre class="screen"> 2 * 
(dfs.namenode.heartbeat.recheck-interval) + 10 * 1000 * 
(dfs.heartbeat.interval)</pre></dd><dt><span class="term"><code 
class="code">dfs.namenode.stale.datanode.interval</code> (default: 
3000)</span></dt><dd><p>How long (in milliseconds) a node can go without a 
heartbeat before it is
+                  determined to be stale, if the other options to do with 
stale datanodes are
+                  configured (off by 
default).</p></dd></dl></div></dd></dl></div><div class="variablelist"><p 
class="title"><b>Connection Timeouts</b></p><p>Connection timeouts occur 
between the client (HBASE) and the HDFS datanode. They may
+        occur when establishing a connection, attempting to read, or 
attempting to write. The two
+        settings below are used in combination, and affect connections between 
the DFSClient and the
+        datanode, the ipc.cClient and the datanode, and communication between 
two datanodes. </p><dl class="variablelist"><dt><span class="term"><code 
class="code">dfs.client.socket-timeout</code> (default: 
60000)</span></dt><dd><p>The amount of time before a client connection times 
out when establishing a
+            connection or reading. The value is expressed in milliseconds, so 
the default is 60
+            seconds.</p></dd><dt><span class="term"><code 
class="code">dfs.datanode.socket.write.timeout</code> (default: 
480000)</span></dt><dd><p>The amount of time before a write operation times 
out. The default is 8
+            minutes, expressed as milliseconds.</p></dd></dl></div><div 
class="variablelist"><p class="title"><b>Typical Error Logs</b></p><p>The 
following types of errors are often seen in the logs.</p><dl 
class="variablelist"><dt><span class="term"><code class="code">INFO 
HDFS.DFSClient: Failed to connect to /xxx50010, add to deadNodes and
+            continue java.net.SocketTimeoutException: 60000 millis timeout 
while waiting for channel
+            to be ready for connect. ch : 
java.nio.channels.SocketChannel[connection-pending
+            remote=/region-server-1:50010]</code></span></dt><dd><p>All 
datanodes for a block are dead, and recovery is not possible. Here is the
+            sequence of events that leads to this error:</p><div 
class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; 
"><li class="listitem"><p>The client attempts to connect to a dead 
datanode.</p></li><li class="listitem"><p>The connection fails, so the client 
moves down the list of datanodes and tries
+                the next one. It also fails.</p></li><li 
class="listitem"><p>When the client exhausts its entire list, it sleeps for 3 
seconds and requests a
+              new list. It is very likely to receive the exact same list as 
before, in which case
+              the error occurs again.</p></li></ul></div></dd><dt><span 
class="term"><code class="code">INFO org.apache.hadoop.HDFS.DFSClient: 
Exception in createBlockOutputStream
+            java.net.SocketTimeoutException: 69000 millis timeout while 
waiting for channel to be
+            ready for connect. ch : 
java.nio.channels.SocketChannel[connection-pending remote=/
+            xxx:50010]</code></span></dt><dd><p>This type of error indicates a 
write issue. In this case, the master wants to split
+            the log. It does not have a local datanode so it tries to connect 
to a remote datanode,
+            but the datanode is dead.</p><p>In this situation, there will be 
three retries (by default). If all retries fail, a
+            message like the following is logged:</p><pre class="screen">
+WARN HDFS.DFSClient: DataStreamer Exception: java.io.IOException: Unable to 
create new block
+          </pre><p>If the operation was an attempt to split the log, the 
following type of message may
+            also appear:</p><pre class="screen">
+FATAL wal.HLogSplitter: WriterThread-xxx Got while writing log entry to log    
        
+          </pre></dd></dl></div></div><div id="disqus_thread"></div><script 
type="text/javascript">
+    /* * * DON'T EDIT BELOW THIS LINE * * */
+    (function() {
+        var dsq = document.createElement('script'); dsq.type = 
'text/javascript'; dsq.async = true;
+        dsq.src = 'http://' + disqus_shortname + '.disqus.com/embed.js';
+        (document.getElementsByTagName('head')[0] || 
document.getElementsByTagName('body')[0]).appendChild(dsq);
+    })();
+</script><noscript>Please enable JavaScript to view the <a 
href="http://disqus.com/?ref_noscript";>comments powered by 
Disqus.</a></noscript><a href="http://disqus.com"; class="dsq-brlink">comments 
powered by <span class="logo-disqus">Disqus</span></a><div 
class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td 
width="40%" align="left"><a accesskey="p" 
href="trouble.versions.html">Prev</a>&nbsp;</td><td width="20%" 
align="center">&nbsp;</td><td width="40%" align="right">&nbsp;<a accesskey="n" 
href="trouble.tests.html">Next</a></td></tr><tr><td width="40%" align="left" 
valign="top">1.13.&nbsp;HBase and Hadoop version issues&nbsp;</td><td 
width="20%" align="center"><a accesskey="h" 
href="troubleshooting.html">Home</a></td><td width="40%" align="right" 
valign="top">&nbsp;1.15.&nbsp;Running unit or integration 
tests</td></tr></table></div></body></html>
\ No newline at end of file

Added: hbase/hbase.apache.org/trunk/book/ch01s18.html
URL: 
http://svn.apache.org/viewvc/hbase/hbase.apache.org/trunk/book/ch01s18.html?rev=1616896&view=auto
==============================================================================
--- hbase/hbase.apache.org/trunk/book/ch01s18.html (added)
+++ hbase/hbase.apache.org/trunk/book/ch01s18.html Fri Aug  8 22:19:16 2014
@@ -0,0 +1,19 @@
+<html><head>
+      <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+   <title>1.18.&nbsp;Operating System Specific Issues</title><link 
rel="stylesheet" type="text/css" 
href="${baserdir}/src/main/site/resources/css/freebsd_docbook.css"><meta 
name="generator" content="DocBook XSL Stylesheets V1.78.1"><link rel="home" 
href="troubleshooting.html" title="Chapter&nbsp;1.&nbsp;Troubleshooting and 
Debugging Apache HBase"><link rel="up" href="troubleshooting.html" 
title="Chapter&nbsp;1.&nbsp;Troubleshooting and Debugging Apache HBase"><link 
rel="prev" href="trouble.crypto.html" title="1.17.&nbsp;Cryptographic 
Features"></head><body bgcolor="white" text="black" link="#0000FF" 
vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" 
summary="Navigation header"><tr><th colspan="3" 
align="center">1.18.&nbsp;Operating System Specific Issues</th></tr><tr><td 
width="20%" align="left"><a accesskey="p" 
href="trouble.crypto.html">Prev</a>&nbsp;</td><th width="60%" 
align="center">&nbsp;</th><td width="20%" 
align="right">&nbsp;</td></tr></table><hr></d
 iv><script type="text/javascript">
+    var disqus_shortname = 'hbase'; // required: replace example with your 
forum shortname
+    var disqus_url = 'http://hbase.apache.org/book/.html';
+    </script><div class="section"><div class="titlepage"><div><div><h2 
class="title" style="clear: both"><a name="d226e1300"></a>1.18.&nbsp;Operating 
System Specific Issues</h2></div></div></div><div class="section"><div 
class="titlepage"><div><div><h3 class="title"><a 
name="d226e1303"></a>1.18.1.&nbsp;Page Allocation 
Failure</h3></div></div></div><div class="note" style="margin-left: 0.5in; 
margin-right: 0.5in;"><h3 class="title">Note</h3><p>This issue is known to 
affect CentOS 6.2 and possibly CentOS 6.5. It may also affect
+        some versions of Red Hat Enterprise Linux, according to <a 
class="link" href="https://bugzilla.redhat.com/show_bug.cgi?id=770545"; 
target="_top">https://bugzilla.redhat.com/show_bug.cgi?id=770545</a>.</p></div><p>Some
 users have reported seeing the following error:</p><pre class="screen">kernel: 
java: page allocation failure. order:4, mode:0x20</pre><p>Raising the value of 
<code class="code">min_free_kbytes</code> was reported to fix this problem. This
+      parameter is set to a percentage of the amount of RAM on your system, 
and is described in more
+      detail at <a class="link" 
href="http://www.centos.org/docs/5/html/5.1/Deployment_Guide/s3-proc-sys-vm.html";
 
target="_top">http://www.centos.org/docs/5/html/5.1/Deployment_Guide/s3-proc-sys-vm.html</a>.
 </p><p>To find the current value on your system, run the following 
command:</p><pre class="screen">[user@host]<em class="hl-comment" style="color: 
silver"># </em><strong class="userinput"><code>cat 
/proc/sys/vm/min_free_kbytes</code></strong></pre><p>Next, raise the value. Try 
doubling, then quadrupling the value. Note that setting the
+        value too low or too high could have detrimental effects on your 
system. Consult your
+        operating system vendor for specific recommendations.</p><p>Use the 
following command to modify the value of <code 
class="code">min_free_kbytes</code>,
+        substituting <em class="replaceable"><code>&lt;value&gt;</code></em> 
with your intended value:</p><pre class="screen">[user@host]<em 
class="hl-comment" style="color: silver"># </em><strong 
class="userinput"><code>echo &lt;value&gt; &gt; 
/proc/sys/vm/min_free_kbytes</code></strong></pre></div></div><div 
id="disqus_thread"></div><script type="text/javascript">
+    /* * * DON'T EDIT BELOW THIS LINE * * */
+    (function() {
+        var dsq = document.createElement('script'); dsq.type = 
'text/javascript'; dsq.async = true;
+        dsq.src = 'http://' + disqus_shortname + '.disqus.com/embed.js';
+        (document.getElementsByTagName('head')[0] || 
document.getElementsByTagName('body')[0]).appendChild(dsq);
+    })();
+</script><noscript>Please enable JavaScript to view the <a 
href="http://disqus.com/?ref_noscript";>comments powered by 
Disqus.</a></noscript><a href="http://disqus.com"; class="dsq-brlink">comments 
powered by <span class="logo-disqus">Disqus</span></a><div 
class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td 
width="40%" align="left"><a accesskey="p" 
href="trouble.crypto.html">Prev</a>&nbsp;</td><td width="20%" 
align="center">&nbsp;</td><td width="40%" align="right">&nbsp;</td></tr><tr><td 
width="40%" align="left" valign="top">1.17.&nbsp;Cryptographic 
Features&nbsp;</td><td width="20%" align="center"><a accesskey="h" 
href="troubleshooting.html">Home</a></td><td width="40%" align="right" 
valign="top">&nbsp;</td></tr></table></div></body></html>
\ No newline at end of file

Added: hbase/hbase.apache.org/trunk/book/ch15s14.html
URL: 
http://svn.apache.org/viewvc/hbase/hbase.apache.org/trunk/book/ch15s14.html?rev=1616896&view=auto
==============================================================================
--- hbase/hbase.apache.org/trunk/book/ch15s14.html (added)
+++ hbase/hbase.apache.org/trunk/book/ch15s14.html Fri Aug  8 22:19:16 2014
@@ -0,0 +1,85 @@
+<html><head>
+      <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+   <title>15.14.&nbsp;HBase and HDFS</title><link rel="stylesheet" 
type="text/css" 
href="${baserdir}/src/main/site/resources/css/freebsd_docbook.css"><meta 
name="generator" content="DocBook XSL Stylesheets V1.78.1"><link rel="home" 
href="book.html" title="The Apache HBase&#153; Reference Guide"><link rel="up" 
href="trouble.html" title="Chapter&nbsp;15.&nbsp;Troubleshooting and Debugging 
Apache HBase"><link rel="prev" href="trouble.versions.html" 
title="15.13.&nbsp;HBase and Hadoop version issues"><link rel="next" 
href="trouble.tests.html" title="15.15.&nbsp;Running unit or integration 
tests"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" 
alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation 
header"><tr><th colspan="3" align="center">15.14.&nbsp;HBase and 
HDFS</th></tr><tr><td width="20%" align="left"><a accesskey="p" 
href="trouble.versions.html">Prev</a>&nbsp;</td><th width="60%" 
align="center">Chapter&nbsp;15.&nbsp;Troubleshooting 
 and Debugging Apache HBase</th><td width="20%" align="right">&nbsp;<a 
accesskey="n" 
href="trouble.tests.html">Next</a></td></tr></table><hr></div><script 
type="text/javascript">
+    var disqus_shortname = 'hbase'; // required: replace example with your 
forum shortname
+    var disqus_url = 'http://hbase.apache.org/book/.html';
+    </script><div class="section"><div class="titlepage"><div><div><h2 
class="title" style="clear: both"><a name="d4029e15588"></a>15.14.&nbsp;HBase 
and HDFS</h2></div></div></div><p>General configuration guidance for Apache 
HDFS is out of the scope of this guide. Refer to
+      the documentation available at <a class="link" 
href="http://hadoop.apache.org/"; target="_top">http://hadoop.apache.org/</a> 
for extensive
+      information about configuring HDFS. This section deals with HDFS in 
terms of HBase. </p><p>In most cases, HBase stores its data in Apache HDFS. 
This includes the HFiles containing
+      the data, as well as the write-ahead logs (WALs) which store data before 
it is written to the
+      HFiles and protect against RegionServer crashes. HDFS provides 
reliability and protection to
+      data in HBase because it is distributed. To operate with the most 
efficiency, HBase needs data
+    to be available locally. Therefore, it is a good practice to run an HDFS 
datanode on each
+    RegionServer.</p><div class="variablelist"><p class="title"><b>Important 
Information and Guidelines for HBase and HDFS</b></p><dl 
class="variablelist"><dt><span class="term">HBase is a client of 
HDFS.</span></dt><dd><p>HBase is an HDFS client, using the HDFS <code 
class="code">DFSClient</code> class, and references
+            to this class appear in HBase logs with other HDFS client log 
messages.</p></dd><dt><span class="term">Configuration is necessary in multiple 
places.</span></dt><dd><p>Some HDFS configurations relating to HBase need to be 
done at the HDFS (server) side.
+            Others must be done within HBase (at the client side). Other 
settings need
+            to be set at both the server and client side.
+          </p></dd><dt><span class="term">Write errors which affect HBase may 
be logged in the HDFS logs rather than HBase logs.</span></dt><dd><p>When 
writing, HDFS pipelines communications from one datanode to another. HBase
+            communicates to both the HDFS namenode and datanode, using the 
HDFS client classes.
+            Communication problems between datanodes are logged in the HDFS 
logs, not the HBase
+            logs.</p><p>HDFS writes are always local when possible. HBase 
RegionServers should not
+            experience many write errors, because they write the local 
datanode. If the datanode
+            cannot replicate the blocks, the errors are logged in HDFS, not in 
the HBase
+            RegionServer logs.</p></dd><dt><span class="term">HBase 
communicates with HDFS using two different ports.</span></dt><dd><p>HBase 
communicates with datanodes using the <code class="code">ipc.Client</code> 
interface and
+            the <code class="code">DataNode</code> class. References to these 
will appear in HBase logs. Each of
+            these communication channels use a different port (50010 and 50020 
by default). The
+            ports are configured in the HDFS configuration, via the
+              <code class="code">dfs.datanode.address</code> and <code 
class="code">dfs.datanode.ipc.address</code>
+            parameters.</p></dd><dt><span class="term">Errors may be logged in 
HBase, HDFS, or both.</span></dt><dd><p>When troubleshooting HDFS issues in 
HBase, check logs in both places for errors.</p></dd><dt><span 
class="term">HDFS takes a while to mark a node as dead. You can configure HDFS 
to avoid using stale
+          datanodes.</span></dt><dd><p>By default, HDFS does not mark a node 
as dead until it is unreachable for 630
+            seconds. In Hadoop 1.1 and Hadoop 2.x, this can be alleviated by 
enabling checks for
+            stale datanodes, though this check is disabled by default. You can 
enable the check for
+            reads and writes separately, via <code 
class="code">dfs.namenode.avoid.read.stale.datanode</code> and
+              <code class="code">dfs.namenode.avoid.write.stale.datanode 
settings</code>. A stale datanode is one
+            that has not been reachable for <code 
class="code">dfs.namenode.stale.datanode.interval</code>
+            (default is 30 seconds). Stale datanodes are avoided, and marked 
as the last possible
+            target for a read or write operation. For configuration details, 
see the HDFS
+            documentation.</p></dd><dt><span class="term">Settings for HDFS 
retries and timeouts are important to HBase.</span></dt><dd><p>You can 
configure settings for various retries and timeouts. Always refer to the
+            HDFS documentation for current recommendations and defaults. Some 
of the settings
+            important to HBase are listed here. Defaults are current as of 
Hadoop 2.3. Check the
+            Hadoop documentation for the most current values and 
recommendations.</p><div class="variablelist"><p 
class="title"><b>Retries</b></p><dl class="variablelist"><dt><span 
class="term"><code class="code">ipc.client.connect.max.retries</code> (default: 
10)</span></dt><dd><p>The number of times a client will attempt to establish a 
connection with the
+                  server. This value sometimes needs to be increased. You can 
specify different
+                  setting for the maximum number of retries if a timeout 
occurs. For SASL
+                  connections, the number of retries is hard-coded at 15 and 
cannot be
+                  configured.</p></dd><dt><span class="term"><code 
class="code">ipc.client.connect.max.retries.on.timeouts</code> (default: 
45)</span></dt><dd><p>The number of times a client will attempt to establish a 
connection
+                with the server in the event of a timeout. If some retries are 
due to timeouts and
+                some are due to other reasons, this counter is added to
+                <code class="code">ipc.client.connect.max.retries</code>, so 
the maximum number of retries for
+                all reasons could be the combined value.</p></dd><dt><span 
class="term"><code class="code">dfs.client.block.write.retries</code> (default: 
3)</span></dt><dd><p>How many times the client attempts to write to the 
datanode. After the
+              number of retries is reached, the client reconnects to the 
namenode to get a new
+              location of a datanode. You can try increasing this 
value.</p></dd></dl></div><div class="variablelist"><p class="title"><b>HDFS 
Heartbeats</b></p><p>HDFS heartbeats are entirely on the HDFS side, between the 
namenode and datanodes.</p><dl class="variablelist"><dt><span 
class="term"><code class="code">dfs.heartbeat.interval</code> (default: 
3)</span></dt><dd><p>The interval at which a node heartbeats.</p></dd><dt><span 
class="term"><code class="code">dfs.namenode.heartbeat.recheck-interval</code> 
(default: 300000)</span></dt><dd><p>The interval of time between heartbeat 
checks. The total time before a node is
+                  marked as stale is determined by the following formula, 
which works out to 10
+                  minutes and 30 seconds:</p><pre class="screen"> 2 * 
(dfs.namenode.heartbeat.recheck-interval) + 10 * 1000 * 
(dfs.heartbeat.interval)</pre></dd><dt><span class="term"><code 
class="code">dfs.namenode.stale.datanode.interval</code> (default: 
3000)</span></dt><dd><p>How long (in milliseconds) a node can go without a 
heartbeat before it is
+                  determined to be stale, if the other options to do with 
stale datanodes are
+                  configured (off by 
default).</p></dd></dl></div></dd></dl></div><div class="variablelist"><p 
class="title"><b>Connection Timeouts</b></p><p>Connection timeouts occur 
between the client (HBASE) and the HDFS datanode. They may
+        occur when establishing a connection, attempting to read, or 
attempting to write. The two
+        settings below are used in combination, and affect connections between 
the DFSClient and the
+        datanode, the ipc.cClient and the datanode, and communication between 
two datanodes. </p><dl class="variablelist"><dt><span class="term"><code 
class="code">dfs.client.socket-timeout</code> (default: 
60000)</span></dt><dd><p>The amount of time before a client connection times 
out when establishing a
+            connection or reading. The value is expressed in milliseconds, so 
the default is 60
+            seconds.</p></dd><dt><span class="term"><code 
class="code">dfs.datanode.socket.write.timeout</code> (default: 
480000)</span></dt><dd><p>The amount of time before a write operation times 
out. The default is 8
+            minutes, expressed as milliseconds.</p></dd></dl></div><div 
class="variablelist"><p class="title"><b>Typical Error Logs</b></p><p>The 
following types of errors are often seen in the logs.</p><dl 
class="variablelist"><dt><span class="term"><code class="code">INFO 
HDFS.DFSClient: Failed to connect to /xxx50010, add to deadNodes and
+            continue java.net.SocketTimeoutException: 60000 millis timeout 
while waiting for channel
+            to be ready for connect. ch : 
java.nio.channels.SocketChannel[connection-pending
+            remote=/region-server-1:50010]</code></span></dt><dd><p>All 
datanodes for a block are dead, and recovery is not possible. Here is the
+            sequence of events that leads to this error:</p><div 
class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; 
"><li class="listitem"><p>The client attempts to connect to a dead 
datanode.</p></li><li class="listitem"><p>The connection fails, so the client 
moves down the list of datanodes and tries
+                the next one. It also fails.</p></li><li 
class="listitem"><p>When the client exhausts its entire list, it sleeps for 3 
seconds and requests a
+              new list. It is very likely to receive the exact same list as 
before, in which case
+              the error occurs again.</p></li></ul></div></dd><dt><span 
class="term"><code class="code">INFO org.apache.hadoop.HDFS.DFSClient: 
Exception in createBlockOutputStream
+            java.net.SocketTimeoutException: 69000 millis timeout while 
waiting for channel to be
+            ready for connect. ch : 
java.nio.channels.SocketChannel[connection-pending remote=/
+            xxx:50010]</code></span></dt><dd><p>This type of error indicates a 
write issue. In this case, the master wants to split
+            the log. It does not have a local datanode so it tries to connect 
to a remote datanode,
+            but the datanode is dead.</p><p>In this situation, there will be 
three retries (by default). If all retries fail, a
+            message like the following is logged:</p><pre class="screen">
+WARN HDFS.DFSClient: DataStreamer Exception: java.io.IOException: Unable to 
create new block
+          </pre><p>If the operation was an attempt to split the log, the 
following type of message may
+            also appear:</p><pre class="screen">
+FATAL wal.HLogSplitter: WriterThread-xxx Got while writing log entry to log    
        
+          </pre></dd></dl></div></div><div id="disqus_thread"></div><script 
type="text/javascript">
+    /* * * DON'T EDIT BELOW THIS LINE * * */
+    (function() {
+        var dsq = document.createElement('script'); dsq.type = 
'text/javascript'; dsq.async = true;
+        dsq.src = 'http://' + disqus_shortname + '.disqus.com/embed.js';
+        (document.getElementsByTagName('head')[0] || 
document.getElementsByTagName('body')[0]).appendChild(dsq);
+    })();
+</script><noscript>Please enable JavaScript to view the <a 
href="http://disqus.com/?ref_noscript";>comments powered by 
Disqus.</a></noscript><a href="http://disqus.com"; class="dsq-brlink">comments 
powered by <span class="logo-disqus">Disqus</span></a><div 
class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td 
width="40%" align="left"><a accesskey="p" 
href="trouble.versions.html">Prev</a>&nbsp;</td><td width="20%" 
align="center"><a accesskey="u" href="trouble.html">Up</a></td><td width="40%" 
align="right">&nbsp;<a accesskey="n" 
href="trouble.tests.html">Next</a></td></tr><tr><td width="40%" align="left" 
valign="top">15.13.&nbsp;HBase and Hadoop version issues&nbsp;</td><td 
width="20%" align="center"><a accesskey="h" href="book.html">Home</a></td><td 
width="40%" align="right" valign="top">&nbsp;15.15.&nbsp;Running unit or 
integration tests</td></tr></table></div></body></html>
\ No newline at end of file

Added: hbase/hbase.apache.org/trunk/book/ch15s18.html
URL: 
http://svn.apache.org/viewvc/hbase/hbase.apache.org/trunk/book/ch15s18.html?rev=1616896&view=auto
==============================================================================
--- hbase/hbase.apache.org/trunk/book/ch15s18.html (added)
+++ hbase/hbase.apache.org/trunk/book/ch15s18.html Fri Aug  8 22:19:16 2014
@@ -0,0 +1,19 @@
+<html><head>
+      <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+   <title>15.18.&nbsp;Operating System Specific Issues</title><link 
rel="stylesheet" type="text/css" 
href="${baserdir}/src/main/site/resources/css/freebsd_docbook.css"><meta 
name="generator" content="DocBook XSL Stylesheets V1.78.1"><link rel="home" 
href="book.html" title="The Apache HBase&#153; Reference Guide"><link rel="up" 
href="trouble.html" title="Chapter&nbsp;15.&nbsp;Troubleshooting and Debugging 
Apache HBase"><link rel="prev" href="trouble.crypto.html" 
title="15.17.&nbsp;Cryptographic Features"><link rel="next" 
href="casestudies.html" title="Chapter&nbsp;16.&nbsp;Apache HBase Case 
Studies"></head><body bgcolor="white" text="black" link="#0000FF" 
vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" 
summary="Navigation header"><tr><th colspan="3" 
align="center">15.18.&nbsp;Operating System Specific Issues</th></tr><tr><td 
width="20%" align="left"><a accesskey="p" 
href="trouble.crypto.html">Prev</a>&nbsp;</td><th width="60%" 
align="center">Chapter&nbsp;15
 .&nbsp;Troubleshooting and Debugging Apache HBase</th><td width="20%" 
align="right">&nbsp;<a accesskey="n" 
href="casestudies.html">Next</a></td></tr></table><hr></div><script 
type="text/javascript">
+    var disqus_shortname = 'hbase'; // required: replace example with your 
forum shortname
+    var disqus_url = 'http://hbase.apache.org/book/.html';
+    </script><div class="section"><div class="titlepage"><div><div><h2 
class="title" style="clear: both"><a 
name="d4029e15838"></a>15.18.&nbsp;Operating System Specific 
Issues</h2></div></div></div><div class="section"><div 
class="titlepage"><div><div><h3 class="title"><a 
name="d4029e15841"></a>15.18.1.&nbsp;Page Allocation 
Failure</h3></div></div></div><div class="note" style="margin-left: 0.5in; 
margin-right: 0.5in;"><h3 class="title">Note</h3><p>This issue is known to 
affect CentOS 6.2 and possibly CentOS 6.5. It may also affect
+        some versions of Red Hat Enterprise Linux, according to <a 
class="link" href="https://bugzilla.redhat.com/show_bug.cgi?id=770545"; 
target="_top">https://bugzilla.redhat.com/show_bug.cgi?id=770545</a>.</p></div><p>Some
 users have reported seeing the following error:</p><pre class="screen">kernel: 
java: page allocation failure. order:4, mode:0x20</pre><p>Raising the value of 
<code class="code">min_free_kbytes</code> was reported to fix this problem. This
+      parameter is set to a percentage of the amount of RAM on your system, 
and is described in more
+      detail at <a class="link" 
href="http://www.centos.org/docs/5/html/5.1/Deployment_Guide/s3-proc-sys-vm.html";
 
target="_top">http://www.centos.org/docs/5/html/5.1/Deployment_Guide/s3-proc-sys-vm.html</a>.
 </p><p>To find the current value on your system, run the following 
command:</p><pre class="screen">[user@host]<em class="hl-comment" style="color: 
silver"># </em><strong class="userinput"><code>cat 
/proc/sys/vm/min_free_kbytes</code></strong></pre><p>Next, raise the value. Try 
doubling, then quadrupling the value. Note that setting the
+        value too low or too high could have detrimental effects on your 
system. Consult your
+        operating system vendor for specific recommendations.</p><p>Use the 
following command to modify the value of <code 
class="code">min_free_kbytes</code>,
+        substituting <em class="replaceable"><code>&lt;value&gt;</code></em> 
with your intended value:</p><pre class="screen">[user@host]<em 
class="hl-comment" style="color: silver"># </em><strong 
class="userinput"><code>echo &lt;value&gt; &gt; 
/proc/sys/vm/min_free_kbytes</code></strong></pre></div></div><div 
id="disqus_thread"></div><script type="text/javascript">
+    /* * * DON'T EDIT BELOW THIS LINE * * */
+    (function() {
+        var dsq = document.createElement('script'); dsq.type = 
'text/javascript'; dsq.async = true;
+        dsq.src = 'http://' + disqus_shortname + '.disqus.com/embed.js';
+        (document.getElementsByTagName('head')[0] || 
document.getElementsByTagName('body')[0]).appendChild(dsq);
+    })();
+</script><noscript>Please enable JavaScript to view the <a 
href="http://disqus.com/?ref_noscript";>comments powered by 
Disqus.</a></noscript><a href="http://disqus.com"; class="dsq-brlink">comments 
powered by <span class="logo-disqus">Disqus</span></a><div 
class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td 
width="40%" align="left"><a accesskey="p" 
href="trouble.crypto.html">Prev</a>&nbsp;</td><td width="20%" align="center"><a 
accesskey="u" href="trouble.html">Up</a></td><td width="40%" 
align="right">&nbsp;<a accesskey="n" 
href="casestudies.html">Next</a></td></tr><tr><td width="40%" align="left" 
valign="top">15.17.&nbsp;Cryptographic Features&nbsp;</td><td width="20%" 
align="center"><a accesskey="h" href="book.html">Home</a></td><td width="40%" 
align="right" valign="top">&nbsp;Chapter&nbsp;16.&nbsp;Apache HBase Case 
Studies</td></tr></table></div></body></html>
\ No newline at end of file

Added: hbase/hbase.apache.org/trunk/book/ld-d2012e1089.html
URL: 
http://svn.apache.org/viewvc/hbase/hbase.apache.org/trunk/book/ld-d2012e1089.html?rev=1616896&view=auto
==============================================================================
--- hbase/hbase.apache.org/trunk/book/ld-d2012e1089.html (added)
+++ hbase/hbase.apache.org/trunk/book/ld-d2012e1089.html Fri Aug  8 22:19:16 
2014
@@ -0,0 +1,4 @@
+<html><head>
+      <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+   <title>Long Description</title><link rel="stylesheet" type="text/css" 
href="${baserdir}/src/main/site/resources/css/freebsd_docbook.css"><meta 
name="generator" content="DocBook XSL Stylesheets V1.78.1"></head><body 
bgcolor="white" text="black" link="#0000FF" vlink="#840084" 
alink="#0000FF"><p>Illustration of the replication architecture in HBase, as 
described in the prior
+            text.</p></body></html>
\ No newline at end of file

Added: hbase/hbase.apache.org/trunk/book/ld-d4029e17132.html
URL: 
http://svn.apache.org/viewvc/hbase/hbase.apache.org/trunk/book/ld-d4029e17132.html?rev=1616896&view=auto
==============================================================================
--- hbase/hbase.apache.org/trunk/book/ld-d4029e17132.html (added)
+++ hbase/hbase.apache.org/trunk/book/ld-d4029e17132.html Fri Aug  8 22:19:16 
2014
@@ -0,0 +1,4 @@
+<html><head>
+      <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+   <title>Long Description</title><link rel="stylesheet" type="text/css" 
href="${baserdir}/src/main/site/resources/css/freebsd_docbook.css"><meta 
name="generator" content="DocBook XSL Stylesheets V1.78.1"></head><body 
bgcolor="white" text="black" link="#0000FF" vlink="#840084" 
alink="#0000FF"><p>Illustration of the replication architecture in HBase, as 
described in the prior
+            text.</p></body></html>
\ No newline at end of file

Added: hbase/hbase.apache.org/trunk/book/ld-d4029e21286.html
URL: 
http://svn.apache.org/viewvc/hbase/hbase.apache.org/trunk/book/ld-d4029e21286.html?rev=1616896&view=auto
==============================================================================
--- hbase/hbase.apache.org/trunk/book/ld-d4029e21286.html (added)
+++ hbase/hbase.apache.org/trunk/book/ld-d4029e21286.html Fri Aug  8 22:19:16 
2014
@@ -0,0 +1,3 @@
+<html><head>
+      <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+   <title>Long Description</title><link rel="stylesheet" type="text/css" 
href="${baserdir}/src/main/site/resources/css/freebsd_docbook.css"><meta 
name="generator" content="DocBook XSL Stylesheets V1.78.1"></head><body 
bgcolor="white" text="black" link="#0000FF" vlink="#840084" 
alink="#0000FF"><p></p></body></html>
\ No newline at end of file

Added: hbase/hbase.apache.org/trunk/book/ld-d4029e21296.html
URL: 
http://svn.apache.org/viewvc/hbase/hbase.apache.org/trunk/book/ld-d4029e21296.html?rev=1616896&view=auto
==============================================================================
--- hbase/hbase.apache.org/trunk/book/ld-d4029e21296.html (added)
+++ hbase/hbase.apache.org/trunk/book/ld-d4029e21296.html Fri Aug  8 22:19:16 
2014
@@ -0,0 +1,3 @@
+<html><head>
+      <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+   <title>Long Description</title><link rel="stylesheet" type="text/css" 
href="${baserdir}/src/main/site/resources/css/freebsd_docbook.css"><meta 
name="generator" content="DocBook XSL Stylesheets V1.78.1"></head><body 
bgcolor="white" text="black" link="#0000FF" vlink="#840084" 
alink="#0000FF"><p></p></body></html>
\ No newline at end of file

Added: hbase/hbase.apache.org/trunk/book/ld-d4029e21311.html
URL: 
http://svn.apache.org/viewvc/hbase/hbase.apache.org/trunk/book/ld-d4029e21311.html?rev=1616896&view=auto
==============================================================================
--- hbase/hbase.apache.org/trunk/book/ld-d4029e21311.html (added)
+++ hbase/hbase.apache.org/trunk/book/ld-d4029e21311.html Fri Aug  8 22:19:16 
2014
@@ -0,0 +1,3 @@
+<html><head>
+      <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+   <title>Long Description</title><link rel="stylesheet" type="text/css" 
href="${baserdir}/src/main/site/resources/css/freebsd_docbook.css"><meta 
name="generator" content="DocBook XSL Stylesheets V1.78.1"></head><body 
bgcolor="white" text="black" link="#0000FF" vlink="#840084" 
alink="#0000FF"><p></p></body></html>
\ No newline at end of file

Added: hbase/hbase.apache.org/trunk/book/repos.html
URL: 
http://svn.apache.org/viewvc/hbase/hbase.apache.org/trunk/book/repos.html?rev=1616896&view=auto
==============================================================================
--- hbase/hbase.apache.org/trunk/book/repos.html (added)
+++ hbase/hbase.apache.org/trunk/book/repos.html Fri Aug  8 22:19:16 2014
@@ -0,0 +1,20 @@
+<html><head>
+      <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+   <title>18.2.&nbsp;Apache HBase Repositories</title><link rel="stylesheet" 
type="text/css" 
href="${baserdir}/src/main/site/resources/css/freebsd_docbook.css"><meta 
name="generator" content="DocBook XSL Stylesheets V1.78.1"><link rel="home" 
href="book.html" title="The Apache HBase&#153; Reference Guide"><link rel="up" 
href="developer.html" title="Chapter&nbsp;18.&nbsp;Building and Developing 
Apache HBase"><link rel="prev" href="developer.html" 
title="Chapter&nbsp;18.&nbsp;Building and Developing Apache HBase"><link 
rel="next" href="ides.html" title="18.3.&nbsp;IDEs"></head><body 
bgcolor="white" text="black" link="#0000FF" vlink="#840084" 
alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation 
header"><tr><th colspan="3" align="center">18.2.&nbsp;Apache HBase 
Repositories</th></tr><tr><td width="20%" align="left"><a accesskey="p" 
href="developer.html">Prev</a>&nbsp;</td><th width="60%" 
align="center">Chapter&nbsp;18.&nbsp;Building and Developing Apache HBase</
 th><td width="20%" align="right">&nbsp;<a accesskey="n" 
href="ides.html">Next</a></td></tr></table><hr></div><script 
type="text/javascript">
+    var disqus_shortname = 'hbase'; // required: replace example with your 
forum shortname
+    var disqus_url = 'http://hbase.apache.org/book/repos.html';
+    </script><div class="section"><div class="titlepage"><div><div><h2 
class="title" style="clear: both"><a name="repos"></a>18.2.&nbsp;Apache HBase 
Repositories</h2></div></div></div><p>There are two different repositories for 
Apache HBase: Subversion (SVN) and Git.
+          GIT is our repository of record for all but the Apache HBase website.
+          We used to be on SVN. We migrated.  See <a class="link" 
href="https://issues.apache.org/jira/browse/INFRA-7768"; target="_top">Migrade 
Apache HBase SVN Repos to Git</a>. 
+          Updating hbase.apache.org still requires use of SVN (See <a 
class="xref" href="hbase.org.html" title="18.7.&nbsp;Updating 
hbase.apache.org">Section&nbsp;18.7, &#8220;Updating 
hbase.apache.org&#8221;</a>). 
+          See <a class="link" 
href="http://hbase.apache.org/source-repository.html"; target="_top">Source Code 
Management</a>
+          page for contributor and committer links or
+          seach for HBase on the <a class="link" href="http://git.apache.org/"; 
target="_top">Apache Git</a> page.
+      </p></div><div id="disqus_thread"></div><script type="text/javascript">
+    /* * * DON'T EDIT BELOW THIS LINE * * */
+    (function() {
+        var dsq = document.createElement('script'); dsq.type = 
'text/javascript'; dsq.async = true;
+        dsq.src = 'http://' + disqus_shortname + '.disqus.com/embed.js';
+        (document.getElementsByTagName('head')[0] || 
document.getElementsByTagName('body')[0]).appendChild(dsq);
+    })();
+</script><noscript>Please enable JavaScript to view the <a 
href="http://disqus.com/?ref_noscript";>comments powered by 
Disqus.</a></noscript><a href="http://disqus.com"; class="dsq-brlink">comments 
powered by <span class="logo-disqus">Disqus</span></a><div 
class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td 
width="40%" align="left"><a accesskey="p" 
href="developer.html">Prev</a>&nbsp;</td><td width="20%" align="center"><a 
accesskey="u" href="developer.html">Up</a></td><td width="40%" 
align="right">&nbsp;<a accesskey="n" href="ides.html">Next</a></td></tr><tr><td 
width="40%" align="left" valign="top">Chapter&nbsp;18.&nbsp;Building and 
Developing Apache HBase&nbsp;</td><td width="20%" align="center"><a 
accesskey="h" href="book.html">Home</a></td><td width="40%" align="right" 
valign="top">&nbsp;18.3.&nbsp;IDEs</td></tr></table></div></body></html>
\ No newline at end of file


Reply via email to