From 0de2cb3a4416d6f86e3136d3584f4f3ebd4650e0 Mon Sep 17 00:00:00 2001 From: Misty Stanley-Jones Date: Sat, 23 Jul 2016 18:00:37 -0700 Subject: [PATCH] HBASE-16279 Separate and rewrite intro and quickstart Added additional outputs to pom.xml Added new HTML output to TOC Also reworked some aspects of the existing POM to take advantage of Asciidoctor configs that were not previously available --- pom.xml | 17 + src/main/docs/asciidoctor.css | 407 ++++++ src/main/docs/hbase.css | 400 ++++++ src/main/docs/images | 1 + src/main/docs/installation/appendix.adoc | 330 +++++ src/main/docs/installation/asciidoctor.css | 407 ++++++ src/main/docs/installation/installation.adoc | 173 +++ src/main/docs/installation/intro.adoc | 122 ++ src/main/docs/installation/intro.html | 1866 ++++++++++++++++++++++++++ src/main/docs/installation/next_steps.adoc | 34 + src/main/docs/installation/quickstart.adoc | 639 +++++++++ src/main/site/site.xml | 2 +- 12 files changed, 4397 insertions(+), 1 deletion(-) create mode 100644 src/main/docs/asciidoctor.css create mode 100644 src/main/docs/hbase.css create mode 120000 src/main/docs/images create mode 100644 src/main/docs/installation/appendix.adoc create mode 100644 src/main/docs/installation/asciidoctor.css create mode 100644 src/main/docs/installation/installation.adoc create mode 100644 src/main/docs/installation/intro.adoc create mode 100644 src/main/docs/installation/intro.html create mode 100644 src/main/docs/installation/next_steps.adoc create mode 100644 src/main/docs/installation/quickstart.adoc diff --git a/pom.xml b/pom.xml index ea7743f..f1760a3 100644 --- a/pom.xml +++ b/pom.xml @@ -1092,6 +1092,22 @@ hbase.css html5 + book.adoc + + + + output-intro + site + + process-asciidoc + + + + hbase.css + + html5 + src/main/docs/installation + intro.adoc @@ -1108,6 +1124,7 @@ - + book.adoc diff --git a/src/main/docs/asciidoctor.css b/src/main/docs/asciidoctor.css new file mode 100644 index 0000000..d919f85 --- /dev/null +++ b/src/main/docs/asciidoctor.css @@ -0,0 +1,407 @@ +/* Asciidoctor default stylesheet | MIT License | http://asciidoctor.org */ +/* Remove comment around @import statement below when using as a custom stylesheet */ +/*@import "https://fonts.googleapis.com/css?family=Open+Sans:300,300italic,400,400italic,600,600italic%7CNoto+Serif:400,400italic,700,700italic%7CDroid+Sans+Mono:400,700";*/ +article,aside,details,figcaption,figure,footer,header,hgroup,main,nav,section,summary{display:block} +audio,canvas,video{display:inline-block} +audio:not([controls]){display:none;height:0} +[hidden],template{display:none} +script{display:none!important} +html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%} +body{margin:0} +a{background:transparent} +a:focus{outline:thin dotted} +a:active,a:hover{outline:0} +h1{font-size:2em;margin:.67em 0} +abbr[title]{border-bottom:1px dotted} +b,strong{font-weight:bold} +dfn{font-style:italic} +hr{-moz-box-sizing:content-box;box-sizing:content-box;height:0} +mark{background:#ff0;color:#000} +code,kbd,pre,samp{font-family:monospace;font-size:1em} +pre{white-space:pre-wrap} +q{quotes:"\201C" "\201D" "\2018" "\2019"} +small{font-size:80%} +sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline} +sup{top:-.5em} +sub{bottom:-.25em} +img{border:0} +svg:not(:root){overflow:hidden} +figure{margin:0} +fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em} +legend{border:0;padding:0} +button,input,select,textarea{font-family:inherit;font-size:100%;margin:0} +button,input{line-height:normal} +button,select{text-transform:none} +button,html input[type="button"],input[type="reset"],input[type="submit"]{-webkit-appearance:button;cursor:pointer} +button[disabled],html input[disabled]{cursor:default} +input[type="checkbox"],input[type="radio"]{box-sizing:border-box;padding:0} +input[type="search"]{-webkit-appearance:textfield;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box} +input[type="search"]::-webkit-search-cancel-button,input[type="search"]::-webkit-search-decoration{-webkit-appearance:none} +button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0} +textarea{overflow:auto;vertical-align:top} +table{border-collapse:collapse;border-spacing:0} +*,*:before,*:after{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box} +html,body{font-size:100%} +body{background:#fff;color:rgba(0,0,0,.8);padding:0;margin:0;font-family:"Noto Serif","DejaVu Serif",serif;font-weight:400;font-style:normal;line-height:1;position:relative;cursor:auto} +a:hover{cursor:pointer} +img,object,embed{max-width:100%;height:auto} +object,embed{height:100%} +img{-ms-interpolation-mode:bicubic} +.left{float:left!important} +.right{float:right!important} +.text-left{text-align:left!important} +.text-right{text-align:right!important} +.text-center{text-align:center!important} +.text-justify{text-align:justify!important} +.hide{display:none} +body{-webkit-font-smoothing:antialiased} +img,object,svg{display:inline-block;vertical-align:middle} +textarea{height:auto;min-height:50px} +select{width:100%} +.center{margin-left:auto;margin-right:auto} +.spread{width:100%} +p.lead,.paragraph.lead>p,#preamble>.sectionbody>.paragraph:first-of-type p{font-size:1.21875em;line-height:1.6} +.subheader,.admonitionblock td.content>.title,.audioblock>.title,.exampleblock>.title,.imageblock>.title,.listingblock>.title,.literalblock>.title,.stemblock>.title,.openblock>.title,.paragraph>.title,.quoteblock>.title,table.tableblock>.title,.verseblock>.title,.videoblock>.title,.dlist>.title,.olist>.title,.ulist>.title,.qlist>.title,.hdlist>.title{line-height:1.45;color:#7a2518;font-weight:400;margin-top:0;margin-bottom:.25em} +div,dl,dt,dd,ul,ol,li,h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6,pre,form,p,blockquote,th,td{margin:0;padding:0;direction:ltr} +a{color:#2156a5;text-decoration:underline;line-height:inherit} +a:hover,a:focus{color:#1d4b8f} +a img{border:none} +p{font-family:inherit;font-weight:400;font-size:1em;line-height:1.6;margin-bottom:1.25em;text-rendering:optimizeLegibility} +p aside{font-size:.875em;line-height:1.35;font-style:italic} +h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6{font-family:"Open Sans","DejaVu Sans",sans-serif;font-weight:300;font-style:normal;color:#ba3925;text-rendering:optimizeLegibility;margin-top:1em;margin-bottom:.5em;line-height:1.0125em} +h1 small,h2 small,h3 small,#toctitle small,.sidebarblock>.content>.title small,h4 small,h5 small,h6 small{font-size:60%;color:#e99b8f;line-height:0} +h1{font-size:2.125em} +h2{font-size:1.6875em} +h3,#toctitle,.sidebarblock>.content>.title{font-size:1.375em} +h4,h5{font-size:1.125em} +h6{font-size:1em} +hr{border:solid #ddddd8;border-width:1px 0 0;clear:both;margin:1.25em 0 1.1875em;height:0} +em,i{font-style:italic;line-height:inherit} +strong,b{font-weight:bold;line-height:inherit} +small{font-size:60%;line-height:inherit} +code{font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;font-weight:400;color:rgba(0,0,0,.9)} +ul,ol,dl{font-size:1em;line-height:1.6;margin-bottom:1.25em;list-style-position:outside;font-family:inherit} +ul,ol,ul.no-bullet,ol.no-bullet{margin-left:1.5em} +ul li ul,ul li ol{margin-left:1.25em;margin-bottom:0;font-size:1em} +ul.square li ul,ul.circle li ul,ul.disc li ul{list-style:inherit} +ul.square{list-style-type:square} +ul.circle{list-style-type:circle} +ul.disc{list-style-type:disc} +ul.no-bullet{list-style:none} +ol li ul,ol li ol{margin-left:1.25em;margin-bottom:0} +dl dt{margin-bottom:.3125em;font-weight:bold} +dl dd{margin-bottom:1.25em} +abbr,acronym{text-transform:uppercase;font-size:90%;color:rgba(0,0,0,.8);border-bottom:1px dotted #ddd;cursor:help} +abbr{text-transform:none} +blockquote{margin:0 0 1.25em;padding:.5625em 1.25em 0 1.1875em;border-left:1px solid #ddd} +blockquote cite{display:block;font-size:.9375em;color:rgba(0,0,0,.6)} +blockquote cite:before{content:"\2014 \0020"} +blockquote cite a,blockquote cite a:visited{color:rgba(0,0,0,.6)} +blockquote,blockquote p{line-height:1.6;color:rgba(0,0,0,.85)} +@media only screen and (min-width:768px){h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6{line-height:1.2} +h1{font-size:2.75em} +h2{font-size:2.3125em} +h3,#toctitle,.sidebarblock>.content>.title{font-size:1.6875em} +h4{font-size:1.4375em}} +table{background:#fff;margin-bottom:1.25em;border:solid 1px #dedede} +table thead,table tfoot{background:#f7f8f7;font-weight:bold} +table thead tr th,table thead tr td,table tfoot tr th,table tfoot tr td{padding:.5em .625em .625em;font-size:inherit;color:rgba(0,0,0,.8);text-align:left} +table tr th,table tr td{padding:.5625em .625em;font-size:inherit;color:rgba(0,0,0,.8)} +table tr.even,table tr.alt,table tr:nth-of-type(even){background:#f8f8f7} +table thead tr th,table tfoot tr th,table tbody tr td,table tr td,table tfoot tr td{display:table-cell;line-height:1.6} +body{tab-size:4} +h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6{line-height:1.2;word-spacing:-.05em} +h1 strong,h2 strong,h3 strong,#toctitle strong,.sidebarblock>.content>.title strong,h4 strong,h5 strong,h6 strong{font-weight:400} +.clearfix:before,.clearfix:after,.float-group:before,.float-group:after{content:" ";display:table} +.clearfix:after,.float-group:after{clear:both} +*:not(pre)>code{font-size:.9375em;font-style:normal!important;letter-spacing:0;padding:.1em .5ex;word-spacing:-.15em;background-color:#f7f7f8;-webkit-border-radius:4px;border-radius:4px;line-height:1.45;text-rendering:optimizeSpeed} +pre,pre>code{line-height:1.45;color:rgba(0,0,0,.9);font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;font-weight:400;text-rendering:optimizeSpeed} +.keyseq{color:rgba(51,51,51,.8)} +kbd{font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;display:inline-block;color:rgba(0,0,0,.8);font-size:.65em;line-height:1.45;background-color:#f7f7f7;border:1px solid #ccc;-webkit-border-radius:3px;border-radius:3px;-webkit-box-shadow:0 1px 0 rgba(0,0,0,.2),0 0 0 .1em white inset;box-shadow:0 1px 0 rgba(0,0,0,.2),0 0 0 .1em #fff inset;margin:0 .15em;padding:.2em .5em;vertical-align:middle;position:relative;top:-.1em;white-space:nowrap} +.keyseq kbd:first-child{margin-left:0} +.keyseq kbd:last-child{margin-right:0} +.menuseq,.menu{color:rgba(0,0,0,.8)} +b.button:before,b.button:after{position:relative;top:-1px;font-weight:400} +b.button:before{content:"[";padding:0 3px 0 2px} +b.button:after{content:"]";padding:0 2px 0 3px} +p a>code:hover{color:rgba(0,0,0,.9)} +#header,#content,#footnotes,#footer{width:100%;margin-left:auto;margin-right:auto;margin-top:0;margin-bottom:0;max-width:62.5em;*zoom:1;position:relative;padding-left:.9375em;padding-right:.9375em} +#header:before,#header:after,#content:before,#content:after,#footnotes:before,#footnotes:after,#footer:before,#footer:after{content:" ";display:table} +#header:after,#content:after,#footnotes:after,#footer:after{clear:both} +#content{margin-top:1.25em} +#content:before{content:none} +#header>h1:first-child{color:rgba(0,0,0,.85);margin-top:2.25rem;margin-bottom:0} +#header>h1:first-child+#toc{margin-top:8px;border-top:1px solid #ddddd8} +#header>h1:only-child,body.toc2 #header>h1:nth-last-child(2){border-bottom:1px solid #ddddd8;padding-bottom:8px} +#header .details{border-bottom:1px solid #ddddd8;line-height:1.45;padding-top:.25em;padding-bottom:.25em;padding-left:.25em;color:rgba(0,0,0,.6);display:-ms-flexbox;display:-webkit-flex;display:flex;-ms-flex-flow:row wrap;-webkit-flex-flow:row wrap;flex-flow:row wrap} +#header .details span:first-child{margin-left:-.125em} +#header .details span.email a{color:rgba(0,0,0,.85)} +#header .details br{display:none} +#header .details br+span:before{content:"\00a0\2013\00a0"} +#header .details br+span.author:before{content:"\00a0\22c5\00a0";color:rgba(0,0,0,.85)} +#header .details br+span#revremark:before{content:"\00a0|\00a0"} +#header #revnumber{text-transform:capitalize} +#header #revnumber:after{content:"\00a0"} +#content>h1:first-child:not([class]){color:rgba(0,0,0,.85);border-bottom:1px solid #ddddd8;padding-bottom:8px;margin-top:0;padding-top:1rem;margin-bottom:1.25rem} +#toc{border-bottom:1px solid #efefed;padding-bottom:.5em} +#toc>ul{margin-left:.125em} +#toc ul.sectlevel0>li>a{font-style:italic} +#toc ul.sectlevel0 ul.sectlevel1{margin:.5em 0} +#toc ul{font-family:"Open Sans","DejaVu Sans",sans-serif;list-style-type:none} +#toc li{line-height:1.3334;margin-top:.3334em} +#toc a{text-decoration:none} +#toc a:active{text-decoration:underline} +#toctitle{color:#7a2518;font-size:1.2em} +@media only screen and (min-width:768px){#toctitle{font-size:1.375em} +body.toc2{padding-left:15em;padding-right:0} +#toc.toc2{margin-top:0!important;background-color:#f8f8f7;position:fixed;width:15em;left:0;top:0;border-right:1px solid #efefed;border-top-width:0!important;border-bottom-width:0!important;z-index:1000;padding:1.25em 1em;height:100%;overflow:auto} +#toc.toc2 #toctitle{margin-top:0;margin-bottom:.8rem;font-size:1.2em} +#toc.toc2>ul{font-size:.9em;margin-bottom:0} +#toc.toc2 ul ul{margin-left:0;padding-left:1em} +#toc.toc2 ul.sectlevel0 ul.sectlevel1{padding-left:0;margin-top:.5em;margin-bottom:.5em} +body.toc2.toc-right{padding-left:0;padding-right:15em} +body.toc2.toc-right #toc.toc2{border-right-width:0;border-left:1px solid #efefed;left:auto;right:0}} +@media only screen and (min-width:1280px){body.toc2{padding-left:20em;padding-right:0} +#toc.toc2{width:20em} +#toc.toc2 #toctitle{font-size:1.375em} +#toc.toc2>ul{font-size:.95em} +#toc.toc2 ul ul{padding-left:1.25em} +body.toc2.toc-right{padding-left:0;padding-right:20em}} +#content #toc{border-style:solid;border-width:1px;border-color:#e0e0dc;margin-bottom:1.25em;padding:1.25em;background:#f8f8f7;-webkit-border-radius:4px;border-radius:4px} +#content #toc>:first-child{margin-top:0} +#content #toc>:last-child{margin-bottom:0} +#footer{max-width:100%;background-color:rgba(0,0,0,.8);padding:1.25em} +#footer-text{color:rgba(255,255,255,.8);line-height:1.44} +.sect1{padding-bottom:.625em} +@media only screen and (min-width:768px){.sect1{padding-bottom:1.25em}} +.sect1+.sect1{border-top:1px solid #efefed} +#content h1>a.anchor,h2>a.anchor,h3>a.anchor,#toctitle>a.anchor,.sidebarblock>.content>.title>a.anchor,h4>a.anchor,h5>a.anchor,h6>a.anchor{position:absolute;z-index:1001;width:1.5ex;margin-left:-1.5ex;display:block;text-decoration:none!important;visibility:hidden;text-align:center;font-weight:400} +#content h1>a.anchor:before,h2>a.anchor:before,h3>a.anchor:before,#toctitle>a.anchor:before,.sidebarblock>.content>.title>a.anchor:before,h4>a.anchor:before,h5>a.anchor:before,h6>a.anchor:before{content:"\00A7";font-size:.85em;display:block;padding-top:.1em} +#content h1:hover>a.anchor,#content h1>a.anchor:hover,h2:hover>a.anchor,h2>a.anchor:hover,h3:hover>a.anchor,#toctitle:hover>a.anchor,.sidebarblock>.content>.title:hover>a.anchor,h3>a.anchor:hover,#toctitle>a.anchor:hover,.sidebarblock>.content>.title>a.anchor:hover,h4:hover>a.anchor,h4>a.anchor:hover,h5:hover>a.anchor,h5>a.anchor:hover,h6:hover>a.anchor,h6>a.anchor:hover{visibility:visible} +#content h1>a.link,h2>a.link,h3>a.link,#toctitle>a.link,.sidebarblock>.content>.title>a.link,h4>a.link,h5>a.link,h6>a.link{color:#ba3925;text-decoration:none} +#content h1>a.link:hover,h2>a.link:hover,h3>a.link:hover,#toctitle>a.link:hover,.sidebarblock>.content>.title>a.link:hover,h4>a.link:hover,h5>a.link:hover,h6>a.link:hover{color:#a53221} +.audioblock,.imageblock,.literalblock,.listingblock,.stemblock,.videoblock{margin-bottom:1.25em} +.admonitionblock td.content>.title,.audioblock>.title,.exampleblock>.title,.imageblock>.title,.listingblock>.title,.literalblock>.title,.stemblock>.title,.openblock>.title,.paragraph>.title,.quoteblock>.title,table.tableblock>.title,.verseblock>.title,.videoblock>.title,.dlist>.title,.olist>.title,.ulist>.title,.qlist>.title,.hdlist>.title{text-rendering:optimizeLegibility;text-align:left;font-family:"Noto Serif","DejaVu Serif",serif;font-size:1rem;font-style:italic} +table.tableblock>caption.title{white-space:nowrap;overflow:visible;max-width:0} +.paragraph.lead>p,#preamble>.sectionbody>.paragraph:first-of-type p{color:rgba(0,0,0,.85)} +table.tableblock #preamble>.sectionbody>.paragraph:first-of-type p{font-size:inherit} +.admonitionblock>table{border-collapse:separate;border:0;background:none;width:100%} +.admonitionblock>table td.icon{text-align:center;width:80px} +.admonitionblock>table td.icon img{max-width:none} +.admonitionblock>table td.icon .title{font-weight:bold;font-family:"Open Sans","DejaVu Sans",sans-serif;text-transform:uppercase} +.admonitionblock>table td.content{padding-left:1.125em;padding-right:1.25em;border-left:1px solid #ddddd8;color:rgba(0,0,0,.6)} +.admonitionblock>table td.content>:last-child>:last-child{margin-bottom:0} +.exampleblock>.content{border-style:solid;border-width:1px;border-color:#e6e6e6;margin-bottom:1.25em;padding:1.25em;background:#fff;-webkit-border-radius:4px;border-radius:4px} +.exampleblock>.content>:first-child{margin-top:0} +.exampleblock>.content>:last-child{margin-bottom:0} +.sidebarblock{border-style:solid;border-width:1px;border-color:#e0e0dc;margin-bottom:1.25em;padding:1.25em;background:#f8f8f7;-webkit-border-radius:4px;border-radius:4px} +.sidebarblock>:first-child{margin-top:0} +.sidebarblock>:last-child{margin-bottom:0} +.sidebarblock>.content>.title{color:#7a2518;margin-top:0;text-align:center} +.exampleblock>.content>:last-child>:last-child,.exampleblock>.content .olist>ol>li:last-child>:last-child,.exampleblock>.content .ulist>ul>li:last-child>:last-child,.exampleblock>.content .qlist>ol>li:last-child>:last-child,.sidebarblock>.content>:last-child>:last-child,.sidebarblock>.content .olist>ol>li:last-child>:last-child,.sidebarblock>.content .ulist>ul>li:last-child>:last-child,.sidebarblock>.content .qlist>ol>li:last-child>:last-child{margin-bottom:0} +.literalblock pre,.listingblock pre:not(.highlight),.listingblock pre[class="highlight"],.listingblock pre[class^="highlight "],.listingblock pre.CodeRay,.listingblock pre.prettyprint{background:#f7f7f8} +.sidebarblock .literalblock pre,.sidebarblock .listingblock pre:not(.highlight),.sidebarblock .listingblock pre[class="highlight"],.sidebarblock .listingblock pre[class^="highlight "],.sidebarblock .listingblock pre.CodeRay,.sidebarblock .listingblock pre.prettyprint{background:#f2f1f1} +.literalblock pre,.literalblock pre[class],.listingblock pre,.listingblock pre[class]{-webkit-border-radius:4px;border-radius:4px;word-wrap:break-word;padding:1em;font-size:.8125em} +.literalblock pre.nowrap,.literalblock pre[class].nowrap,.listingblock pre.nowrap,.listingblock pre[class].nowrap{overflow-x:auto;white-space:pre;word-wrap:normal} +@media only screen and (min-width:768px){.literalblock pre,.literalblock pre[class],.listingblock pre,.listingblock pre[class]{font-size:.90625em}} +@media only screen and (min-width:1280px){.literalblock pre,.literalblock pre[class],.listingblock pre,.listingblock pre[class]{font-size:1em}} +.literalblock.output pre{color:#f7f7f8;background-color:rgba(0,0,0,.9)} +.listingblock pre.highlightjs{padding:0} +.listingblock pre.highlightjs>code{padding:1em;-webkit-border-radius:4px;border-radius:4px} +.listingblock pre.prettyprint{border-width:0} +.listingblock>.content{position:relative} +.listingblock code[data-lang]:before{display:none;content:attr(data-lang);position:absolute;font-size:.75em;top:.425rem;right:.5rem;line-height:1;text-transform:uppercase;color:#999} +.listingblock:hover code[data-lang]:before{display:block} +.listingblock.terminal pre .command:before{content:attr(data-prompt);padding-right:.5em;color:#999} +.listingblock.terminal pre .command:not([data-prompt]):before{content:"$"} +table.pyhltable{border-collapse:separate;border:0;margin-bottom:0;background:none} +table.pyhltable td{vertical-align:top;padding-top:0;padding-bottom:0;line-height:1.45} +table.pyhltable td.code{padding-left:.75em;padding-right:0} +pre.pygments .lineno,table.pyhltable td:not(.code){color:#999;padding-left:0;padding-right:.5em;border-right:1px solid #ddddd8} +pre.pygments .lineno{display:inline-block;margin-right:.25em} +table.pyhltable .linenodiv{background:none!important;padding-right:0!important} +.quoteblock{margin:0 1em 1.25em 1.5em;display:table} +.quoteblock>.title{margin-left:-1.5em;margin-bottom:.75em} +.quoteblock blockquote,.quoteblock blockquote p{color:rgba(0,0,0,.85);font-size:1.15rem;line-height:1.75;word-spacing:.1em;letter-spacing:0;font-style:italic;text-align:justify} +.quoteblock blockquote{margin:0;padding:0;border:0} +.quoteblock blockquote:before{content:"\201c";float:left;font-size:2.75em;font-weight:bold;line-height:.6em;margin-left:-.6em;color:#7a2518;text-shadow:0 1px 2px rgba(0,0,0,.1)} +.quoteblock blockquote>.paragraph:last-child p{margin-bottom:0} +.quoteblock .attribution{margin-top:.5em;margin-right:.5ex;text-align:right} +.quoteblock .quoteblock{margin-left:0;margin-right:0;padding:.5em 0;border-left:3px solid rgba(0,0,0,.6)} +.quoteblock .quoteblock blockquote{padding:0 0 0 .75em} +.quoteblock .quoteblock blockquote:before{display:none} +.verseblock{margin:0 1em 1.25em 1em} +.verseblock pre{font-family:"Open Sans","DejaVu Sans",sans;font-size:1.15rem;color:rgba(0,0,0,.85);font-weight:300;text-rendering:optimizeLegibility} +.verseblock pre strong{font-weight:400} +.verseblock .attribution{margin-top:1.25rem;margin-left:.5ex} +.quoteblock .attribution,.verseblock .attribution{font-size:.9375em;line-height:1.45;font-style:italic} +.quoteblock .attribution br,.verseblock .attribution br{display:none} +.quoteblock .attribution cite,.verseblock .attribution cite{display:block;letter-spacing:-.025em;color:rgba(0,0,0,.6)} +.quoteblock.abstract{margin:0 0 1.25em 0;display:block} +.quoteblock.abstract blockquote,.quoteblock.abstract blockquote p{text-align:left;word-spacing:0} +.quoteblock.abstract blockquote:before,.quoteblock.abstract blockquote p:first-of-type:before{display:none} +table.tableblock{max-width:100%;border-collapse:separate} +table.tableblock td>.paragraph:last-child p>p:last-child,table.tableblock th>p:last-child,table.tableblock td>p:last-child{margin-bottom:0} +table.tableblock,th.tableblock,td.tableblock{border:0 solid #dedede} +table.grid-all th.tableblock,table.grid-all td.tableblock{border-width:0 1px 1px 0} +table.grid-all tfoot>tr>th.tableblock,table.grid-all tfoot>tr>td.tableblock{border-width:1px 1px 0 0} +table.grid-cols th.tableblock,table.grid-cols td.tableblock{border-width:0 1px 0 0} +table.grid-all *>tr>.tableblock:last-child,table.grid-cols *>tr>.tableblock:last-child{border-right-width:0} +table.grid-rows th.tableblock,table.grid-rows td.tableblock{border-width:0 0 1px 0} +table.grid-all tbody>tr:last-child>th.tableblock,table.grid-all tbody>tr:last-child>td.tableblock,table.grid-all thead:last-child>tr>th.tableblock,table.grid-rows tbody>tr:last-child>th.tableblock,table.grid-rows tbody>tr:last-child>td.tableblock,table.grid-rows thead:last-child>tr>th.tableblock{border-bottom-width:0} +table.grid-rows tfoot>tr>th.tableblock,table.grid-rows tfoot>tr>td.tableblock{border-width:1px 0 0 0} +table.frame-all{border-width:1px} +table.frame-sides{border-width:0 1px} +table.frame-topbot{border-width:1px 0} +th.halign-left,td.halign-left{text-align:left} +th.halign-right,td.halign-right{text-align:right} +th.halign-center,td.halign-center{text-align:center} +th.valign-top,td.valign-top{vertical-align:top} +th.valign-bottom,td.valign-bottom{vertical-align:bottom} +th.valign-middle,td.valign-middle{vertical-align:middle} +table thead th,table tfoot th{font-weight:bold} +tbody tr th{display:table-cell;line-height:1.6;background:#f7f8f7} +tbody tr th,tbody tr th p,tfoot tr th,tfoot tr th p{color:rgba(0,0,0,.8);font-weight:bold} +p.tableblock>code:only-child{background:none;padding:0} +p.tableblock{font-size:1em} +td>div.verse{white-space:pre} +ol{margin-left:1.75em} +ul li ol{margin-left:1.5em} +dl dd{margin-left:1.125em} +dl dd:last-child,dl dd:last-child>:last-child{margin-bottom:0} +ol>li p,ul>li p,ul dd,ol dd,.olist .olist,.ulist .ulist,.ulist .olist,.olist .ulist{margin-bottom:.625em} +ul.unstyled,ol.unnumbered,ul.checklist,ul.none{list-style-type:none} +ul.unstyled,ol.unnumbered,ul.checklist{margin-left:.625em} +ul.checklist li>p:first-child>.fa-square-o:first-child,ul.checklist li>p:first-child>.fa-check-square-o:first-child{width:1em;font-size:.85em} +ul.checklist li>p:first-child>input[type="checkbox"]:first-child{width:1em;position:relative;top:1px} +ul.inline{margin:0 auto .625em auto;margin-left:-1.375em;margin-right:0;padding:0;list-style:none;overflow:hidden} +ul.inline>li{list-style:none;float:left;margin-left:1.375em;display:block} +ul.inline>li>*{display:block} +.unstyled dl dt{font-weight:400;font-style:normal} +ol.arabic{list-style-type:decimal} +ol.decimal{list-style-type:decimal-leading-zero} +ol.loweralpha{list-style-type:lower-alpha} +ol.upperalpha{list-style-type:upper-alpha} +ol.lowerroman{list-style-type:lower-roman} +ol.upperroman{list-style-type:upper-roman} +ol.lowergreek{list-style-type:lower-greek} +.hdlist>table,.colist>table{border:0;background:none} +.hdlist>table>tbody>tr,.colist>table>tbody>tr{background:none} +td.hdlist1,td.hdlist2{vertical-align:top;padding:0 .625em} +td.hdlist1{font-weight:bold;padding-bottom:1.25em} +.literalblock+.colist,.listingblock+.colist{margin-top:-.5em} +.colist>table tr>td:first-of-type{padding:0 .75em;line-height:1} +.colist>table tr>td:last-of-type{padding:.25em 0} +.thumb,.th{line-height:0;display:inline-block;border:solid 4px #fff;-webkit-box-shadow:0 0 0 1px #ddd;box-shadow:0 0 0 1px #ddd} +.imageblock.left,.imageblock[style*="float: left"]{margin:.25em .625em 1.25em 0} +.imageblock.right,.imageblock[style*="float: right"]{margin:.25em 0 1.25em .625em} +.imageblock>.title{margin-bottom:0} +.imageblock.thumb,.imageblock.th{border-width:6px} +.imageblock.thumb>.title,.imageblock.th>.title{padding:0 .125em} +.image.left,.image.right{margin-top:.25em;margin-bottom:.25em;display:inline-block;line-height:0} +.image.left{margin-right:.625em} +.image.right{margin-left:.625em} +a.image{text-decoration:none;display:inline-block} +a.image object{pointer-events:none} +sup.footnote,sup.footnoteref{font-size:.875em;position:static;vertical-align:super} +sup.footnote a,sup.footnoteref a{text-decoration:none} +sup.footnote a:active,sup.footnoteref a:active{text-decoration:underline} +#footnotes{padding-top:.75em;padding-bottom:.75em;margin-bottom:.625em} +#footnotes hr{width:20%;min-width:6.25em;margin:-.25em 0 .75em 0;border-width:1px 0 0 0} +#footnotes .footnote{padding:0 .375em 0 .225em;line-height:1.3334;font-size:.875em;margin-left:1.2em;text-indent:-1.05em;margin-bottom:.2em} +#footnotes .footnote a:first-of-type{font-weight:bold;text-decoration:none} +#footnotes .footnote:last-of-type{margin-bottom:0} +#content #footnotes{margin-top:-.625em;margin-bottom:0;padding:.75em 0} +.gist .file-data>table{border:0;background:#fff;width:100%;margin-bottom:0} +.gist .file-data>table td.line-data{width:99%} +div.unbreakable{page-break-inside:avoid} +.big{font-size:larger} +.small{font-size:smaller} +.underline{text-decoration:underline} +.overline{text-decoration:overline} +.line-through{text-decoration:line-through} +.aqua{color:#00bfbf} +.aqua-background{background-color:#00fafa} +.black{color:#000} +.black-background{background-color:#000} +.blue{color:#0000bf} +.blue-background{background-color:#0000fa} +.fuchsia{color:#bf00bf} +.fuchsia-background{background-color:#fa00fa} +.gray{color:#606060} +.gray-background{background-color:#7d7d7d} +.green{color:#006000} +.green-background{background-color:#007d00} +.lime{color:#00bf00} +.lime-background{background-color:#00fa00} +.maroon{color:#600000} +.maroon-background{background-color:#7d0000} +.navy{color:#000060} +.navy-background{background-color:#00007d} +.olive{color:#606000} +.olive-background{background-color:#7d7d00} +.purple{color:#600060} +.purple-background{background-color:#7d007d} +.red{color:#bf0000} +.red-background{background-color:#fa0000} +.silver{color:#909090} +.silver-background{background-color:#bcbcbc} +.teal{color:#006060} +.teal-background{background-color:#007d7d} +.white{color:#bfbfbf} +.white-background{background-color:#fafafa} +.yellow{color:#bfbf00} +.yellow-background{background-color:#fafa00} +span.icon>.fa{cursor:default} +.admonitionblock td.icon [class^="fa icon-"]{font-size:2.5em;text-shadow:1px 1px 2px rgba(0,0,0,.5);cursor:default} +.admonitionblock td.icon .icon-note:before{content:"\f05a";color:#19407c} +.admonitionblock td.icon .icon-tip:before{content:"\f0eb";text-shadow:1px 1px 2px rgba(155,155,0,.8);color:#111} +.admonitionblock td.icon .icon-warning:before{content:"\f071";color:#bf6900} +.admonitionblock td.icon .icon-caution:before{content:"\f06d";color:#bf3400} +.admonitionblock td.icon .icon-important:before{content:"\f06a";color:#bf0000} +.conum[data-value]{display:inline-block;color:#fff!important;background-color:rgba(0,0,0,.8);-webkit-border-radius:100px;border-radius:100px;text-align:center;font-size:.75em;width:1.67em;height:1.67em;line-height:1.67em;font-family:"Open Sans","DejaVu Sans",sans-serif;font-style:normal;font-weight:bold} +.conum[data-value] *{color:#fff!important} +.conum[data-value]+b{display:none} +.conum[data-value]:after{content:attr(data-value)} +pre .conum[data-value]{position:relative;top:-.125em} +b.conum *{color:inherit!important} +.conum:not([data-value]):empty{display:none} +dt,th.tableblock,td.content,div.footnote{text-rendering:optimizeLegibility} +h1,h2,p,td.content,span.alt{letter-spacing:-.01em} +p strong,td.content strong,div.footnote strong{letter-spacing:-.005em} +p,blockquote,dt,td.content,span.alt{font-size:1.0625rem} +p{margin-bottom:1.25rem} +.sidebarblock p,.sidebarblock dt,.sidebarblock td.content,p.tableblock{font-size:1em} +.exampleblock>.content{background-color:#fffef7;border-color:#e0e0dc;-webkit-box-shadow:0 1px 4px #e0e0dc;box-shadow:0 1px 4px #e0e0dc} +.print-only{display:none!important} +@media print{@page{margin:1.25cm .75cm} +*{-webkit-box-shadow:none!important;box-shadow:none!important;text-shadow:none!important} +a{color:inherit!important;text-decoration:underline!important} +a.bare,a[href^="#"],a[href^="mailto:"]{text-decoration:none!important} +a[href^="http:"]:not(.bare):after,a[href^="https:"]:not(.bare):after{content:"(" attr(href) ")";display:inline-block;font-size:.875em;padding-left:.25em} +abbr[title]:after{content:" (" attr(title) ")"} +pre,blockquote,tr,img,object,svg{page-break-inside:avoid} +thead{display:table-header-group} +svg{max-width:100%} +p,blockquote,dt,td.content{font-size:1em;orphans:3;widows:3} +h2,h3,#toctitle,.sidebarblock>.content>.title{page-break-after:avoid} +#toc,.sidebarblock,.exampleblock>.content{background:none!important} +#toc{border-bottom:1px solid #ddddd8!important;padding-bottom:0!important} +.sect1{padding-bottom:0!important} +.sect1+.sect1{border:0!important} +#header>h1:first-child{margin-top:1.25rem} +body.book #header{text-align:center} +body.book #header>h1:first-child{border:0!important;margin:2.5em 0 1em 0} +body.book #header .details{border:0!important;display:block;padding:0!important} +body.book #header .details span:first-child{margin-left:0!important} +body.book #header .details br{display:block} +body.book #header .details br+span:before{content:none!important} +body.book #toc{border:0!important;text-align:left!important;padding:0!important;margin:0!important} +body.book #toc,body.book #preamble,body.book h1.sect0,body.book .sect1>h2{page-break-before:always} +.listingblock code[data-lang]:before{display:block} +#footer{background:none!important;padding:0 .9375em} +#footer-text{color:rgba(0,0,0,.6)!important;font-size:.9em} +.hide-on-print{display:none!important} +.print-only{display:block!important} +.hide-for-print{display:none!important} +.show-for-print{display:inherit!important}} \ No newline at end of file diff --git a/src/main/docs/hbase.css b/src/main/docs/hbase.css new file mode 100644 index 0000000..68d418b --- /dev/null +++ b/src/main/docs/hbase.css @@ -0,0 +1,400 @@ +/* Asciidoctor default stylesheet | MIT License | http://asciidoctor.org */ +/* Remove the comments around the @import statement below when using this as a custom stylesheet */ +/*@import "https://fonts.googleapis.com/css?family=Open+Sans:300,300italic,400,400italic,600,600italic%7CNoto+Serif:400,400italic,700,700italic%7CDroid+Sans+Mono:400";*/ +article,aside,details,figcaption,figure,footer,header,hgroup,main,nav,section,summary{display:block} +audio,canvas,video{display:inline-block} +audio:not([controls]){display:none;height:0} +[hidden],template{display:none} +script{display:none!important} +html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%} +body{margin:0} +a{background:transparent} +a:focus{outline:thin dotted} +a:active,a:hover{outline:0} +h1{font-size:2em;margin:.67em 0} +abbr[title]{border-bottom:1px dotted} +b,strong{font-weight:bold} +dfn{font-style:italic} +hr{-moz-box-sizing:content-box;box-sizing:content-box;height:0} +mark{background:#ff0;color:#000} +code,kbd,pre,samp{font-family:monospace;font-size:1em} +pre{white-space:pre-wrap} +q{quotes:"\201C" "\201D" "\2018" "\2019"} +small{font-size:80%} +sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline} +sup{top:-.5em} +sub{bottom:-.25em} +img{border:0} +svg:not(:root){overflow:hidden} +figure{margin:0} +fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em} +legend{border:0;padding:0} +button,input,select,textarea{font-family:inherit;font-size:100%;margin:0} +button,input{line-height:normal} +button,select{text-transform:none} +button,html input[type="button"],input[type="reset"],input[type="submit"]{-webkit-appearance:button;cursor:pointer} +button[disabled],html input[disabled]{cursor:default} +input[type="checkbox"],input[type="radio"]{box-sizing:border-box;padding:0} +input[type="search"]{-webkit-appearance:textfield;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box} +input[type="search"]::-webkit-search-cancel-button,input[type="search"]::-webkit-search-decoration{-webkit-appearance:none} +button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0} +textarea{overflow:auto;vertical-align:top} +table{border-collapse:collapse;border-spacing:0} +*,*:before,*:after{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box} +html,body{font-size:100%} +body{background:#fff;color:rgba(0,0,0,.8);padding:0;margin:0;font-family:"Noto Serif","DejaVu Serif",serif;font-weight:400;font-style:normal;line-height:1;position:relative;cursor:auto} +a:hover{cursor:pointer} +img,object,embed{max-width:100%;height:auto} +object,embed{height:100%} +img{-ms-interpolation-mode:bicubic} +#map_canvas img,#map_canvas embed,#map_canvas object,.map_canvas img,.map_canvas embed,.map_canvas object{max-width:none!important} +.left{float:left!important} +.right{float:right!important} +.text-left{text-align:left!important} +.text-right{text-align:right!important} +.text-center{text-align:center!important} +.text-justify{text-align:justify!important} +.hide{display:none} +.antialiased,body{-webkit-font-smoothing:antialiased} +img{display:inline-block;vertical-align:middle} +textarea{height:auto;min-height:50px} +select{width:100%} +p.lead,.paragraph.lead>p,#preamble>.sectionbody>.paragraph:first-of-type p{font-size:1.21875em;line-height:1.6} +.subheader,.admonitionblock td.content>.title,.audioblock>.title,.exampleblock>.title,.imageblock>.title,.listingblock>.title,.literalblock>.title,.stemblock>.title,.openblock>.title,.paragraph>.title,.quoteblock>.title,table.tableblock>.title,.verseblock>.title,.videoblock>.title,.dlist>.title,.olist>.title,.ulist>.title,.qlist>.title,.hdlist>.title{line-height:1.45;color:#7a2518;font-weight:400;margin-top:0;margin-bottom:.25em} +div,dl,dt,dd,ul,ol,li,h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6,pre,form,p,blockquote,th,td{margin:0;padding:0;direction:ltr} +a{color:#2156a5;text-decoration:underline;line-height:inherit} +a:hover,a:focus{color:#1d4b8f} +a img{border:none} +p{font-family:inherit;font-weight:400;font-size:1em;line-height:1.6;margin-bottom:1.25em;text-rendering:optimizeLegibility} +p aside{font-size:.875em;line-height:1.35;font-style:italic} +h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6{font-family:"Open Sans","DejaVu Sans",sans-serif;font-weight:300;font-style:normal;color:#990000;text-rendering:optimizeLegibility;margin-top:1em;margin-bottom:.5em;line-height:1.0125em} +h1 small,h2 small,h3 small,#toctitle small,.sidebarblock>.content>.title small,h4 small,h5 small,h6 small{font-size:60%;color:#e99b8f;line-height:0} +h1{font-size:2.125em} +h2{font-size:1.6875em} +h3,#toctitle,.sidebarblock>.content>.title{font-size:1.375em} +h4,h5{font-size:1.125em} +h6{font-size:1em} +hr{border:solid #ddddd8;border-width:1px 0 0;clear:both;margin:1.25em 0 1.1875em;height:0} +em,i{font-style:italic;line-height:inherit} +strong,b{font-weight:bold;line-height:inherit} +small{font-size:60%;line-height:inherit} +code{font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;font-weight:400;color:rgba(0,0,0,.9)} +ul,ol,dl{font-size:1em;line-height:1.6;margin-bottom:1.25em;list-style-position:outside;font-family:inherit} +ul,ol,ul.no-bullet,ol.no-bullet{margin-left:1.5em} +ul li ul,ul li ol{margin-left:1.25em;margin-bottom:0;font-size:1em} +ul.square li ul,ul.circle li ul,ul.disc li ul{list-style:inherit} +ul.square{list-style-type:square} +ul.circle{list-style-type:circle} +ul.disc{list-style-type:disc} +ul.no-bullet{list-style:none} +ol li ul,ol li ol{margin-left:1.25em;margin-bottom:0} +dl dt{margin-bottom:.3125em;font-weight:bold} +dl dd{margin-bottom:1.25em} +abbr,acronym{text-transform:uppercase;font-size:90%;color:rgba(0,0,0,.8);border-bottom:1px dotted #ddd;cursor:help} +abbr{text-transform:none} +blockquote{margin:0 0 1.25em;padding:.5625em 1.25em 0 1.1875em;border-left:1px solid #ddd} +blockquote cite{display:block;font-size:.9375em;color:rgba(0,0,0,.6)} +blockquote cite:before{content:"\2014 \0020"} +blockquote cite a,blockquote cite a:visited{color:rgba(0,0,0,.6)} +blockquote,blockquote p{line-height:1.6;color:rgba(0,0,0,.85)} +@media only screen and (min-width:768px){h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6{line-height:1.2} +h1{font-size:2.75em} +h2{font-size:2.3125em} +h3,#toctitle,.sidebarblock>.content>.title{font-size:1.6875em} +h4{font-size:1.4375em}}table{background:#fff;margin-bottom:1.25em;border:solid 1px #dedede} +table thead,table tfoot{background:#f7f8f7;font-weight:bold} +table thead tr th,table thead tr td,table tfoot tr th,table tfoot tr td{padding:.5em .625em .625em;font-size:inherit;color:rgba(0,0,0,.8);text-align:left} +table tr th,table tr td{padding:.5625em .625em;font-size:inherit;color:rgba(0,0,0,.8)} +table tr.even,table tr.alt,table tr:nth-of-type(even){background:#f8f8f7} +table thead tr th,table tfoot tr th,table tbody tr td,table tr td,table tfoot tr td{display:table-cell;line-height:1.6} +h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6{line-height:1.2;word-spacing:-.05em} +h1 strong,h2 strong,h3 strong,#toctitle strong,.sidebarblock>.content>.title strong,h4 strong,h5 strong,h6 strong{font-weight:400} +.clearfix:before,.clearfix:after,.float-group:before,.float-group:after{content:" ";display:table} +.clearfix:after,.float-group:after{clear:both} +*:not(pre)>code{font-size:.9375em;font-style:normal!important;letter-spacing:0;padding:.1em .5ex;word-spacing:-.15em;background-color:#f7f7f8;-webkit-border-radius:4px;border-radius:4px;line-height:1.45;text-rendering:optimizeSpeed} +pre,pre>code{line-height:1.45;color:rgba(0,0,0,.9);font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;font-weight:400;text-rendering:optimizeSpeed} +.keyseq{color:rgba(51,51,51,.8)} +kbd{display:inline-block;color:rgba(0,0,0,.8);font-size:.75em;line-height:1.4;background-color:#f7f7f7;border:1px solid #ccc;-webkit-border-radius:3px;border-radius:3px;-webkit-box-shadow:0 1px 0 rgba(0,0,0,.2),0 0 0 .1em white inset;box-shadow:0 1px 0 rgba(0,0,0,.2),0 0 0 .1em #fff inset;margin:-.15em .15em 0 .15em;padding:.2em .6em .2em .5em;vertical-align:middle;white-space:nowrap} +.keyseq kbd:first-child{margin-left:0} +.keyseq kbd:last-child{margin-right:0} +.menuseq,.menu{color:rgba(0,0,0,.8)} +b.button:before,b.button:after{position:relative;top:-1px;font-weight:400} +b.button:before{content:"[";padding:0 3px 0 2px} +b.button:after{content:"]";padding:0 2px 0 3px} +p a>code:hover{color:rgba(0,0,0,.9)} +#header,#content,#footnotes,#footer{width:100%;margin-left:auto;margin-right:auto;margin-top:0;margin-bottom:0;max-width:62.5em;*zoom:1;position:relative;padding-left:.9375em;padding-right:.9375em} +#header:before,#header:after,#content:before,#content:after,#footnotes:before,#footnotes:after,#footer:before,#footer:after{content:" ";display:table} +#header:after,#content:after,#footnotes:after,#footer:after{clear:both} +#content{margin-top:1.25em} +#content:before{content:none} +#header>h1:first-child{color:rgba(0,0,0,.85);margin-top:2.25rem;margin-bottom:0} +#header>h1:first-child+#toc{margin-top:8px;border-top:1px solid #ddddd8} +#header>h1:only-child,body.toc2 #header>h1:nth-last-child(2){border-bottom:1px solid #ddddd8;padding-bottom:8px} +#header .details{border-bottom:1px solid #ddddd8;line-height:1.45;padding-top:.25em;padding-bottom:.25em;padding-left:.25em;color:rgba(0,0,0,.6);display:-ms-flexbox;display:-webkit-flex;display:flex;-ms-flex-flow:row wrap;-webkit-flex-flow:row wrap;flex-flow:row wrap} +#header .details span:first-child{margin-left:-.125em} +#header .details span.email a{color:rgba(0,0,0,.85)} +#header .details br{display:none} +#header .details br+span:before{content:"\00a0\2013\00a0"} +#header .details br+span.author:before{content:"\00a0\22c5\00a0";color:rgba(0,0,0,.85)} +#header .details br+span#revremark:before{content:"\00a0|\00a0"} +#header #revnumber{text-transform:capitalize} +#header #revnumber:after{content:"\00a0"} +#content>h1:first-child:not([class]){color:rgba(0,0,0,.85);border-bottom:1px solid #ddddd8;padding-bottom:8px;margin-top:0;padding-top:1rem;margin-bottom:1.25rem} +#toc{border-bottom:1px solid #efefed;padding-bottom:.5em} +#toc>ul{margin-left:.125em} +#toc ul.sectlevel0>li>a{font-style:italic} +#toc ul.sectlevel0 ul.sectlevel1{margin:.5em 0} +#toc ul{font-family:"Open Sans","DejaVu Sans",sans-serif;list-style-type:none} +#toc a{text-decoration:none} +#toc a:active{text-decoration:underline} +#toctitle{color:#7a2518;font-size:1.2em} +@media only screen and (min-width:768px){#toctitle{font-size:1.375em} +body.toc2{padding-left:15em;padding-right:0} +#toc.toc2{margin-top:0!important;background-color:#f8f8f7;position:fixed;width:15em;left:0;top:0;border-right:1px solid #efefed;border-top-width:0!important;border-bottom-width:0!important;z-index:1000;padding:1.25em 1em;height:100%;overflow:auto} +#toc.toc2 #toctitle{margin-top:0;font-size:1.2em} +#toc.toc2>ul{font-size:.9em;margin-bottom:0} +#toc.toc2 ul ul{margin-left:0;padding-left:1em} +#toc.toc2 ul.sectlevel0 ul.sectlevel1{padding-left:0;margin-top:.5em;margin-bottom:.5em} +body.toc2.toc-right{padding-left:0;padding-right:15em} +body.toc2.toc-right #toc.toc2{border-right-width:0;border-left:1px solid #efefed;left:auto;right:0}}@media only screen and (min-width:1280px){body.toc2{padding-left:20em;padding-right:0} +#toc.toc2{width:20em} +#toc.toc2 #toctitle{font-size:1.375em} +#toc.toc2>ul{font-size:.95em} +#toc.toc2 ul ul{padding-left:1.25em} +body.toc2.toc-right{padding-left:0;padding-right:20em}}#content #toc{border-style:solid;border-width:1px;border-color:#e0e0dc;margin-bottom:1.25em;padding:1.25em;background:#f8f8f7;-webkit-border-radius:4px;border-radius:4px} +#content #toc>:first-child{margin-top:0} +#content #toc>:last-child{margin-bottom:0} +#footer{max-width:100%;background-color:rgba(0,0,0,.8);padding:1.25em} +#footer-text,#footer_nav{color:rgba(255,255,255,.8);line-height:1.44} +#footer a{color: #990000} +.sect1{padding-bottom:.625em} +@media only screen and (min-width:768px){.sect1{padding-bottom:1.25em}}.sect1+.sect1{border-top:1px solid #efefed} +#content h1>a.anchor,h2>a.anchor,h3>a.anchor,#toctitle>a.anchor,.sidebarblock>.content>.title>a.anchor,h4>a.anchor,h5>a.anchor,h6>a.anchor{position:absolute;z-index:1001;width:1.5ex;margin-left:-1.5ex;display:block;text-decoration:none!important;visibility:hidden;text-align:center;font-weight:400} +#content h1>a.anchor:before,h2>a.anchor:before,h3>a.anchor:before,#toctitle>a.anchor:before,.sidebarblock>.content>.title>a.anchor:before,h4>a.anchor:before,h5>a.anchor:before,h6>a.anchor:before{content:"\00A7";font-size:.85em;display:block;padding-top:.1em} +#content h1:hover>a.anchor,#content h1>a.anchor:hover,h2:hover>a.anchor,h2>a.anchor:hover,h3:hover>a.anchor,#toctitle:hover>a.anchor,.sidebarblock>.content>.title:hover>a.anchor,h3>a.anchor:hover,#toctitle>a.anchor:hover,.sidebarblock>.content>.title>a.anchor:hover,h4:hover>a.anchor,h4>a.anchor:hover,h5:hover>a.anchor,h5>a.anchor:hover,h6:hover>a.anchor,h6>a.anchor:hover{visibility:visible} +#content h1>a.link,h2>a.link,h3>a.link,#toctitle>a.link,.sidebarblock>.content>.title>a.link,h4>a.link,h5>a.link,h6>a.link{color:#990000;text-decoration:none} +#content h1>a.link:hover,h2>a.link:hover,h3>a.link:hover,#toctitle>a.link:hover,.sidebarblock>.content>.title>a.link:hover,h4>a.link:hover,h5>a.link:hover,h6>a.link:hover{color:#a53221} +.audioblock,.imageblock,.literalblock,.listingblock,.stemblock,.videoblock{margin-bottom:1.25em} +.admonitionblock td.content>.title,.audioblock>.title,.exampleblock>.title,.imageblock>.title,.listingblock>.title,.literalblock>.title,.stemblock>.title,.openblock>.title,.paragraph>.title,.quoteblock>.title,table.tableblock>.title,.verseblock>.title,.videoblock>.title,.dlist>.title,.olist>.title,.ulist>.title,.qlist>.title,.hdlist>.title{text-rendering:optimizeLegibility;text-align:left;font-family:"Noto Serif","DejaVu Serif",serif;font-size:1rem;font-style:italic} +table.tableblock>caption.title{white-space:nowrap;overflow:visible;max-width:0} +.paragraph.lead>p,#preamble>.sectionbody>.paragraph:first-of-type p{color:rgba(0,0,0,.85)} +table.tableblock #preamble>.sectionbody>.paragraph:first-of-type p{font-size:inherit} +.admonitionblock>table{border-collapse:separate;border:0;background:none;width:100%} +.admonitionblock>table td.icon{text-align:center;width:80px} +.admonitionblock>table td.icon img{max-width:none} +.admonitionblock>table td.icon .title{font-weight:bold;font-family:"Open Sans","DejaVu Sans",sans-serif;text-transform:uppercase} +.admonitionblock>table td.content{padding-left:1.125em;padding-right:1.25em;border-left:1px solid #ddddd8;color:rgba(0,0,0,.6)} +.admonitionblock>table td.content>:last-child>:last-child{margin-bottom:0} +.exampleblock>.content{border-style:solid;border-width:1px;border-color:#e6e6e6;margin-bottom:1.25em;padding:1.25em;background:#fff;-webkit-border-radius:4px;border-radius:4px} +.exampleblock>.content>:first-child{margin-top:0} +.exampleblock>.content>:last-child{margin-bottom:0} +.sidebarblock{border-style:solid;border-width:1px;border-color:#e0e0dc;margin-bottom:1.25em;padding:1.25em;background:#f8f8f7;-webkit-border-radius:4px;border-radius:4px} +.sidebarblock>:first-child{margin-top:0} +.sidebarblock>:last-child{margin-bottom:0} +.sidebarblock>.content>.title{color:#7a2518;margin-top:0;text-align:center} +.exampleblock>.content>:last-child>:last-child,.exampleblock>.content .olist>ol>li:last-child>:last-child,.exampleblock>.content .ulist>ul>li:last-child>:last-child,.exampleblock>.content .qlist>ol>li:last-child>:last-child,.sidebarblock>.content>:last-child>:last-child,.sidebarblock>.content .olist>ol>li:last-child>:last-child,.sidebarblock>.content .ulist>ul>li:last-child>:last-child,.sidebarblock>.content .qlist>ol>li:last-child>:last-child{margin-bottom:0} +.literalblock pre,.listingblock pre:not(.highlight),.listingblock pre[class="highlight"],.listingblock pre[class^="highlight "],.listingblock pre.CodeRay,.listingblock pre.prettyprint{background:#f7f7f8} +.sidebarblock .literalblock pre,.sidebarblock .listingblock pre:not(.highlight),.sidebarblock .listingblock pre[class="highlight"],.sidebarblock .listingblock pre[class^="highlight "],.sidebarblock .listingblock pre.CodeRay,.sidebarblock .listingblock pre.prettyprint{background:#f2f1f1} +.literalblock pre,.literalblock pre[class],.listingblock pre,.listingblock pre[class]{-webkit-border-radius:4px;border-radius:4px;word-wrap:break-word;padding:1em;font-size:.8125em} +.literalblock pre.nowrap,.literalblock pre[class].nowrap,.listingblock pre.nowrap,.listingblock pre[class].nowrap{overflow-x:auto;white-space:pre;word-wrap:normal} +@media only screen and (min-width:768px){.literalblock pre,.literalblock pre[class],.listingblock pre,.listingblock pre[class]{font-size:.90625em}}@media only screen and (min-width:1280px){.literalblock pre,.literalblock pre[class],.listingblock pre,.listingblock pre[class]{font-size:1em}}.literalblock.output pre{color:#f7f7f8;background-color:rgba(0,0,0,.9)} +.listingblock pre.highlightjs{padding:0} +.listingblock pre.highlightjs>code{padding:1em;-webkit-border-radius:4px;border-radius:4px} +.listingblock pre.prettyprint{border-width:0} +.listingblock>.content{position:relative} +.listingblock code[data-lang]:before{display:none;content:attr(data-lang);position:absolute;font-size:.75em;top:.425rem;right:.5rem;line-height:1;text-transform:uppercase;color:#999} +.listingblock:hover code[data-lang]:before{display:block} +.listingblock.terminal pre .command:before{content:attr(data-prompt);padding-right:.5em;color:#999} +.listingblock.terminal pre .command:not([data-prompt]):before{content:"$"} +table.pyhltable{border-collapse:separate;border:0;margin-bottom:0;background:none} +table.pyhltable td{vertical-align:top;padding-top:0;padding-bottom:0} +table.pyhltable td.code{padding-left:.75em;padding-right:0} +pre.pygments .lineno,table.pyhltable td:not(.code){color:#999;padding-left:0;padding-right:.5em;border-right:1px solid #ddddd8} +pre.pygments .lineno{display:inline-block;margin-right:.25em} +table.pyhltable .linenodiv{background:none!important;padding-right:0!important} +.quoteblock{margin:0 1em 1.25em 1.5em;display:table} +.quoteblock>.title{margin-left:-1.5em;margin-bottom:.75em} +.quoteblock blockquote,.quoteblock blockquote p{color:rgba(0,0,0,.85);font-size:1.15rem;line-height:1.75;word-spacing:.1em;letter-spacing:0;font-style:italic;text-align:justify} +.quoteblock blockquote{margin:0;padding:0;border:0} +.quoteblock blockquote:before{content:"\201c";float:left;font-size:2.75em;font-weight:bold;line-height:.6em;margin-left:-.6em;color:#7a2518;text-shadow:0 1px 2px rgba(0,0,0,.1)} +.quoteblock blockquote>.paragraph:last-child p{margin-bottom:0} +.quoteblock .attribution{margin-top:.5em;margin-right:.5ex;text-align:right} +.quoteblock .quoteblock{margin-left:0;margin-right:0;padding:.5em 0;border-left:3px solid rgba(0,0,0,.6)} +.quoteblock .quoteblock blockquote{padding:0 0 0 .75em} +.quoteblock .quoteblock blockquote:before{display:none} +.verseblock{margin:0 1em 1.25em 1em} +.verseblock pre{font-family:"Open Sans","DejaVu Sans",sans;font-size:1.15rem;color:rgba(0,0,0,.85);font-weight:300;text-rendering:optimizeLegibility} +.verseblock pre strong{font-weight:400} +.verseblock .attribution{margin-top:1.25rem;margin-left:.5ex} +.quoteblock .attribution,.verseblock .attribution{font-size:.9375em;line-height:1.45;font-style:italic} +.quoteblock .attribution br,.verseblock .attribution br{display:none} +.quoteblock .attribution cite,.verseblock .attribution cite{display:block;letter-spacing:-.05em;color:rgba(0,0,0,.6)} +.quoteblock.abstract{margin:0 0 1.25em 0;display:block} +.quoteblock.abstract blockquote,.quoteblock.abstract blockquote p{text-align:left;word-spacing:0} +.quoteblock.abstract blockquote:before,.quoteblock.abstract blockquote p:first-of-type:before{display:none} +table.tableblock{max-width:100%;border-collapse:separate} +table.tableblock td>.paragraph:last-child p>p:last-child,table.tableblock th>p:last-child,table.tableblock td>p:last-child{margin-bottom:0} +table.spread{width:100%} +table.tableblock,th.tableblock,td.tableblock{border:0 solid #dedede} +table.grid-all th.tableblock,table.grid-all td.tableblock{border-width:0 1px 1px 0} +table.grid-all tfoot>tr>th.tableblock,table.grid-all tfoot>tr>td.tableblock{border-width:1px 1px 0 0} +table.grid-cols th.tableblock,table.grid-cols td.tableblock{border-width:0 1px 0 0} +table.grid-all *>tr>.tableblock:last-child,table.grid-cols *>tr>.tableblock:last-child{border-right-width:0} +table.grid-rows th.tableblock,table.grid-rows td.tableblock{border-width:0 0 1px 0} +table.grid-all tbody>tr:last-child>th.tableblock,table.grid-all tbody>tr:last-child>td.tableblock,table.grid-all thead:last-child>tr>th.tableblock,table.grid-rows tbody>tr:last-child>th.tableblock,table.grid-rows tbody>tr:last-child>td.tableblock,table.grid-rows thead:last-child>tr>th.tableblock{border-bottom-width:0} +table.grid-rows tfoot>tr>th.tableblock,table.grid-rows tfoot>tr>td.tableblock{border-width:1px 0 0 0} +table.frame-all{border-width:1px} +table.frame-sides{border-width:0 1px} +table.frame-topbot{border-width:1px 0} +th.halign-left,td.halign-left{text-align:left} +th.halign-right,td.halign-right{text-align:right} +th.halign-center,td.halign-center{text-align:center} +th.valign-top,td.valign-top{vertical-align:top} +th.valign-bottom,td.valign-bottom{vertical-align:bottom} +th.valign-middle,td.valign-middle{vertical-align:middle} +table thead th,table tfoot th{font-weight:bold} +tbody tr th{display:table-cell;line-height:1.6;background:#f7f8f7} +tbody tr th,tbody tr th p,tfoot tr th,tfoot tr th p{color:rgba(0,0,0,.8);font-weight:bold} +p.tableblock>code:only-child{background:none;padding:0} +p.tableblock{font-size:1em} +td>div.verse{white-space:pre} +ol{margin-left:1.75em} +ul li ol{margin-left:1.5em} +dl dd{margin-left:1.125em} +dl dd:last-child,dl dd:last-child>:last-child{margin-bottom:0} +ol>li p,ul>li p,ul dd,ol dd,.olist .olist,.ulist .ulist,.ulist .olist,.olist .ulist{margin-bottom:.625em} +ul.unstyled,ol.unnumbered,ul.checklist,ul.none{list-style-type:none} +ul.unstyled,ol.unnumbered,ul.checklist{margin-left:.625em} +ul.checklist li>p:first-child>.fa-square-o:first-child,ul.checklist li>p:first-child>.fa-check-square-o:first-child{width:1em;font-size:.85em} +ul.checklist li>p:first-child>input[type="checkbox"]:first-child{width:1em;position:relative;top:1px} +ul.inline{margin:0 auto .625em auto;margin-left:-1.375em;margin-right:0;padding:0;list-style:none;overflow:hidden} +ul.inline>li{list-style:none;float:left;margin-left:1.375em;display:block} +ul.inline>li>*{display:block} +.unstyled dl dt{font-weight:400;font-style:normal} +ol.arabic{list-style-type:decimal} +ol.decimal{list-style-type:decimal-leading-zero} +ol.loweralpha{list-style-type:lower-alpha} +ol.upperalpha{list-style-type:upper-alpha} +ol.lowerroman{list-style-type:lower-roman} +ol.upperroman{list-style-type:upper-roman} +ol.lowergreek{list-style-type:lower-greek} +.hdlist>table,.colist>table{border:0;background:none} +.hdlist>table>tbody>tr,.colist>table>tbody>tr{background:none} +td.hdlist1{padding-right:.75em;font-weight:bold} +td.hdlist1,td.hdlist2{vertical-align:top} +.literalblock+.colist,.listingblock+.colist{margin-top:-.5em} +.colist>table tr>td:first-of-type{padding:0 .75em;line-height:1} +.colist>table tr>td:last-of-type{padding:.25em 0} +.thumb,.th{line-height:0;display:inline-block;border:solid 4px #fff;-webkit-box-shadow:0 0 0 1px #ddd;box-shadow:0 0 0 1px #ddd} +.imageblock.left,.imageblock[style*="float: left"]{margin:.25em .625em 1.25em 0} +.imageblock.right,.imageblock[style*="float: right"]{margin:.25em 0 1.25em .625em} +.imageblock>.title{margin-bottom:0} +.imageblock.thumb,.imageblock.th{border-width:6px} +.imageblock.thumb>.title,.imageblock.th>.title{padding:0 .125em} +.image.left,.image.right{margin-top:.25em;margin-bottom:.25em;display:inline-block;line-height:0} +.image.left{margin-right:.625em} +.image.right{margin-left:.625em} +a.image{text-decoration:none} +span.footnote,span.footnoteref{vertical-align:super;font-size:.875em} +span.footnote a,span.footnoteref a{text-decoration:none} +span.footnote a:active,span.footnoteref a:active{text-decoration:underline} +#footnotes{padding-top:.75em;padding-bottom:.75em;margin-bottom:.625em} +#footnotes hr{width:20%;min-width:6.25em;margin:-.25em 0 .75em 0;border-width:1px 0 0 0} +#footnotes .footnote{padding:0 .375em;line-height:1.3;font-size:.875em;margin-left:1.2em;text-indent:-1.2em;margin-bottom:.2em} +#footnotes .footnote a:first-of-type{font-weight:bold;text-decoration:none} +#footnotes .footnote:last-of-type{margin-bottom:0} +#content #footnotes{margin-top:-.625em;margin-bottom:0;padding:.75em 0} +.gist .file-data>table{border:0;background:#fff;width:100%;margin-bottom:0} +.gist .file-data>table td.line-data{width:99%} +div.unbreakable{page-break-inside:avoid} +.big{font-size:larger} +.small{font-size:smaller} +.underline{text-decoration:underline} +.overline{text-decoration:overline} +.line-through{text-decoration:line-through} +.aqua{color:#00bfbf} +.aqua-background{background-color:#00fafa} +.black{color:#000} +.black-background{background-color:#000} +.blue{color:#0000bf} +.blue-background{background-color:#0000fa} +.fuchsia{color:#bf00bf} +.fuchsia-background{background-color:#fa00fa} +.gray{color:#606060} +.gray-background{background-color:#7d7d7d} +.green{color:#006000} +.green-background{background-color:#007d00} +.lime{color:#00bf00} +.lime-background{background-color:#00fa00} +.maroon{color:#600000} +.maroon-background{background-color:#7d0000} +.navy{color:#000060} +.navy-background{background-color:#00007d} +.olive{color:#606000} +.olive-background{background-color:#7d7d00} +.purple{color:#600060} +.purple-background{background-color:#7d007d} +.red{color:#bf0000} +.red-background{background-color:#fa0000} +.silver{color:#909090} +.silver-background{background-color:#bcbcbc} +.teal{color:#006060} +.teal-background{background-color:#007d7d} +.white{color:#bfbfbf} +.white-background{background-color:#fafafa} +.yellow{color:#bfbf00} +.yellow-background{background-color:#fafa00} +span.icon>.fa{cursor:default} +.admonitionblock td.icon [class^="fa icon-"]{font-size:2.5em;text-shadow:1px 1px 2px rgba(0,0,0,.5);cursor:default} +.admonitionblock td.icon .icon-note:before{content:"\f05a";color:#19407c} +.admonitionblock td.icon .icon-tip:before{content:"\f0eb";text-shadow:1px 1px 2px rgba(155,155,0,.8);color:#111} +.admonitionblock td.icon .icon-warning:before{content:"\f071";color:#bf6900} +.admonitionblock td.icon .icon-caution:before{content:"\f06d";color:#bf3400} +.admonitionblock td.icon .icon-important:before{content:"\f06a";color:#bf0000} +.conum[data-value]{display:inline-block;color:#fff!important;background-color:rgba(0,0,0,.8);-webkit-border-radius:100px;border-radius:100px;text-align:center;font-size:.75em;width:1.67em;height:1.67em;line-height:1.67em;font-family:"Open Sans","DejaVu Sans",sans-serif;font-style:normal;font-weight:bold} +.conum[data-value] *{color:#fff!important} +.conum[data-value]+b{display:none} +.conum[data-value]:after{content:attr(data-value)} +pre .conum[data-value]{position:relative;top:-.125em} +b.conum *{color:inherit!important} +.conum:not([data-value]):empty{display:none} +h1,h2{letter-spacing:-.01em} +dt,th.tableblock,td.content{text-rendering:optimizeLegibility} +p,td.content{letter-spacing:-.01em} +p strong,td.content strong{letter-spacing:-.005em} +p,blockquote,dt,td.content{font-size:1.0625rem} +p{margin-bottom:1.25rem} +.sidebarblock p,.sidebarblock dt,.sidebarblock td.content,p.tableblock{font-size:1em} +.exampleblock>.content{background-color:#fffef7;border-color:#e0e0dc;-webkit-box-shadow:0 1px 4px #e0e0dc;box-shadow:0 1px 4px #e0e0dc} +.print-only{display:none!important} +@media print{@page{margin:1.25cm .75cm} +*{-webkit-box-shadow:none!important;box-shadow:none!important;text-shadow:none!important} +a{color:inherit!important;text-decoration:underline!important} +a.bare,a[href^="#"],a[href^="mailto:"]{text-decoration:none!important} +a[href^="http:"]:not(.bare):after,a[href^="https:"]:not(.bare):after{content:"(" attr(href) ")";display:inline-block;font-size:.875em;padding-left:.25em} +abbr[title]:after{content:" (" attr(title) ")"} +pre,blockquote,tr,img{page-break-inside:avoid} +thead{display:table-header-group} +img{max-width:100%!important} +p,blockquote,dt,td.content{font-size:1em;orphans:3;widows:3} +h2,h3,#toctitle,.sidebarblock>.content>.title{page-break-after:avoid} +#toc,.sidebarblock,.exampleblock>.content{background:none!important} +#toc{border-bottom:1px solid #ddddd8!important;padding-bottom:0!important} +.sect1{padding-bottom:0!important} +.sect1+.sect1{border:0!important} +#header>h1:first-child{margin-top:1.25rem} +body.book #header{text-align:center} +body.book #header>h1:first-child{border:0!important;margin:2.5em 0 1em 0} +body.book #header .details{border:0!important;display:block;padding:0!important} +body.book #header .details span:first-child{margin-left:0!important} +body.book #header .details br{display:block} +body.book #header .details br+span:before{content:none!important} +body.book #toc{border:0!important;text-align:left!important;padding:0!important;margin:0!important} +body.book #toc,body.book #preamble,body.book h1.sect0,body.book .sect1>h2{page-break-before:always} +.listingblock code[data-lang]:before{display:block} +#footer{background:none!important;padding:0 .9375em} +#footer-text{color:rgba(0,0,0,.6)!important;font-size:.9em} +.hide-on-print{display:none!important} +.print-only{display:block!important} +.hide-for-print{display:none!important} +.show-for-print{display:inherit!important}} \ No newline at end of file diff --git a/src/main/docs/images b/src/main/docs/images new file mode 120000 index 0000000..06d04d0 --- /dev/null +++ b/src/main/docs/images @@ -0,0 +1 @@ +../site/resources/images \ No newline at end of file diff --git a/src/main/docs/installation/appendix.adoc b/src/main/docs/installation/appendix.adoc new file mode 100644 index 0000000..c9fbcee --- /dev/null +++ b/src/main/docs/installation/appendix.adoc @@ -0,0 +1,330 @@ +//// +/** + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +//// + +[[installation_appendix]] += Installation Notes +:Author: Apache HBase Team +:Email: +:doctype: book + +This appendix contains supplemental information about prerequisites and dependencies +of HBase. + +[[installation_os]] +== HBase Operating System Notes + +It is assumed that you have the following utilities available in your OS: + +ssh:: + HBase uses the Secure Shell (ssh) command and utilities extensively to communicate between cluster nodes. + Each server in the cluster must be running `ssh` so that the Hadoop and HBase daemons can be managed. + You must be able to connect to all nodes via SSH, including the local node, from the Master as well + as any backup Master, using a shared key rather than a password. You can see the basic methodology + for such a set-up in Linux or Unix systems at "<>". If your cluster + nodes use OS X, see the section, + link:http://wiki.apache.org/hadoop/Running_Hadoop_On_OS_X_10.5_64-bit_%28Single-Node_Cluster%29[SSH: Setting up Remote Desktop and Enabling Self-Login] + on the Hadoop wiki. + +DNS:: + HBase uses the local hostname to self-report its IP address. Both forward and reverse DNS resolving + must work in versions of HBase previous to 0.92.0. The link:https://github.com/sujee/hadoop-dns-checker[hadoop-dns-checker] + tool can be used to verify DNS is working correctly on the cluster. The project `README` + file provides detailed instructions on usage. + +NTP:: + The clocks on cluster nodes should be synchronized. A small amount of variation is acceptable, + but larger amounts of skew can cause erratic and unexpected behavior. Time synchronization is one + of the first things to check if you see unexplained problems in your cluster. It is recommended + that you run a Network Time Protocol (NTP) service, or another time-synchronization mechanism, + on your cluster, and that all nodes look to the same service for time synchronization. See the + link:http://www.tldp.org/LDP/sag/html/basic-ntp-config.html[Basic NTP Configuration] at [citetitle]_The Linux Documentation Project (TLDP)_ + to set up NTP. + +[[ulimit]] +Limits on Number of Files and Processes (ulimit):: + Apache HBase is a database. It requires the ability to open a large number of files at once. + Many Linux distributions limit the number of files a single user is allowed to open to `1024` + (or `256` on older versions of OS X). You can check this limit on your servers by running the + command `ulimit -n` when logged in as the user which runs HBase. See + link:/book.html#trouble.rs.runtime.filehandles[the Troubleshooting section] for + some of the problems you may experience if the limit is too low. You may also + notice errors such as the following: ++ +---- +2010-04-06 03:04:37,542 INFO org.apache.hadoop.hdfs.DFSClient: Exception increateBlockOutputStream java.io.EOFException +2010-04-06 03:04:37,542 INFO org.apache.hadoop.hdfs.DFSClient: Abandoning block blk_-6935524980745310745_1391901 +---- ++ +It is recommended to raise the ulimit to at least 10,000, but more likely 10,240, because the value +is usually expressed in multiples of 1024. Each ColumnFamily has at least one StoreFile, and possibly +more than six StoreFiles if the region is under load. The number of open files required depends upon +the number of ColumnFamilies and the number of regions. The following is a rough formula for calculating +the potential number of open files on a RegionServer. ++ +.Calculate the Potential Number of Open Files +---- +(StoreFiles per ColumnFamily) x (regions per RegionServer) +---- ++ +For example, assuming that a schema had 3 ColumnFamilies per region with an average +of 3 StoreFiles per ColumnFamily, and there are 100 regions per RegionServer, +the JVM will open `3 * 3 * 100 = 900` file descriptors, not counting open JAR files, +configuration files, and others. Opening a file does not take many resources, +and the risk of allowing a user to open too many files is minimal. ++ +Another related setting is the number of processes a user is allowed to run at once. +In Linux and Unix, the number of processes is set using the `ulimit -u` command. +This should not be confused with the `nproc` command, which controls the number +of CPUs available to a given user. Under load, a `ulimit -u` that is too low can +cause OutOfMemoryError exceptions. See Jack Levin's major HDFS issues thread on +the hbase-users mailing list, from 2011. ++ +Configuring the maximum number of file descriptors and processes for the user +who is running the HBase process is an operating system configuration, rather +than an HBase configuration. It is also important to be sure that the settings +are changed for the user that actually runs HBase. To see which user started HBase, +and that user's ulimit configuration, look at the first line of the HBase log for +that instance. ++ +.`ulimit` Settings on Ubuntu +==== +To configure ulimit settings on Ubuntu, edit `/etc/security/limits.conf`, which +is a space-delimited file with four columns. Refer to the man page for `limits.conf` +for details about the format of this file. In the following example, the first +line sets both soft and hard limits for the number of open files (nofile) to +32768 for the operating system user with the username hadoop. The second line +sets the number of processes to 32000 for the same user. +---- +hadoop - nofile 32768 +hadoop - nproc 32000 +---- +The settings are only applied if the Pluggable Authentication Module (PAM) environment +is directed to use them. To configure PAM to use these limits, be sure that the +`/etc/pam.d/common-session` file contains the following line: +---- +session required pam_limits.so +---- +==== + +Linux Shell:: + All of the shell scripts that come with HBase rely on the link:http://www.gnu.org/software/bash[GNU Bash] shell. + +Windows:: + Prior to HBase 0.96, testing for running HBase on Microsoft Windows was limited. + Running a on Windows nodes is not recommended for production systems. + + +[[installation_java]] +== HBase Java Compatibility Notes + +[cols="1,1,1,4", options="header"] +|=== +|HBase Version +|JDK 6 +|JDK 7 +|JDK 8 + +|1.3 +|link:http://search-hadoop.com/m/DHED4Zlz0R1[Not Supported] +|yes +|yes + + +|1.2 +|link:http://search-hadoop.com/m/DHED4Zlz0R1[Not Supported] +|yes +|yes + +|1.1 +|link:http://search-hadoop.com/m/DHED4Zlz0R1[Not Supported] +|yes +|Running with JDK 8 will work but is not well tested. + +|1.0 +|link:http://search-hadoop.com/m/DHED4Zlz0R1[Not Supported] +|yes +|Running with JDK 8 will work but is not well tested. + +|0.98 +|yes +|yes +|Running with JDK 8 works but is not well tested. Building with JDK 8 would require removal of the +deprecated `remove()` method of the `PoolMap` class and is under consideration. See +link:https://issues.apache.org/jira/browse/HBASE-7608[HBASE-7608] for more information about JDK 8 +support. + +|0.94 +|yes +|yes +|N/A +|=== + +NOTE: In HBase 0.98.5 and newer, you must set `JAVA_HOME` on each node of your cluster. _hbase-env.sh_ provides a handy mechanism to do this. + +[[installation_hadoop]] +== HBase Hadoop Compatibility Notes + +The following table summarizes the versions of Hadoop supported with each version of HBase. +Based on the version of HBase, you should select the most appropriate version of Hadoop. +You can use Apache Hadoop, or a vendor's distribution of Hadoop. +No distinction is made here. +See link:http://wiki.apache.org/hadoop/Distributions%20and%20Commercial%20Support[the Hadoop wiki] +for information about vendors of Hadoop. + +.Hadoop 2.x is recommended. +[TIP] +==== +Hadoop 2.x is faster and includes features, such as short-circuit reads, which will help improve your +HBase random read profile. Hadoop 2.x also includes important bug fixes that will improve your overall +HBase experience. HBase 0.98 drops support for Hadoop 1.0 and deprecates use of Hadoop +1.1+, and HBase 1.0 does not support Hadoop 1.x. +==== + +Use the following legend to interpret this table: + +.Hadoop version support matrix + +* "S" = supported +* "X" = not supported +* "NT" = Not tested + +[cols="1,1,1,1,1,1,1", options="header"] +|=== +| | HBase-0.94.x | HBase-0.98.x (Support for Hadoop 1.1+ is deprecated.) | HBase-1.0.x (Hadoop 1.x is NOT supported) | HBase-1.1.x | HBase-1.2.x | HBase-1.3.x +|Hadoop-1.0.x | X | X | X | X | X | X +|Hadoop-1.1.x | S | NT | X | X | X | X +|Hadoop-0.23.x | S | X | X | X | X | X +|Hadoop-2.0.x-alpha | NT | X | X | X | X | X +|Hadoop-2.1.0-beta | NT | X | X | X | X | X +|Hadoop-2.2.0 | NT | S | NT | NT | X | X +|Hadoop-2.3.x | NT | S | NT | NT | X | X +|Hadoop-2.4.x | NT | S | S | S | S | S +|Hadoop-2.5.x | NT | S | S | S | S | S +|Hadoop-2.6.0 | X | X | X | X | X | X +|Hadoop-2.6.1+ | NT | NT | NT | NT | S | S +|Hadoop-2.7.0 | X | X | X | X | X | X +|Hadoop-2.7.1+ | NT | NT | NT | NT | S | S +|=== + +.Hadoop 2.6.x +[TIP] +==== +Hadoop distributions based on the 2.6.x line *must* have +link:https://issues.apache.org/jira/browse/HADOOP-11710[HADOOP-11710] applied if you plan to run +HBase on top of an HDFS Encryption Zone. Failure to do so will result in cluster failure and +data loss. This patch is present in Apache Hadoop releases 2.6.1+. +==== + +.Hadoop 2.7.x +[TIP] +==== +Hadoop version 2.7.0 is not tested or supported as the Hadoop PMC has explicitly +labeled that release as not being stable. +==== + +.Replace the Hadoop Bundled With HBase! +[NOTE] +==== +Because HBase depends on Hadoop, it bundles an instance of the Hadoop jar under its _lib_ directory. +The bundled jar is ONLY for use in standalone mode. +In distributed mode, it is _critical_ that the version of Hadoop that is out on +your cluster match what is under HBase. Replace the hadoop jar found in the HBase +lib directory with the hadoop jar you are running on your cluster to avoid version +mismatch issues. Make sure you replace the jar in HBase everywhere on your cluster. +Hadoop version mismatch issues have various manifestations but often cause the cluster +to hang. +==== + +[[hadoop.older.versions]] +=== Hadoop versions 0.20.x - 1.x + +HBase will lose data unless it is running on an HDFS that has a durable `sync` implementation. +DO NOT use Hadoop 0.20.2, Hadoop 0.20.203.0, and Hadoop 0.20.204.0 which DO NOT have this attribute. +Currently only Hadoop versions 0.20.205.x or higher, including hadoop-1.0.0 -- have a working, durable sync. +The Cloudera blog post link:http://www.cloudera.com/blog/2012/01/an-update-on-apache-hadoop-1-0/[An + update on Apache Hadoop 1.0] by Charles Zedlweski has a nice exposition on how all the Hadoop versions relate. +It's worth checking out if you are having trouble making sense of the Hadoop version morass. + +Sync has to be explicitly enabled by setting `dfs.support.append` to `true` on +the client side, in `hbase-site.xml` and on the server side in `hdfs-site.xml`. + +[source,xml] +---- + + dfs.support.append + true + +---- + +You must restart your cluster after making this edit. + +[[hadoop.security]] +=== Apache HBase on Secure Hadoop + +Apache HBase will run on any Hadoop 0.20.x that incorporates Hadoop security +features as long as you do as suggested above and replace the Hadoop jar that +ships with HBase with the secure version. +To read more about how to setup Secure HBase, see +link:/book.html#hbase.secure.configuration[HBase Secure Configuration]. + + +[[dfs.datanode.max.transfer.threads]] +=== `dfs.datanode.max.transfer.threads` (((dfs.datanode.max.transfer.threads))) + +An HDFS DataNode has an upper bound on the number of files that it will serve at any one time. +Before doing any loading, make sure you have configured Hadoop's `conf/hdfs-site.xml`, +setting the `dfs.datanode.max.transfer.threads` value to at least the following: + +[source,xml] +---- + + dfs.datanode.max.transfer.threads + 4096 + +---- + +Be sure to restart your HDFS after making the above configuration. + +Not having this configuration in place makes for strange-looking failures. +One manifestation is a complaint about missing blocks. +For example: + +---- +10/12/08 20:10:31 INFO hdfs.DFSClient: Could not obtain block + blk_XXXXXXXXXXXXXXXXXXXXXX_YYYYYYYY from any node: java.io.IOException: No live nodes + contain current block. Will get new block locations from namenode and retry... +---- + +See also <> and note +that this property was previously known as `dfs.datanode.max.xcievers` +(e.g. link:http://ccgtech.blogspot.com/2010/02/hadoop-hdfs-deceived-by-xciever.html[Hadoop HDFS: Deceived by Xciever]). + +[[installation_zookeeper]] +== HBase ZooKeeper Compatibility Notes + +ZooKeeper 3.4.x is required as of HBase 1.0.0. +HBase makes use of the `multi` functionality that is only available since 3.4.0 +(The `useMulti` configuration option defaults to `true` in HBase 1.0.0). +See +link:https://issues.apache.org/jira/browse/HBASE-12241[HBASE-12241 (The crash of regionServer when taking deadserver's replication queue breaks replication)] +and +link:https://issues.apache.org/jira/browse/HBASE-6775[HBASE-6775 (Use ZK.multi when available for HBASE-6710 0.92/0.94 compatibility fix)] +for background. \ No newline at end of file diff --git a/src/main/docs/installation/asciidoctor.css b/src/main/docs/installation/asciidoctor.css new file mode 100644 index 0000000..d919f85 --- /dev/null +++ b/src/main/docs/installation/asciidoctor.css @@ -0,0 +1,407 @@ +/* Asciidoctor default stylesheet | MIT License | http://asciidoctor.org */ +/* Remove comment around @import statement below when using as a custom stylesheet */ +/*@import "https://fonts.googleapis.com/css?family=Open+Sans:300,300italic,400,400italic,600,600italic%7CNoto+Serif:400,400italic,700,700italic%7CDroid+Sans+Mono:400,700";*/ +article,aside,details,figcaption,figure,footer,header,hgroup,main,nav,section,summary{display:block} +audio,canvas,video{display:inline-block} +audio:not([controls]){display:none;height:0} +[hidden],template{display:none} +script{display:none!important} +html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%} +body{margin:0} +a{background:transparent} +a:focus{outline:thin dotted} +a:active,a:hover{outline:0} +h1{font-size:2em;margin:.67em 0} +abbr[title]{border-bottom:1px dotted} +b,strong{font-weight:bold} +dfn{font-style:italic} +hr{-moz-box-sizing:content-box;box-sizing:content-box;height:0} +mark{background:#ff0;color:#000} +code,kbd,pre,samp{font-family:monospace;font-size:1em} +pre{white-space:pre-wrap} +q{quotes:"\201C" "\201D" "\2018" "\2019"} +small{font-size:80%} +sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline} +sup{top:-.5em} +sub{bottom:-.25em} +img{border:0} +svg:not(:root){overflow:hidden} +figure{margin:0} +fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em} +legend{border:0;padding:0} +button,input,select,textarea{font-family:inherit;font-size:100%;margin:0} +button,input{line-height:normal} +button,select{text-transform:none} +button,html input[type="button"],input[type="reset"],input[type="submit"]{-webkit-appearance:button;cursor:pointer} +button[disabled],html input[disabled]{cursor:default} +input[type="checkbox"],input[type="radio"]{box-sizing:border-box;padding:0} +input[type="search"]{-webkit-appearance:textfield;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box} +input[type="search"]::-webkit-search-cancel-button,input[type="search"]::-webkit-search-decoration{-webkit-appearance:none} +button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0} +textarea{overflow:auto;vertical-align:top} +table{border-collapse:collapse;border-spacing:0} +*,*:before,*:after{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box} +html,body{font-size:100%} +body{background:#fff;color:rgba(0,0,0,.8);padding:0;margin:0;font-family:"Noto Serif","DejaVu Serif",serif;font-weight:400;font-style:normal;line-height:1;position:relative;cursor:auto} +a:hover{cursor:pointer} +img,object,embed{max-width:100%;height:auto} +object,embed{height:100%} +img{-ms-interpolation-mode:bicubic} +.left{float:left!important} +.right{float:right!important} +.text-left{text-align:left!important} +.text-right{text-align:right!important} +.text-center{text-align:center!important} +.text-justify{text-align:justify!important} +.hide{display:none} +body{-webkit-font-smoothing:antialiased} +img,object,svg{display:inline-block;vertical-align:middle} +textarea{height:auto;min-height:50px} +select{width:100%} +.center{margin-left:auto;margin-right:auto} +.spread{width:100%} +p.lead,.paragraph.lead>p,#preamble>.sectionbody>.paragraph:first-of-type p{font-size:1.21875em;line-height:1.6} +.subheader,.admonitionblock td.content>.title,.audioblock>.title,.exampleblock>.title,.imageblock>.title,.listingblock>.title,.literalblock>.title,.stemblock>.title,.openblock>.title,.paragraph>.title,.quoteblock>.title,table.tableblock>.title,.verseblock>.title,.videoblock>.title,.dlist>.title,.olist>.title,.ulist>.title,.qlist>.title,.hdlist>.title{line-height:1.45;color:#7a2518;font-weight:400;margin-top:0;margin-bottom:.25em} +div,dl,dt,dd,ul,ol,li,h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6,pre,form,p,blockquote,th,td{margin:0;padding:0;direction:ltr} +a{color:#2156a5;text-decoration:underline;line-height:inherit} +a:hover,a:focus{color:#1d4b8f} +a img{border:none} +p{font-family:inherit;font-weight:400;font-size:1em;line-height:1.6;margin-bottom:1.25em;text-rendering:optimizeLegibility} +p aside{font-size:.875em;line-height:1.35;font-style:italic} +h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6{font-family:"Open Sans","DejaVu Sans",sans-serif;font-weight:300;font-style:normal;color:#ba3925;text-rendering:optimizeLegibility;margin-top:1em;margin-bottom:.5em;line-height:1.0125em} +h1 small,h2 small,h3 small,#toctitle small,.sidebarblock>.content>.title small,h4 small,h5 small,h6 small{font-size:60%;color:#e99b8f;line-height:0} +h1{font-size:2.125em} +h2{font-size:1.6875em} +h3,#toctitle,.sidebarblock>.content>.title{font-size:1.375em} +h4,h5{font-size:1.125em} +h6{font-size:1em} +hr{border:solid #ddddd8;border-width:1px 0 0;clear:both;margin:1.25em 0 1.1875em;height:0} +em,i{font-style:italic;line-height:inherit} +strong,b{font-weight:bold;line-height:inherit} +small{font-size:60%;line-height:inherit} +code{font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;font-weight:400;color:rgba(0,0,0,.9)} +ul,ol,dl{font-size:1em;line-height:1.6;margin-bottom:1.25em;list-style-position:outside;font-family:inherit} +ul,ol,ul.no-bullet,ol.no-bullet{margin-left:1.5em} +ul li ul,ul li ol{margin-left:1.25em;margin-bottom:0;font-size:1em} +ul.square li ul,ul.circle li ul,ul.disc li ul{list-style:inherit} +ul.square{list-style-type:square} +ul.circle{list-style-type:circle} +ul.disc{list-style-type:disc} +ul.no-bullet{list-style:none} +ol li ul,ol li ol{margin-left:1.25em;margin-bottom:0} +dl dt{margin-bottom:.3125em;font-weight:bold} +dl dd{margin-bottom:1.25em} +abbr,acronym{text-transform:uppercase;font-size:90%;color:rgba(0,0,0,.8);border-bottom:1px dotted #ddd;cursor:help} +abbr{text-transform:none} +blockquote{margin:0 0 1.25em;padding:.5625em 1.25em 0 1.1875em;border-left:1px solid #ddd} +blockquote cite{display:block;font-size:.9375em;color:rgba(0,0,0,.6)} +blockquote cite:before{content:"\2014 \0020"} +blockquote cite a,blockquote cite a:visited{color:rgba(0,0,0,.6)} +blockquote,blockquote p{line-height:1.6;color:rgba(0,0,0,.85)} +@media only screen and (min-width:768px){h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6{line-height:1.2} +h1{font-size:2.75em} +h2{font-size:2.3125em} +h3,#toctitle,.sidebarblock>.content>.title{font-size:1.6875em} +h4{font-size:1.4375em}} +table{background:#fff;margin-bottom:1.25em;border:solid 1px #dedede} +table thead,table tfoot{background:#f7f8f7;font-weight:bold} +table thead tr th,table thead tr td,table tfoot tr th,table tfoot tr td{padding:.5em .625em .625em;font-size:inherit;color:rgba(0,0,0,.8);text-align:left} +table tr th,table tr td{padding:.5625em .625em;font-size:inherit;color:rgba(0,0,0,.8)} +table tr.even,table tr.alt,table tr:nth-of-type(even){background:#f8f8f7} +table thead tr th,table tfoot tr th,table tbody tr td,table tr td,table tfoot tr td{display:table-cell;line-height:1.6} +body{tab-size:4} +h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6{line-height:1.2;word-spacing:-.05em} +h1 strong,h2 strong,h3 strong,#toctitle strong,.sidebarblock>.content>.title strong,h4 strong,h5 strong,h6 strong{font-weight:400} +.clearfix:before,.clearfix:after,.float-group:before,.float-group:after{content:" ";display:table} +.clearfix:after,.float-group:after{clear:both} +*:not(pre)>code{font-size:.9375em;font-style:normal!important;letter-spacing:0;padding:.1em .5ex;word-spacing:-.15em;background-color:#f7f7f8;-webkit-border-radius:4px;border-radius:4px;line-height:1.45;text-rendering:optimizeSpeed} +pre,pre>code{line-height:1.45;color:rgba(0,0,0,.9);font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;font-weight:400;text-rendering:optimizeSpeed} +.keyseq{color:rgba(51,51,51,.8)} +kbd{font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;display:inline-block;color:rgba(0,0,0,.8);font-size:.65em;line-height:1.45;background-color:#f7f7f7;border:1px solid #ccc;-webkit-border-radius:3px;border-radius:3px;-webkit-box-shadow:0 1px 0 rgba(0,0,0,.2),0 0 0 .1em white inset;box-shadow:0 1px 0 rgba(0,0,0,.2),0 0 0 .1em #fff inset;margin:0 .15em;padding:.2em .5em;vertical-align:middle;position:relative;top:-.1em;white-space:nowrap} +.keyseq kbd:first-child{margin-left:0} +.keyseq kbd:last-child{margin-right:0} +.menuseq,.menu{color:rgba(0,0,0,.8)} +b.button:before,b.button:after{position:relative;top:-1px;font-weight:400} +b.button:before{content:"[";padding:0 3px 0 2px} +b.button:after{content:"]";padding:0 2px 0 3px} +p a>code:hover{color:rgba(0,0,0,.9)} +#header,#content,#footnotes,#footer{width:100%;margin-left:auto;margin-right:auto;margin-top:0;margin-bottom:0;max-width:62.5em;*zoom:1;position:relative;padding-left:.9375em;padding-right:.9375em} +#header:before,#header:after,#content:before,#content:after,#footnotes:before,#footnotes:after,#footer:before,#footer:after{content:" ";display:table} +#header:after,#content:after,#footnotes:after,#footer:after{clear:both} +#content{margin-top:1.25em} +#content:before{content:none} +#header>h1:first-child{color:rgba(0,0,0,.85);margin-top:2.25rem;margin-bottom:0} +#header>h1:first-child+#toc{margin-top:8px;border-top:1px solid #ddddd8} +#header>h1:only-child,body.toc2 #header>h1:nth-last-child(2){border-bottom:1px solid #ddddd8;padding-bottom:8px} +#header .details{border-bottom:1px solid #ddddd8;line-height:1.45;padding-top:.25em;padding-bottom:.25em;padding-left:.25em;color:rgba(0,0,0,.6);display:-ms-flexbox;display:-webkit-flex;display:flex;-ms-flex-flow:row wrap;-webkit-flex-flow:row wrap;flex-flow:row wrap} +#header .details span:first-child{margin-left:-.125em} +#header .details span.email a{color:rgba(0,0,0,.85)} +#header .details br{display:none} +#header .details br+span:before{content:"\00a0\2013\00a0"} +#header .details br+span.author:before{content:"\00a0\22c5\00a0";color:rgba(0,0,0,.85)} +#header .details br+span#revremark:before{content:"\00a0|\00a0"} +#header #revnumber{text-transform:capitalize} +#header #revnumber:after{content:"\00a0"} +#content>h1:first-child:not([class]){color:rgba(0,0,0,.85);border-bottom:1px solid #ddddd8;padding-bottom:8px;margin-top:0;padding-top:1rem;margin-bottom:1.25rem} +#toc{border-bottom:1px solid #efefed;padding-bottom:.5em} +#toc>ul{margin-left:.125em} +#toc ul.sectlevel0>li>a{font-style:italic} +#toc ul.sectlevel0 ul.sectlevel1{margin:.5em 0} +#toc ul{font-family:"Open Sans","DejaVu Sans",sans-serif;list-style-type:none} +#toc li{line-height:1.3334;margin-top:.3334em} +#toc a{text-decoration:none} +#toc a:active{text-decoration:underline} +#toctitle{color:#7a2518;font-size:1.2em} +@media only screen and (min-width:768px){#toctitle{font-size:1.375em} +body.toc2{padding-left:15em;padding-right:0} +#toc.toc2{margin-top:0!important;background-color:#f8f8f7;position:fixed;width:15em;left:0;top:0;border-right:1px solid #efefed;border-top-width:0!important;border-bottom-width:0!important;z-index:1000;padding:1.25em 1em;height:100%;overflow:auto} +#toc.toc2 #toctitle{margin-top:0;margin-bottom:.8rem;font-size:1.2em} +#toc.toc2>ul{font-size:.9em;margin-bottom:0} +#toc.toc2 ul ul{margin-left:0;padding-left:1em} +#toc.toc2 ul.sectlevel0 ul.sectlevel1{padding-left:0;margin-top:.5em;margin-bottom:.5em} +body.toc2.toc-right{padding-left:0;padding-right:15em} +body.toc2.toc-right #toc.toc2{border-right-width:0;border-left:1px solid #efefed;left:auto;right:0}} +@media only screen and (min-width:1280px){body.toc2{padding-left:20em;padding-right:0} +#toc.toc2{width:20em} +#toc.toc2 #toctitle{font-size:1.375em} +#toc.toc2>ul{font-size:.95em} +#toc.toc2 ul ul{padding-left:1.25em} +body.toc2.toc-right{padding-left:0;padding-right:20em}} +#content #toc{border-style:solid;border-width:1px;border-color:#e0e0dc;margin-bottom:1.25em;padding:1.25em;background:#f8f8f7;-webkit-border-radius:4px;border-radius:4px} +#content #toc>:first-child{margin-top:0} +#content #toc>:last-child{margin-bottom:0} +#footer{max-width:100%;background-color:rgba(0,0,0,.8);padding:1.25em} +#footer-text{color:rgba(255,255,255,.8);line-height:1.44} +.sect1{padding-bottom:.625em} +@media only screen and (min-width:768px){.sect1{padding-bottom:1.25em}} +.sect1+.sect1{border-top:1px solid #efefed} +#content h1>a.anchor,h2>a.anchor,h3>a.anchor,#toctitle>a.anchor,.sidebarblock>.content>.title>a.anchor,h4>a.anchor,h5>a.anchor,h6>a.anchor{position:absolute;z-index:1001;width:1.5ex;margin-left:-1.5ex;display:block;text-decoration:none!important;visibility:hidden;text-align:center;font-weight:400} +#content h1>a.anchor:before,h2>a.anchor:before,h3>a.anchor:before,#toctitle>a.anchor:before,.sidebarblock>.content>.title>a.anchor:before,h4>a.anchor:before,h5>a.anchor:before,h6>a.anchor:before{content:"\00A7";font-size:.85em;display:block;padding-top:.1em} +#content h1:hover>a.anchor,#content h1>a.anchor:hover,h2:hover>a.anchor,h2>a.anchor:hover,h3:hover>a.anchor,#toctitle:hover>a.anchor,.sidebarblock>.content>.title:hover>a.anchor,h3>a.anchor:hover,#toctitle>a.anchor:hover,.sidebarblock>.content>.title>a.anchor:hover,h4:hover>a.anchor,h4>a.anchor:hover,h5:hover>a.anchor,h5>a.anchor:hover,h6:hover>a.anchor,h6>a.anchor:hover{visibility:visible} +#content h1>a.link,h2>a.link,h3>a.link,#toctitle>a.link,.sidebarblock>.content>.title>a.link,h4>a.link,h5>a.link,h6>a.link{color:#ba3925;text-decoration:none} +#content h1>a.link:hover,h2>a.link:hover,h3>a.link:hover,#toctitle>a.link:hover,.sidebarblock>.content>.title>a.link:hover,h4>a.link:hover,h5>a.link:hover,h6>a.link:hover{color:#a53221} +.audioblock,.imageblock,.literalblock,.listingblock,.stemblock,.videoblock{margin-bottom:1.25em} +.admonitionblock td.content>.title,.audioblock>.title,.exampleblock>.title,.imageblock>.title,.listingblock>.title,.literalblock>.title,.stemblock>.title,.openblock>.title,.paragraph>.title,.quoteblock>.title,table.tableblock>.title,.verseblock>.title,.videoblock>.title,.dlist>.title,.olist>.title,.ulist>.title,.qlist>.title,.hdlist>.title{text-rendering:optimizeLegibility;text-align:left;font-family:"Noto Serif","DejaVu Serif",serif;font-size:1rem;font-style:italic} +table.tableblock>caption.title{white-space:nowrap;overflow:visible;max-width:0} +.paragraph.lead>p,#preamble>.sectionbody>.paragraph:first-of-type p{color:rgba(0,0,0,.85)} +table.tableblock #preamble>.sectionbody>.paragraph:first-of-type p{font-size:inherit} +.admonitionblock>table{border-collapse:separate;border:0;background:none;width:100%} +.admonitionblock>table td.icon{text-align:center;width:80px} +.admonitionblock>table td.icon img{max-width:none} +.admonitionblock>table td.icon .title{font-weight:bold;font-family:"Open Sans","DejaVu Sans",sans-serif;text-transform:uppercase} +.admonitionblock>table td.content{padding-left:1.125em;padding-right:1.25em;border-left:1px solid #ddddd8;color:rgba(0,0,0,.6)} +.admonitionblock>table td.content>:last-child>:last-child{margin-bottom:0} +.exampleblock>.content{border-style:solid;border-width:1px;border-color:#e6e6e6;margin-bottom:1.25em;padding:1.25em;background:#fff;-webkit-border-radius:4px;border-radius:4px} +.exampleblock>.content>:first-child{margin-top:0} +.exampleblock>.content>:last-child{margin-bottom:0} +.sidebarblock{border-style:solid;border-width:1px;border-color:#e0e0dc;margin-bottom:1.25em;padding:1.25em;background:#f8f8f7;-webkit-border-radius:4px;border-radius:4px} +.sidebarblock>:first-child{margin-top:0} +.sidebarblock>:last-child{margin-bottom:0} +.sidebarblock>.content>.title{color:#7a2518;margin-top:0;text-align:center} +.exampleblock>.content>:last-child>:last-child,.exampleblock>.content .olist>ol>li:last-child>:last-child,.exampleblock>.content .ulist>ul>li:last-child>:last-child,.exampleblock>.content .qlist>ol>li:last-child>:last-child,.sidebarblock>.content>:last-child>:last-child,.sidebarblock>.content .olist>ol>li:last-child>:last-child,.sidebarblock>.content .ulist>ul>li:last-child>:last-child,.sidebarblock>.content .qlist>ol>li:last-child>:last-child{margin-bottom:0} +.literalblock pre,.listingblock pre:not(.highlight),.listingblock pre[class="highlight"],.listingblock pre[class^="highlight "],.listingblock pre.CodeRay,.listingblock pre.prettyprint{background:#f7f7f8} +.sidebarblock .literalblock pre,.sidebarblock .listingblock pre:not(.highlight),.sidebarblock .listingblock pre[class="highlight"],.sidebarblock .listingblock pre[class^="highlight "],.sidebarblock .listingblock pre.CodeRay,.sidebarblock .listingblock pre.prettyprint{background:#f2f1f1} +.literalblock pre,.literalblock pre[class],.listingblock pre,.listingblock pre[class]{-webkit-border-radius:4px;border-radius:4px;word-wrap:break-word;padding:1em;font-size:.8125em} +.literalblock pre.nowrap,.literalblock pre[class].nowrap,.listingblock pre.nowrap,.listingblock pre[class].nowrap{overflow-x:auto;white-space:pre;word-wrap:normal} +@media only screen and (min-width:768px){.literalblock pre,.literalblock pre[class],.listingblock pre,.listingblock pre[class]{font-size:.90625em}} +@media only screen and (min-width:1280px){.literalblock pre,.literalblock pre[class],.listingblock pre,.listingblock pre[class]{font-size:1em}} +.literalblock.output pre{color:#f7f7f8;background-color:rgba(0,0,0,.9)} +.listingblock pre.highlightjs{padding:0} +.listingblock pre.highlightjs>code{padding:1em;-webkit-border-radius:4px;border-radius:4px} +.listingblock pre.prettyprint{border-width:0} +.listingblock>.content{position:relative} +.listingblock code[data-lang]:before{display:none;content:attr(data-lang);position:absolute;font-size:.75em;top:.425rem;right:.5rem;line-height:1;text-transform:uppercase;color:#999} +.listingblock:hover code[data-lang]:before{display:block} +.listingblock.terminal pre .command:before{content:attr(data-prompt);padding-right:.5em;color:#999} +.listingblock.terminal pre .command:not([data-prompt]):before{content:"$"} +table.pyhltable{border-collapse:separate;border:0;margin-bottom:0;background:none} +table.pyhltable td{vertical-align:top;padding-top:0;padding-bottom:0;line-height:1.45} +table.pyhltable td.code{padding-left:.75em;padding-right:0} +pre.pygments .lineno,table.pyhltable td:not(.code){color:#999;padding-left:0;padding-right:.5em;border-right:1px solid #ddddd8} +pre.pygments .lineno{display:inline-block;margin-right:.25em} +table.pyhltable .linenodiv{background:none!important;padding-right:0!important} +.quoteblock{margin:0 1em 1.25em 1.5em;display:table} +.quoteblock>.title{margin-left:-1.5em;margin-bottom:.75em} +.quoteblock blockquote,.quoteblock blockquote p{color:rgba(0,0,0,.85);font-size:1.15rem;line-height:1.75;word-spacing:.1em;letter-spacing:0;font-style:italic;text-align:justify} +.quoteblock blockquote{margin:0;padding:0;border:0} +.quoteblock blockquote:before{content:"\201c";float:left;font-size:2.75em;font-weight:bold;line-height:.6em;margin-left:-.6em;color:#7a2518;text-shadow:0 1px 2px rgba(0,0,0,.1)} +.quoteblock blockquote>.paragraph:last-child p{margin-bottom:0} +.quoteblock .attribution{margin-top:.5em;margin-right:.5ex;text-align:right} +.quoteblock .quoteblock{margin-left:0;margin-right:0;padding:.5em 0;border-left:3px solid rgba(0,0,0,.6)} +.quoteblock .quoteblock blockquote{padding:0 0 0 .75em} +.quoteblock .quoteblock blockquote:before{display:none} +.verseblock{margin:0 1em 1.25em 1em} +.verseblock pre{font-family:"Open Sans","DejaVu Sans",sans;font-size:1.15rem;color:rgba(0,0,0,.85);font-weight:300;text-rendering:optimizeLegibility} +.verseblock pre strong{font-weight:400} +.verseblock .attribution{margin-top:1.25rem;margin-left:.5ex} +.quoteblock .attribution,.verseblock .attribution{font-size:.9375em;line-height:1.45;font-style:italic} +.quoteblock .attribution br,.verseblock .attribution br{display:none} +.quoteblock .attribution cite,.verseblock .attribution cite{display:block;letter-spacing:-.025em;color:rgba(0,0,0,.6)} +.quoteblock.abstract{margin:0 0 1.25em 0;display:block} +.quoteblock.abstract blockquote,.quoteblock.abstract blockquote p{text-align:left;word-spacing:0} +.quoteblock.abstract blockquote:before,.quoteblock.abstract blockquote p:first-of-type:before{display:none} +table.tableblock{max-width:100%;border-collapse:separate} +table.tableblock td>.paragraph:last-child p>p:last-child,table.tableblock th>p:last-child,table.tableblock td>p:last-child{margin-bottom:0} +table.tableblock,th.tableblock,td.tableblock{border:0 solid #dedede} +table.grid-all th.tableblock,table.grid-all td.tableblock{border-width:0 1px 1px 0} +table.grid-all tfoot>tr>th.tableblock,table.grid-all tfoot>tr>td.tableblock{border-width:1px 1px 0 0} +table.grid-cols th.tableblock,table.grid-cols td.tableblock{border-width:0 1px 0 0} +table.grid-all *>tr>.tableblock:last-child,table.grid-cols *>tr>.tableblock:last-child{border-right-width:0} +table.grid-rows th.tableblock,table.grid-rows td.tableblock{border-width:0 0 1px 0} +table.grid-all tbody>tr:last-child>th.tableblock,table.grid-all tbody>tr:last-child>td.tableblock,table.grid-all thead:last-child>tr>th.tableblock,table.grid-rows tbody>tr:last-child>th.tableblock,table.grid-rows tbody>tr:last-child>td.tableblock,table.grid-rows thead:last-child>tr>th.tableblock{border-bottom-width:0} +table.grid-rows tfoot>tr>th.tableblock,table.grid-rows tfoot>tr>td.tableblock{border-width:1px 0 0 0} +table.frame-all{border-width:1px} +table.frame-sides{border-width:0 1px} +table.frame-topbot{border-width:1px 0} +th.halign-left,td.halign-left{text-align:left} +th.halign-right,td.halign-right{text-align:right} +th.halign-center,td.halign-center{text-align:center} +th.valign-top,td.valign-top{vertical-align:top} +th.valign-bottom,td.valign-bottom{vertical-align:bottom} +th.valign-middle,td.valign-middle{vertical-align:middle} +table thead th,table tfoot th{font-weight:bold} +tbody tr th{display:table-cell;line-height:1.6;background:#f7f8f7} +tbody tr th,tbody tr th p,tfoot tr th,tfoot tr th p{color:rgba(0,0,0,.8);font-weight:bold} +p.tableblock>code:only-child{background:none;padding:0} +p.tableblock{font-size:1em} +td>div.verse{white-space:pre} +ol{margin-left:1.75em} +ul li ol{margin-left:1.5em} +dl dd{margin-left:1.125em} +dl dd:last-child,dl dd:last-child>:last-child{margin-bottom:0} +ol>li p,ul>li p,ul dd,ol dd,.olist .olist,.ulist .ulist,.ulist .olist,.olist .ulist{margin-bottom:.625em} +ul.unstyled,ol.unnumbered,ul.checklist,ul.none{list-style-type:none} +ul.unstyled,ol.unnumbered,ul.checklist{margin-left:.625em} +ul.checklist li>p:first-child>.fa-square-o:first-child,ul.checklist li>p:first-child>.fa-check-square-o:first-child{width:1em;font-size:.85em} +ul.checklist li>p:first-child>input[type="checkbox"]:first-child{width:1em;position:relative;top:1px} +ul.inline{margin:0 auto .625em auto;margin-left:-1.375em;margin-right:0;padding:0;list-style:none;overflow:hidden} +ul.inline>li{list-style:none;float:left;margin-left:1.375em;display:block} +ul.inline>li>*{display:block} +.unstyled dl dt{font-weight:400;font-style:normal} +ol.arabic{list-style-type:decimal} +ol.decimal{list-style-type:decimal-leading-zero} +ol.loweralpha{list-style-type:lower-alpha} +ol.upperalpha{list-style-type:upper-alpha} +ol.lowerroman{list-style-type:lower-roman} +ol.upperroman{list-style-type:upper-roman} +ol.lowergreek{list-style-type:lower-greek} +.hdlist>table,.colist>table{border:0;background:none} +.hdlist>table>tbody>tr,.colist>table>tbody>tr{background:none} +td.hdlist1,td.hdlist2{vertical-align:top;padding:0 .625em} +td.hdlist1{font-weight:bold;padding-bottom:1.25em} +.literalblock+.colist,.listingblock+.colist{margin-top:-.5em} +.colist>table tr>td:first-of-type{padding:0 .75em;line-height:1} +.colist>table tr>td:last-of-type{padding:.25em 0} +.thumb,.th{line-height:0;display:inline-block;border:solid 4px #fff;-webkit-box-shadow:0 0 0 1px #ddd;box-shadow:0 0 0 1px #ddd} +.imageblock.left,.imageblock[style*="float: left"]{margin:.25em .625em 1.25em 0} +.imageblock.right,.imageblock[style*="float: right"]{margin:.25em 0 1.25em .625em} +.imageblock>.title{margin-bottom:0} +.imageblock.thumb,.imageblock.th{border-width:6px} +.imageblock.thumb>.title,.imageblock.th>.title{padding:0 .125em} +.image.left,.image.right{margin-top:.25em;margin-bottom:.25em;display:inline-block;line-height:0} +.image.left{margin-right:.625em} +.image.right{margin-left:.625em} +a.image{text-decoration:none;display:inline-block} +a.image object{pointer-events:none} +sup.footnote,sup.footnoteref{font-size:.875em;position:static;vertical-align:super} +sup.footnote a,sup.footnoteref a{text-decoration:none} +sup.footnote a:active,sup.footnoteref a:active{text-decoration:underline} +#footnotes{padding-top:.75em;padding-bottom:.75em;margin-bottom:.625em} +#footnotes hr{width:20%;min-width:6.25em;margin:-.25em 0 .75em 0;border-width:1px 0 0 0} +#footnotes .footnote{padding:0 .375em 0 .225em;line-height:1.3334;font-size:.875em;margin-left:1.2em;text-indent:-1.05em;margin-bottom:.2em} +#footnotes .footnote a:first-of-type{font-weight:bold;text-decoration:none} +#footnotes .footnote:last-of-type{margin-bottom:0} +#content #footnotes{margin-top:-.625em;margin-bottom:0;padding:.75em 0} +.gist .file-data>table{border:0;background:#fff;width:100%;margin-bottom:0} +.gist .file-data>table td.line-data{width:99%} +div.unbreakable{page-break-inside:avoid} +.big{font-size:larger} +.small{font-size:smaller} +.underline{text-decoration:underline} +.overline{text-decoration:overline} +.line-through{text-decoration:line-through} +.aqua{color:#00bfbf} +.aqua-background{background-color:#00fafa} +.black{color:#000} +.black-background{background-color:#000} +.blue{color:#0000bf} +.blue-background{background-color:#0000fa} +.fuchsia{color:#bf00bf} +.fuchsia-background{background-color:#fa00fa} +.gray{color:#606060} +.gray-background{background-color:#7d7d7d} +.green{color:#006000} +.green-background{background-color:#007d00} +.lime{color:#00bf00} +.lime-background{background-color:#00fa00} +.maroon{color:#600000} +.maroon-background{background-color:#7d0000} +.navy{color:#000060} +.navy-background{background-color:#00007d} +.olive{color:#606000} +.olive-background{background-color:#7d7d00} +.purple{color:#600060} +.purple-background{background-color:#7d007d} +.red{color:#bf0000} +.red-background{background-color:#fa0000} +.silver{color:#909090} +.silver-background{background-color:#bcbcbc} +.teal{color:#006060} +.teal-background{background-color:#007d7d} +.white{color:#bfbfbf} +.white-background{background-color:#fafafa} +.yellow{color:#bfbf00} +.yellow-background{background-color:#fafa00} +span.icon>.fa{cursor:default} +.admonitionblock td.icon [class^="fa icon-"]{font-size:2.5em;text-shadow:1px 1px 2px rgba(0,0,0,.5);cursor:default} +.admonitionblock td.icon .icon-note:before{content:"\f05a";color:#19407c} +.admonitionblock td.icon .icon-tip:before{content:"\f0eb";text-shadow:1px 1px 2px rgba(155,155,0,.8);color:#111} +.admonitionblock td.icon .icon-warning:before{content:"\f071";color:#bf6900} +.admonitionblock td.icon .icon-caution:before{content:"\f06d";color:#bf3400} +.admonitionblock td.icon .icon-important:before{content:"\f06a";color:#bf0000} +.conum[data-value]{display:inline-block;color:#fff!important;background-color:rgba(0,0,0,.8);-webkit-border-radius:100px;border-radius:100px;text-align:center;font-size:.75em;width:1.67em;height:1.67em;line-height:1.67em;font-family:"Open Sans","DejaVu Sans",sans-serif;font-style:normal;font-weight:bold} +.conum[data-value] *{color:#fff!important} +.conum[data-value]+b{display:none} +.conum[data-value]:after{content:attr(data-value)} +pre .conum[data-value]{position:relative;top:-.125em} +b.conum *{color:inherit!important} +.conum:not([data-value]):empty{display:none} +dt,th.tableblock,td.content,div.footnote{text-rendering:optimizeLegibility} +h1,h2,p,td.content,span.alt{letter-spacing:-.01em} +p strong,td.content strong,div.footnote strong{letter-spacing:-.005em} +p,blockquote,dt,td.content,span.alt{font-size:1.0625rem} +p{margin-bottom:1.25rem} +.sidebarblock p,.sidebarblock dt,.sidebarblock td.content,p.tableblock{font-size:1em} +.exampleblock>.content{background-color:#fffef7;border-color:#e0e0dc;-webkit-box-shadow:0 1px 4px #e0e0dc;box-shadow:0 1px 4px #e0e0dc} +.print-only{display:none!important} +@media print{@page{margin:1.25cm .75cm} +*{-webkit-box-shadow:none!important;box-shadow:none!important;text-shadow:none!important} +a{color:inherit!important;text-decoration:underline!important} +a.bare,a[href^="#"],a[href^="mailto:"]{text-decoration:none!important} +a[href^="http:"]:not(.bare):after,a[href^="https:"]:not(.bare):after{content:"(" attr(href) ")";display:inline-block;font-size:.875em;padding-left:.25em} +abbr[title]:after{content:" (" attr(title) ")"} +pre,blockquote,tr,img,object,svg{page-break-inside:avoid} +thead{display:table-header-group} +svg{max-width:100%} +p,blockquote,dt,td.content{font-size:1em;orphans:3;widows:3} +h2,h3,#toctitle,.sidebarblock>.content>.title{page-break-after:avoid} +#toc,.sidebarblock,.exampleblock>.content{background:none!important} +#toc{border-bottom:1px solid #ddddd8!important;padding-bottom:0!important} +.sect1{padding-bottom:0!important} +.sect1+.sect1{border:0!important} +#header>h1:first-child{margin-top:1.25rem} +body.book #header{text-align:center} +body.book #header>h1:first-child{border:0!important;margin:2.5em 0 1em 0} +body.book #header .details{border:0!important;display:block;padding:0!important} +body.book #header .details span:first-child{margin-left:0!important} +body.book #header .details br{display:block} +body.book #header .details br+span:before{content:none!important} +body.book #toc{border:0!important;text-align:left!important;padding:0!important;margin:0!important} +body.book #toc,body.book #preamble,body.book h1.sect0,body.book .sect1>h2{page-break-before:always} +.listingblock code[data-lang]:before{display:block} +#footer{background:none!important;padding:0 .9375em} +#footer-text{color:rgba(0,0,0,.6)!important;font-size:.9em} +.hide-on-print{display:none!important} +.print-only{display:block!important} +.hide-for-print{display:none!important} +.show-for-print{display:inherit!important}} \ No newline at end of file diff --git a/src/main/docs/installation/installation.adoc b/src/main/docs/installation/installation.adoc new file mode 100644 index 0000000..b1caebe --- /dev/null +++ b/src/main/docs/installation/installation.adoc @@ -0,0 +1,173 @@ +//// +/** + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +//// + +[[intro_installation]] += Installation Choices +:Author: Apache HBase Team +:Email: +:doctype: book + +This chapter provides information on installing HBase from binary packages or from +source. Review the prerequisites carefully before you begin. This chapter does not +go into exhaustive details. + +== HBase Prerequisites + +Before installing HBase, you must meet these prerequisites: + +- A Java 1.7 or 1.8 JDK must be installed. See <> + for information on compatible Java versions for specific HBase versions. +- The `JAVA_HOME` environment variable must be set to the `bin/` directory that contains + the `java` binary. If `JAVA_HOME` is unset, or is not set correctly, HBase processes + will not start. +- For production environments, an appropriate version of Apache HDFS (TM) must be + installed and configured. See <> for information + on compatible Hadoop and HDFS versions for specific HBase versions. +- For production environments, an appropriate version of Apache ZooKeeper (TM) must + be installed and configured. See <>. +- HBase does not require special operating system access. You should run HBase as + an unprivileged user, perhaps with the username `hbase`. +- Installing HBase from binary packages or fulfilling other prerequisites may + require administrative access. +- To install HBase from source, link:https://maven.apache.org/[Apache Maven] 3 or + higher is required. +- Have a look through <> for other notes and advice. + +[[installation_binary]] +== Installing a Java Binary + +To install a Java binary: + +. Download and extract it from an link:http://www.apache.org/dyn/closer.cgi/hbase/[Apache mirror]. +. Change into the new directory. +. Set the `JAVA_HOME` environment variable to the `bin/` directory which contains +the `java` binary. ++ +---- +# First, find the location of the Java binary +$ readlink -f `which java` + /usr/lib/jvm/java-7-oracle/bin/java + +# Next, set JAVA_HOME to that value, leaving off the 'bin/java'. This value is only an example! +$ export JAVA_HOME="/usr/lib/jvm/java-7-oracle" +---- + +[[installation_os_package]] +== Installing HBase from Operating System Packages + +Apache HBase packages are available for most Linux distributions, though the HBase +version tends to lag behind the Apache HBase project. Typically, multiple +packages are available for different parts of HBase, such as the master, RegionServers, +REST server, and Thrift server. A meta-package may be available to install all HBase-related +packages automatically. Check your operating system's vendor for details. The following +instructions provide an overview of installing HBase in RHEL and Ubuntu. + +[[installation_rhel]] +=== Installing HBase on RHEL + +. Set the `JAVA_HOME` environment variable to the `bin/` directory which contains +the `java` binary. ++ +---- +# First, find the location of the Java binary +$ readlink -f `which java` + /usr/lib/jvm/java-1.7.0-openjdk-1.7.0.79.x86_64/jre/bin/java + +# Next, set JAVA_HOME to that value, leaving off the 'bin/java'. This value is only an example! +$ export JAVA_HOME="/usr/lib/jvm/java-1.7.0-openjdk-1.7.0.79.x86_64/jre" +---- + +. Install the `hbase` meta-package. ++ +---- +$ sudo yum install hbase +---- + +[[installation_ubuntu]] +=== Installing HBase on Ubuntu + +. Set the `JAVA_HOME` environment variable to the `bin/` directory which contains +the `java` binary. ++ +---- +# First, find the location of the Java binary +$ readlink -f `which java` + /usr/lib/jvm/java-7-oracle/bin/java + +# Next, set JAVA_HOME to that value, leaving off the 'bin/java'. This value is only an example! +$ export JAVA_HOME="/usr/lib/jvm/java-7-oracle" +---- + +. Install the `hbase` meta-package. ++ +---- +$ sudo yum install hbase +---- + +[[installation_hadoop_vendor]] +== Installing HBase from a Hadoop Vendor + +HBase is provided as part of every commercially-supported Hadoop vendor's offerings. +To install HBase using your Hadoop vendor's mechanism, consult your Hadoop vendor's +documentation. + +[[installation_source]] +== Installing HBase from Source + +Installing HBase from source provides the most flexibility. Installation into Linux or OSX (for testing only) +are the most common scenarios. Installation into Microsoft Windows is out of scope for this chapter. + +NOTE:Apache Maven is required to install HBase from source. Install it using your +operating system's instructions or by following the +link:https://maven.apache.org/download.cgi#Installation[Maven documentation], +and ensure that the `mvn` command is in your operating system path. + +. Obtain the source by cloning the link:https://git-wip-us.apache.org/repos/asf?p=hbase.git[Git repository] + or downloading and extracting a source archive from an link:http://www.apache.org/dyn/closer.cgi/hbase/[Apache mirror]. + +. Set the `JAVA_HOME` environment variable to the `bin/` directory which contains + the `java` binary. ++ +---- +# First, find the location of the Java binary +$ readlink -f `which java` + /usr/lib/jvm/java-7-oracle/bin/java + +# Next, set JAVA_HOME to that value, leaving off the 'bin/java'. This value is only an example! +$ export JAVA_HOME="/usr/lib/jvm/java-7-oracle" +---- + +. Set the following Maven options. ++ +---- +$ export MAVEN_OPTS=-XX:MaxPermSize=256m +---- + +. Within the `hbase` directory, run the following Maven command: ++ +---- +$ mvn clean install -DskipTests +---- + +[[intro_installation_next_steps]] +== Next Steps + +Now that HBase is installed, you can continue to the <>. \ No newline at end of file diff --git a/src/main/docs/installation/intro.adoc b/src/main/docs/installation/intro.adoc new file mode 100644 index 0000000..5c19770 --- /dev/null +++ b/src/main/docs/installation/intro.adoc @@ -0,0 +1,122 @@ +//// +/** + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +//// + += Apache HBase (TM) Installation and Quickstart +:Author: Apache HBase Team +:Email: +:doctype: book +:Version: {docVersion} +:revnumber: {docVersion} +// Logo for PDF -- doesn't render in HTML +:title-logo: hbase_logo_with_orca.png +:numbered: +:toc: left +:sectanchors: +:icons: font +:iconsdir: icons +:linkcss: +:experimental: + +// Logo for HTML -- doesn't render in PDF +++++ +
+ Apache HBase Logo +
+++++ + +Apache HBase (TM) is a distributed, scalable, row-based data store designed for the +Apache Hadoop (TM) ecosystem. HBase is an open source project, licensed under the +link:http://www.apache.org/licenses/LICENSE-2.0[ASL]. Open and active community +participation of all kinds is encouraged. + +NOTE:This guide is a work in progress, repurposing some content found in the +link:/book.html[the HBase Reference Guide]. + +[[intro_overview]] +== HBase Overview + +HBase is a faithful implementation of +link:http://static.googleusercontent.com/media/research.google.com/en//archive/bigtable-osdi06.pdf[Bigtable: A Distributed Storage System for Structured Data], +built on top of Apache HDFS (TM). The white paper is short and easy to understand, +and provides some context into the types of problems that this type of database solves. + +[[intro_overview_features]] +=== Feature Highlights + +HBase provides these features and more: + +* Linear and modular scalability. To scale your cluster, add RegionServers. +* Ability to store and address exabytes (or more) of data sparsely (nulls do not take +up space). +* Strictly link:https://en.wikipedia.org/wiki/CAP_theorem[consistent] reads and writes +by default. +* Automatic and configurable sharding of tables, by means of _regions_. +* Automatic failover support between RegionServers. +* APIs which provide tight integration with MapReduce. +* Java APIs, a REST API, Thrift bindings, and a command-line interface for flexible + integration with your existing systems and programming environments. +* Support for data import and export using XML, protocol buffers, JSON, and binary + data encoding systems. +* link:https://en.wikipedia.org/wiki/ACID[ACID] semantic guarantees at the row level. +* Security controls for authentication, authorization, encryption of data in flight + and at rest, access control lists, and secure import, export, and replication. +* Block cache to make efficient use of all the memory in your cluster. +* Bloom Filters for efficient real-time queries. +* Query predicate push-down via server-side filters to streamline network usage. +* Metrics which can be analyzed and tracked using the Hadoop metrics subsystem, Ganglia, + or JMX. +* Web-based UIs for Masters and RegionServers. + +[[intro_overview_hbase_is_not]] +=== HBase Is Not... + +* HBase is not for "small data". If you can fit your data into gigabytes of storage, + using only thousands of rows, HBase is probably not the right solution. +* HBase is not a relational database. Instead, HBase is a row-based key-value store. +* HBase is not optimized for monotonically-increasing row keys. Instead, your row + key design is the most important part of your schema design, and your schema in HBase + will differ significantly from the schema you might use in a RDBMS. +* HBase is not designed to store large records efficiently. Specifically, HBase works + best with records smaller than 100 KB, or 10 MB with Medium Object (MOB) support. +* HBase is not a multi-row transactional database. +* HBase is not a one-size-fits-all solution. It will take time and testing to obtain + optimal performance from HBase. + +[[intro_overview_next_steps]] +=== Next Steps + +Now that you have a basic understanding of what HBase is and what it is used for, +you can <> and go through the +<>, which helps you install and get familiar with using HBase +in a series of short exercises. At the end of the quickstart, you will be ready +to begin designing HBase solutions for use in your business applications. + +:leveloffset: 1 + +include::installation.adoc[] + +include::quickstart.adoc[] + +include::next_steps.adoc[] + +include::appendix.adoc[] + +:leveloffset: 0 diff --git a/src/main/docs/installation/intro.html b/src/main/docs/installation/intro.html new file mode 100644 index 0000000..7940875 --- /dev/null +++ b/src/main/docs/installation/intro.html @@ -0,0 +1,1866 @@ + + + + + + + + +Apache HBase ™ Installation and Quickstart + + + + + + +
+
+
+
+ Apache HBase Logo +
+
+

Apache HBase ™ is a distributed, scalable, row-based data store designed for the +Apache Hadoop ™ ecosystem. HBase is an open source project, licensed under the +ASL. Open and active community +participation of all kinds is encouraged.

+
+
+

NOTE:This guide is a work in progress, repurposing some content found in the +the HBase Reference Guide.

+
+
+
+
+

1. HBase Overview

+
+
+

HBase is a faithful implementation of +Bigtable: A Distributed Storage System for Structured Data, +built on top of Apache HDFS ™. The white paper is short and easy to understand, +and provides some context into the types of problems that this type of database solves.

+
+
+

1.1. Feature Highlights

+
+

HBase provides these features and more:

+
+
+
    +
  • +

    Linear and modular scalability. To scale your cluster, add RegionServers.

    +
  • +
  • +

    Ability to store and address exabytes (or more) of data sparsely (nulls do not take +up space).

    +
  • +
  • +

    Strictly consistent reads and writes +by default.

    +
  • +
  • +

    Automatic and configurable sharding of tables, by means of regions.

    +
  • +
  • +

    Automatic failover support between RegionServers.

    +
  • +
  • +

    APIs which provide tight integration with MapReduce.

    +
  • +
  • +

    Java APIs, a REST API, Thrift bindings, and a command-line interface for flexible +integration with your existing systems and programming environments.

    +
  • +
  • +

    Support for data import and export using XML, protocol buffers, JSON, and binary +data encoding systems.

    +
  • +
  • +

    ACID semantic guarantees at the row level.

    +
  • +
  • +

    Security controls for authentication, authorization, encryption of data in flight +and at rest, access control lists, and secure import, export, and replication.

    +
  • +
  • +

    Block cache to make efficient use of all the memory in your cluster.

    +
  • +
  • +

    Bloom Filters for efficient real-time queries.

    +
  • +
  • +

    Query predicate push-down via server-side filters to streamline network usage.

    +
  • +
  • +

    Metrics which can be analyzed and tracked using the Hadoop metrics subsystem, Ganglia, +or JMX.

    +
  • +
  • +

    Web-based UIs for Masters and RegionServers.

    +
  • +
+
+
+
+

1.2. HBase Is Not…​

+
+
    +
  • +

    HBase is not for "small data". If you can fit your data into gigabytes of storage, +using only thousands of rows, HBase is probably not the right solution.

    +
  • +
  • +

    HBase is not a relational database. Instead, HBase is a row-based key-value store.

    +
  • +
  • +

    HBase is not optimized for monotonically-increasing row keys. Instead, your row +key design is the most important part of your schema design, and your schema in HBase +will differ significantly from the schema you might use in a RDBMS.

    +
  • +
  • +

    HBase is not designed to store large records efficiently. Specifically, HBase works +best with records smaller than 100 KB, or 10 MB with Medium Object (MOB) support.

    +
  • +
  • +

    HBase is not a multi-row transactional database.

    +
  • +
  • +

    HBase is not a one-size-fits-all solution. It will take time and testing to obtain +optimal performance from HBase.

    +
  • +
+
+
+
+

1.3. Next Steps

+
+

Now that you have a basic understanding of what HBase is and what it is used for, +you can install HBase and go through the +Quickstart, which helps you install and get familiar with using HBase +in a series of short exercises. At the end of the quickstart, you will be ready +to begin designing HBase solutions for use in your business applications.

+
+
+
+
+
+

2. Installation Choices

+
+
+

This chapter provides information on installing HBase from binary packages or from +source. Review the prerequisites carefully before you begin. This chapter does not +go into exhaustive details.

+
+
+

2.1. HBase Prerequisites

+
+

Before installing HBase, you must meet these prerequisites:

+
+
+
    +
  • +

    A Java 1.7 or 1.8 JDK must be installed. See HBase Java Compatibility Notes +for information on compatible Java versions for specific HBase versions.

    +
  • +
  • +

    The JAVA_HOME environment variable must be set to the bin/ directory that contains +the java binary. If JAVA_HOME is unset, or is not set correctly, HBase processes +will not start.

    +
  • +
  • +

    For production environments, an appropriate version of Apache HDFS ™ must be +installed and configured. See HBase Hadoop Compatibility Notes for information +on compatible Hadoop and HDFS versions for specific HBase versions.

    +
  • +
  • +

    For production environments, an appropriate version of Apache ZooKeeper ™ must +be installed and configured. See HBase ZooKeeper Compatibility Notes.

    +
  • +
  • +

    HBase does not require special operating system access. You should run HBase as +an unprivileged user, perhaps with the username hbase.

    +
  • +
  • +

    Installing HBase from binary packages or fulfilling other prerequisites may +require administrative access.

    +
  • +
  • +

    To install HBase from source, Apache Maven 3 or +higher is required.

    +
  • +
  • +

    Have a look through Installation Notes for other notes and advice.

    +
  • +
+
+
+
+

2.2. Installing a Java Binary

+
+

To install a Java binary:

+
+
+
    +
  1. +

    Download and extract it from an Apache mirror.

    +
  2. +
  3. +

    Change into the new directory.

    +
  4. +
  5. +

    Set the JAVA_HOME environment variable to the bin/ directory which contains +the java binary.

    +
    +
    +
    # First, find the location of the Java binary
    +$ readlink -f `which java`
    +  /usr/lib/jvm/java-7-oracle/bin/java
    +
    +# Next, set JAVA_HOME to that value, leaving off the 'bin/java'. This value is only an example!
    +$ export JAVA_HOME="/usr/lib/jvm/java-7-oracle"
    +
    +
    +
  6. +
+
+
+
+

2.3. Installing HBase from Operating System Packages

+
+

Apache HBase packages are available for most Linux distributions, though the HBase +version tends to lag behind the Apache HBase project. Typically, multiple +packages are available for different parts of HBase, such as the master, RegionServers, +REST server, and Thrift server. A meta-package may be available to install all HBase-related +packages automatically. Check your operating system’s vendor for details. The following +instructions provide an overview of installing HBase in RHEL and Ubuntu.

+
+
+

2.3.1. Installing HBase on RHEL

+
+
    +
  1. +

    Set the JAVA_HOME environment variable to the bin/ directory which contains +the java binary.

    +
    +
    +
    # First, find the location of the Java binary
    +$ readlink -f `which java`
    +  /usr/lib/jvm/java-1.7.0-openjdk-1.7.0.79.x86_64/jre/bin/java
    +
    +# Next, set JAVA_HOME to that value, leaving off the 'bin/java'. This value is only an example!
    +$ export JAVA_HOME="/usr/lib/jvm/java-1.7.0-openjdk-1.7.0.79.x86_64/jre"
    +
    +
    +
  2. +
  3. +

    Install the hbase meta-package.

    +
    +
    +
    $ sudo yum install hbase
    +
    +
    +
  4. +
+
+
+
+

2.3.2. Installing HBase on Ubuntu

+
+
    +
  1. +

    Set the JAVA_HOME environment variable to the bin/ directory which contains +the java binary.

    +
    +
    +
    # First, find the location of the Java binary
    +$ readlink -f `which java`
    +  /usr/lib/jvm/java-7-oracle/bin/java
    +
    +# Next, set JAVA_HOME to that value, leaving off the 'bin/java'. This value is only an example!
    +$ export JAVA_HOME="/usr/lib/jvm/java-7-oracle"
    +
    +
    +
  2. +
  3. +

    Install the hbase meta-package.

    +
    +
    +
    $ sudo yum install hbase
    +
    +
    +
  4. +
+
+
+
+
+

2.4. Installing HBase from a Hadoop Vendor

+
+

HBase is provided as part of every commercially-supported Hadoop vendor’s offerings. +To install HBase using your Hadoop vendor’s mechanism, consult your Hadoop vendor’s +documentation.

+
+
+
+

2.5. Installing HBase from Source

+
+

Installing HBase from source provides the most flexibility. Installation into Linux or OSX (for testing only) +are the most common scenarios. Installation into Microsoft Windows is out of scope for this chapter.

+
+
+

NOTE:Apache Maven is required to install HBase from source. Install it using your +operating system’s instructions or by following the +Maven documentation, +and ensure that the mvn command is in your operating system path.

+
+
+
    +
  1. +

    Obtain the source by cloning the Git repository +or downloading and extracting a source archive from an Apache mirror.

    +
  2. +
  3. +

    Set the JAVA_HOME environment variable to the bin/ directory which contains +the java binary.

    +
    +
    +
    # First, find the location of the Java binary
    +$ readlink -f `which java`
    +  /usr/lib/jvm/java-7-oracle/bin/java
    +
    +# Next, set JAVA_HOME to that value, leaving off the 'bin/java'. This value is only an example!
    +$ export JAVA_HOME="/usr/lib/jvm/java-7-oracle"
    +
    +
    +
  4. +
  5. +

    Set the following Maven options.

    +
    +
    +
    $ export MAVEN_OPTS=-XX:MaxPermSize=256m
    +
    +
    +
  6. +
  7. +

    Within the hbase directory, run the following Maven command:

    +
    +
    +
    $ mvn clean install -DskipTests
    +
    +
    +
  8. +
+
+
+
+

2.6. Next Steps

+
+

Now that HBase is installed, you can continue to the Quickstart.

+
+
+
+
+
+

3. Quickstart

+
+
+

3.1. Quickstart Overview

+
+

This chapter will get you up and running on a single-node, standalone instance of +HBase, followed by a pseudo-distributed single-machine instance, and finally a fully-distributed +cluster ready for further testing and proofs of concept. You will learn how configure +HBase and how to write to and read from it. Each of the exercises includes a +list of prerequisites and steps.

+
+
+

3.1.1. Quickstart Limitations

+
+
    +
  • +

    This quickstart does not address security configuration. Before your cluster can +be considered production-ready, you must configure security.

    +
  • +
  • +

    This quickstart does not address row key design or other aspects of table schema +design. Row key design is absolutely crucial to getting acceptable performance +from HBase, and there is no one-size-fits-all approach.

    +
  • +
+
+
+
+

3.1.2. Prerequisites

+
+

This quickstart assumes that you have fulfilled the prerequisites and installed +HBase using one of the methods in +Installation Choices.

+
+
+
+
+

3.2. Single-Host Standalone Configuration

+
+

At the end of this exercise, you will have a single-host standalone HBase configuration. +All HBase process will be running in a single JVM on your host.

+
+
+ + + + + +
+ + +This type of configuration is only useful as a learning exercise and for +basic testing. Data stored on a local filesystem is not durable against process +or server crashes and is not highly available. +
+
+
+

3.2.1. Configure HBase

+
+
    +
  1. +

    Open the configuration file conf/hbase-site.xml in a text editor. If this file does not exist, +create it first.

    +
  2. +
  3. +

    HBase uses a configuration pattern familiar within the Hadoop ecosystem. You only +need to configure items that differ from the defaults. A configuration key consists +of a <property> element which contains a <name> element, a <value> element, +and an optional <description> element. There are many configurable properties in +HBase, and most of them are documented in conf/hbase-default.xml. Don’t worry about +any besides the ones mentioned in these exercises, for now.

    +
  4. +
  5. +

    Paste the following into conf/hbase-site.xml.

    +
    +
    +
    <configuration>
    +  <property>
    +    <name>hbase.rootdir</name>
    +    <value>file:///home/testuser/hbase</value>
    +    <description>The location where HBase stores data files.</description>
    +  </property>
    +  <property>
    +    <name>hbase.zookeeper.property.dataDir</name>
    +    <value>/home/testuser/zookeeper</value>
    +    <description>The location where ZooKeeper stores its data.</description>
    +  </property>
    +</configuration>
    +
    +
    +
    +

    Change the path and username in the <value> element to match your test user and +path. The hbase and zookeeper paths do not need to exist. Save and close the file.

    +
    +
  6. +
+
+
+
+

3.2.2. Start HBase

+
+

Start HBase using the bin/start-hbase.sh script:

+
+
+
+
$ bin/start-hbase.sh
+
+
+
+

Use the jps command to verify that the HBase processes are running.

+
+
+
+

3.2.3. Use HBase Shell

+
+
    +
  1. +

    Run the HBase Shell so that you can interactively use HBase. In the remaining exercises, +the HBase shell prompt is indicated by hbase>, and the operating system prompt is +indicated by $.

    +
    +
    +
    $ bin/hbase shell
    +
    +hbase>
    +
    +
    +
  2. +
  3. +

    Display HBase Shell Help Text.

    +
    +

    Type help and press Enter, to display some basic usage information for HBase Shell, as well as several example commands. +Notice that table names, rows, columns all must be enclosed in quote characters.

    +
    +
  4. +
  5. +

    Create a table.

    +
    +

    Use the create command to create a new table. +You must specify the table name and the ColumnFamily name.

    +
    +
    +
    +
    hbase(main):001:0> create 'test', 'cf'
    +0 row(s) in 0.4170 seconds
    +
    +=> Hbase::Table - test
    +
    +
    +
  6. +
  7. +

    List Information About your Table

    +
    +

    Use the list command to

    +
    +
    +
    +
    hbase(main):002:0> list 'test'
    +TABLE
    +test
    +1 row(s) in 0.0180 seconds
    +
    +=> ["test"]
    +
    +
    +
  8. +
  9. +

    Put data into your table.

    +
    +

    To put data into your table, use the put command.

    +
    +
    +
    +
    hbase(main):003:0> put 'test', 'row1', 'cf:a', 'value1'
    +0 row(s) in 0.0850 seconds
    +
    +hbase(main):004:0> put 'test', 'row2', 'cf:b', 'value2'
    +0 row(s) in 0.0110 seconds
    +
    +hbase(main):005:0> put 'test', 'row3', 'cf:c', 'value3'
    +0 row(s) in 0.0100 seconds
    +
    +
    +
    +

    Here, we insert three values, one at a time. +The first insert is at row1, column cf:a, with a value of value1. +Columns in HBase are comprised of a column family prefix, cf in this example, +followed by a colon and then a column qualifier suffix, a in this case.

    +
    +
  10. +
  11. +

    Scan the table for all data at once.

    +
    +

    One of the ways to get data from HBase is to scan. +Use the scan command to scan the table for data. +You can limit your scan, but for now, all data is fetched.

    +
    +
    +
    +
    hbase(main):006:0> scan 'test'
    +ROW                                      COLUMN+CELL
    + row1                                    column=cf:a, timestamp=1421762485768, value=value1
    + row2                                    column=cf:b, timestamp=1421762491785, value=value2
    + row3                                    column=cf:c, timestamp=1421762496210, value=value3
    +3 row(s) in 0.0230 seconds
    +
    +
    +
  12. +
  13. +

    Get a single row of data.

    +
    +

    To get a single row of data at a time, use the get command.

    +
    +
    +
    +
    hbase(main):007:0> get 'test', 'row1'
    +COLUMN                                   CELL
    + cf:a                                    timestamp=1421762485768, value=value1
    +1 row(s) in 0.0350 seconds
    +
    +
    +
  14. +
  15. +

    Disable a table.

    +
    +

    If you want to delete a table or change its settings, as well as in some other +situations, you need to disable the table first, using the disable command. +You can re-enable it using the enable command.

    +
    +
    +
    +
    hbase(main):008:0> disable 'test'
    +0 row(s) in 1.1820 seconds
    +
    +hbase(main):009:0> enable 'test'
    +0 row(s) in 0.1770 seconds
    +
    +
    +
    +

    Disable the table again if you tested the enable command above:

    +
    +
    +
    +
    hbase(main):010:0> disable 'test'
    +0 row(s) in 1.1820 seconds
    +
    +
    +
  16. +
  17. +

    Drop the table.

    +
    +

    To drop (delete) a table, use the drop command.

    +
    +
    +
    +
    hbase(main):011:0> drop 'test'
    +0 row(s) in 0.1370 seconds
    +
    +
    +
  18. +
  19. +

    Exit the HBase Shell.

    +
    +

    To exit the HBase Shell and disconnect from your cluster, use the quit command. +HBase is still running in the background.

    +
    +
  20. +
+
+
+
+

3.2.4. Stop HBase

+
+

To stop all HBase processes, use the bin/stop-hbase.sh.

+
+
+
+
$ ./bin/stop-hbase.sh
+
+
+
+

After issuing the command, it can take several minutes for the processes to shut down. +Use the jps to be sure that the HMaster and HRegionServer processes are shut down.

+
+
+
+

3.2.5. Remove HBase Data

+
+

If you want to remove all the HBase data you created in this exercise, remove the +/home/testuser/hbase and /home/testuser/zookeeper directories (or the ones you +specified in your configuration) after HBase has completely shut down.

+
+
+
+
+

3.3. Single-Host Pseudo-Distributed Configuration

+
+

After completing Single-Host Standalone Configuration, you can re-configure HBase to +run in pseudo-distributed mode. In pseudo-distributed mode, HBase still runs +completely on a single host, but each HBase daemon (HMaster, HRegionServer, +and ZooKeeper) runs as a separate process.

+
+
+

This exercise also stores your data in HDFS, though durability and high availability +depend upon your HDFS installation being configured to use multiple dataNodes and +a replication factor of at least 3. You can skip the HDFS configuration to continue +storing your data in the local filesystem.

+
+
+

The last few steps of this exercise add a pseudo-high-availability factor to HMasters +and RegionServers. This is not true high availability as all processes are running +on a single host, and is only appropriate for testing.

+
+
+ + + + + +
+ + +
Hadoop Configuration
+
+

This procedure assumes that you have configured Hadoop and HDFS on your local system and/or a remote +system, and that they are running and available. It also assumes you are using Hadoop 2. +The guide on +Setting up a Single Node Cluster +in the Hadoop documentation is a good starting point.

+
+
+
+
+

3.3.1. Stop HBase if it is running.

+
+

+ +If you have just finished quickstart and HBase is still running, stop it. +If you are adding HDFS support, this procedure will create a totally new directory +where HBase will store its data, so any databases you created before will be ignored.

+
+
+
+

3.3.2. Configure HBase.

+
+

Edit the conf/hbase-site.xml configuration file from the previous exercise.

+
+
+
    +
  1. +

    First, add the following property. +which directs HBase to run in distributed mode, with one JVM instance per daemon.

    +
    +
    +
    <property>
    +  <name>hbase.cluster.distributed</name>
    +  <value>true</value>
    +</property>
    +
    +
    +
  2. +
  3. +

    Next, change the hbase.rootdir from the local filesystem to the address of +your HDFS instance, using the hdfs://// URI syntax. In this example, HDFS is +running on localhost at port 8020.

    +
    +
    +
    <property>
    +  <name>hbase.rootdir</name>
    +  <value>hdfs://localhost:8020/hbase</value>
    +</property>
    +
    +
    +
    +

    Do not create the directory in HDFS. HBase will do this for you.

    +
    +
  4. +
+
+
+
+

3.3.3. Start HBase.

+
+

Use the bin/start-hbase.sh command to start HBase. +If your system is configured correctly, the jps command should show the +HMaster and HRegionServer processes running.

+
+
+
+

3.3.4. Verify HDFS

+
+

If you chose to configure HDFS, check that the hbase directory was created. +If everything worked correctly, you can use the hadoop fs command in Hadoop’s +bin/ directory to list this directory. The listing should look similar to this:

+
+
+
+
$ ./bin/hadoop fs -ls /hbase
+Found 7 items
+drwxr-xr-x   - hbase users          0 2014-06-25 18:58 /hbase/.tmp
+drwxr-xr-x   - hbase users          0 2014-06-25 21:49 /hbase/WALs
+drwxr-xr-x   - hbase users          0 2014-06-25 18:48 /hbase/corrupt
+drwxr-xr-x   - hbase users          0 2014-06-25 18:58 /hbase/data
+-rw-r--r--   3 hbase users         42 2014-06-25 18:41 /hbase/hbase.id
+-rw-r--r--   3 hbase users          7 2014-06-25 18:41 /hbase/hbase.version
+drwxr-xr-x   - hbase users          0 2014-06-25 21:49 /hbase/oldWALs
+
+
+
+
+

3.3.5. Create a table and populate it with data.

+
+

You can use the HBase Shell to create a table, populate it with data, scan and +get values from it, using the same procedure as in Use HBase Shell.

+
+
+
+

3.3.6. Start and Stop a backup HBase Master (HMaster) Process.

+
+ + + + + +
+ + +Running multiple HMaster instances on the same hardware does not make sense +in a production environment, in the same way that running a pseudo-distributed +cluster does not make sense for production. This step is offered for testing and +learning purposes only. +
+
+
+

The HMaster process controls the HBase cluster. +You can start up to 9 backup HMaster servers, which makes 10 total HMasters, +including the primary.

+
+
+

To start a backup HMaster, use the local-master-backup.sh. +For each backup master you want to start, add a parameter representing the port +offset for that master.

+
+
+

Each HMaster uses three ports (16010, 16020, and 16030 by default). The port +offset is added to these ports, so using an offset of 2, the backup HMaster +would use ports 16012, 16022, and 16032.

+
+
+

The following command starts 3 backup servers using ports 16012/16022/16032, +16013/16023/16033, and 16015/16025/16035.

+
+
+
+
$ ./bin/local-master-backup.sh 2 3 5
+
+
+
+

To stop a backup master without stopping the entire cluster, you need to find its +process ID (PID). The PID is stored in a file with a name like /tmp/hbase-USER-X-master.pid. +The only contents of the file is the PID. +Use the kill -9 command to kill that PID. The following command will stop the +master with port offset 1, but leave the cluster running:

+
+
+
+
$ cat /tmp/hbase-testuser-1-master.pid |xargs kill -9
+
+
+
+
+

3.3.7. Start and Stop Additional RegionServers

+
+

The HRegionServer manages the data in its StoreFiles as directed by the HMaster. +Generally, one HRegionServer runs per node in the cluster. +Running multiple HRegionServers on the same system can be useful for testing in +pseudo-distributed mode.

+
+
+

The local-regionservers.sh command allows you to run multiple RegionServers. +It works in a similar way to the local-master-backup.sh command, in that each +parameter you provide represents the port offset for an instance. Each RegionServer +requires two ports, and the default ports are 16020 and 16030. However, the base ports +for additional RegionServers are not the default ports since the default ports +are used by the HMaster, which is also a RegionServer since HBase version 1.0.0. +The base ports are 16200 and 16300 instead.

+
+
+

You can run 99 additional RegionServer processes that are not a HMaster or backup HMaster, +on a server. The following command starts four additional RegionServers, running +on sequential ports starting at 16202/16302 (base ports 16200/16300 plus 2).

+
+
+
+
$ .bin/local-regionservers.sh start 2 3 4 5
+
+
+
+

To stop a RegionServer manually, use the local-regionservers.sh command with the +stop parameter and the offset of the server to stop. Regions it was managing will +be moved to other RegionServers.

+
+
+
+
$ .bin/local-regionservers.sh stop 3
+
+
+
+
+

3.3.8. Stop HBase

+
+

You can stop HBase the same way as in the Quickstart procedure, using the +bin/stop-hbase.sh command.

+
+
+
+

3.3.9. Remove HBase Data

+
+

If you want to remove all the HBase data you created in this exercise, remove the +hbase directory from HDFS using the hadoop fs -rmr command.

+
+
+
+
+

3.4. Fully-Distributed Multi-Host Configuration with High Availability

+
+

In reality, you need a fully-distributed configuration to fully test HBase and +to use it in real-world scenarios. In a distributed configuration, the cluster +contains multiple nodes, each of which runs one or more HBase daemon. These include +primary and backup Master processes, multiple ZooKeeper processes, and multiple RegionServer +processes.

+
+
+

This advanced quickstart adds two more nodes to your cluster. +The architecture will be as follows:

+
+ + ++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 1. Distributed Cluster Demo Architecture
Node NameMasterZooKeeperRegionServer

node-a.example.com

yes

yes

no

node-b.example.com

backup

yes

yes

node-c.example.com

no

yes

yes

+
+

This quickstart assumes that each node is a virtual machine and that they are all on the same network. +It builds upon the previous quickstart, Single-Host Pseudo-Distributed Configuration, assuming that +the system you configured in that procedure is now node-a. Stop HBase on node-a before continuing.

+
+
+ + + + + +
+ + +Be sure that all the nodes have full access to communicate, and that no +firewall rules are in place which could prevent them from talking to each other. +If you see any errors like no route to host, check your firewall. +
+
+
+

3.4.1. Procedure: Configure Passwordless SSH Access

+
+

node-a needs to be able to log into node-b and node-c (and to itself) in +order to start the daemons. The easiest way to accomplish this is to use the same +username on all hosts, and configure password-less SSH login from node-a to +each of the others.

+
+
+
    +
  1. +

    On node-a, generate a key pair.

    +
    +

    While logged in as the user who will run HBase, generate a SSH key pair, using the following command:

    +
    +
    +
    +
    $ ssh-keygen -t rsa
    +
    +
    +
    +

    If the command succeeds, the location of the key pair is printed to standard output. +The default name of the public key is id_rsa.pub.

    +
    +
  2. +
  3. +

    Create the directory that will hold the shared keys on the other nodes.

    +
    +

    On node-b and node-c, log in as the HBase user and create a .ssh/ directory +in the user’s home directory, if it does not already exist. +If it already exists, be aware that it may already contain other keys.

    +
    +
  4. +
  5. +

    Copy the public key to the other nodes.

    +
    +

    Securely copy the public key from node-a to each of the nodes, by using the scp +command or some other secure means. On each of the nodes (including node-a), create a new file +called .ssh/authorized_keys if it does not already exist, and append the +contents of the id_rsa.pub file to the end of it.

    +
    +
    +
    +
    $ cat id_rsa.pub >> ~/.ssh/authorized_keys
    +
    +
    +
  6. +
  7. +

    Test password-less login.

    +
    +

    If you performed the procedure correctly, if you SSH from node-a to either of +the other nodes, using the same username, you should not be prompted for a password.

    +
    +
  8. +
  9. +

    Since node-b will run a backup Master, repeat the procedure above, +substituting node-b everywhere you see node-a. Be sure not to overwrite your +existing .ssh/authorized_keys files, but concatenate the new key onto the existing +file using the >> operator rather than the > operator.

    +
  10. +
+
+
+
+

3.4.2. Prepare node-a

+
+

node-a will run your primary master and ZooKeeper processes, but no RegionServers.

+
+
+
    +
  1. +

    To prevent the RegionServer from starting on node-a, edit conf/regionservers +and remove the line which contains localhost. Add lines with the hostnames or\IP +addresses for node-b and node-c.

    +
    +

    Even if you did want to run a RegionServer on node-a, you should refer to it by +the hostname the other servers would use to communicate with it. In this case, +that would be node-a.example.com. This enables you to distribute the configuration +to each node of your cluster any hostname conflicts. +Save the file.

    +
    +
  2. +
  3. +

    Configure HBase to use node-b as a backup master. Create a new file in conf/ +called backup-masters, and add a new line to it with the hostname for node-b. +In this demonstration, the hostname is node-b.example.com.

    +
  4. +
  5. +

    Configure ZooKeeper

    +
    +

    In reality, you should carefully consider your ZooKeeper configuration. +You can find out more about configuring ZooKeeper in zookeeper. +This configuration will direct HBase to start and manage a ZooKeeper instance on each node of the cluster.

    +
    +
    +

    On node-a, edit conf/hbase-site.xml and add the following properties.

    +
    +
    +
    +
    <property>
    +  <name>hbase.zookeeper.quorum</name>
    +  <value>node-a.example.com,node-b.example.com,node-c.example.com</value>
    +</property>
    +<property>
    +  <name>hbase.zookeeper.property.dataDir</name>
    +  <value>/usr/local/zookeeper</value>
    +</property>
    +
    +
    +
  6. +
  7. +

    Everywhere in your configuration that you have referred to node-a as localhost, +change the reference to point to the hostname that the other nodes will use to refer to node-a. +In these examples, the hostname is node-a.example.com.

    +
  8. +
+
+
+
+

3.4.3. Prepare node-b and node-c

+
+

node-b will run a backup master server and a ZooKeeper instance.

+
+
+
    +
  1. +

    Download and unpack HBase to node-b, just as you did for the standalone and +pseudo-distributed quickstarts.

    +
  2. +
  3. +

    Copy the configuration files from node-a to node-b.and node-c.

    +
    +

    Each node of your cluster needs to have the same configuration information. +Copy the contents of the conf/ directory to the conf/ directory on node-b and node-c.

    +
    +
  4. +
+
+
+
+

3.4.4. Start and Test Your Cluster

+
+ + + + + +
+ + +Be sure HBase is not running on any node. +If you forgot to stop HBase from previous testing, you will have errors. +Check to see whether HBase is running on any of your nodes by using the jps command. +Look for the processes HMaster, HRegionServer, and HQuorumPeer. +If they exist, kill them. +
+
+
+

On node-a, issue the start-hbase.sh command. +Your output will be similar to that below.

+
+
+
+
$ bin/start-hbase.sh
+node-c.example.com: starting zookeeper, logging to /home/hbuser/hbase-0.98.3-hadoop2/bin/../logs/hbase-hbuser-zookeeper-node-c.example.com.out
+node-a.example.com: starting zookeeper, logging to /home/hbuser/hbase-0.98.3-hadoop2/bin/../logs/hbase-hbuser-zookeeper-node-a.example.com.out
+node-b.example.com: starting zookeeper, logging to /home/hbuser/hbase-0.98.3-hadoop2/bin/../logs/hbase-hbuser-zookeeper-node-b.example.com.out
+starting master, logging to /home/hbuser/hbase-0.98.3-hadoop2/bin/../logs/hbase-hbuser-master-node-a.example.com.out
+node-c.example.com: starting regionserver, logging to /home/hbuser/hbase-0.98.3-hadoop2/bin/../logs/hbase-hbuser-regionserver-node-c.example.com.out
+node-b.example.com: starting regionserver, logging to /home/hbuser/hbase-0.98.3-hadoop2/bin/../logs/hbase-hbuser-regionserver-node-b.example.com.out
+node-b.example.com: starting master, logging to /home/hbuser/hbase-0.98.3-hadoop2/bin/../logs/hbase-hbuser-master-nodeb.example.com.out
+
+
+
+

ZooKeeper starts first, followed by the master, then the RegionServers, and finally the backup masters.

+
+
+
+

3.4.5. Verify that the processes are running.

+
+

On each node of the cluster, run the jps command and verify that the correct processes are running on each server. +You may see additional Java processes running on your servers as well, if they are used for other purposes.

+
+
+
Example 1. node-a jps Output
+
+
+
+
$ jps
+20355 Jps
+20071 HQuorumPeer
+20137 HMaster
+
+
+
+
+
+
Example 2. node-b jps Output
+
+
+
+
$ jps
+15930 HRegionServer
+16194 Jps
+15838 HQuorumPeer
+16010 HMaster
+
+
+
+
+
+
Example 3. node-c jps Output
+
+
+
+
$ jps
+13901 Jps
+13639 HQuorumPeer
+13737 HRegionServer
+
+
+
+
+
+ + + + + +
+ + +
ZooKeeper Process Name
+
+

The HQuorumPeer process is a ZooKeeper instance which is controlled and started by HBase. +If you use ZooKeeper this way, it is limited to one instance per cluster node, , and is appropriate for testing only. +If ZooKeeper is run outside of HBase, the process is called QuorumPeer. +For more about ZooKeeper configuration, including using an external ZooKeeper instance with HBase, see zookeeper.

+
+
+
+
+
+

3.4.6. Access the Web UI

+
+ + + + + +
+ + +
Web UI Port Changes
+Web UI Port Changes +
+
+
+

+ +In HBase newer than 0.98.x, the HTTP ports used by the HBase Web UI changed from 60010 for the +Master and 60030 for each RegionServer to 16010 for the Master and 16030 for the RegionServer.

+
+
+

If everything is set up correctly, you should be able to connect to the UI for the Master +http://node-a.example.com:16010/ or the secondary master at http://node-b.example.com:16010/ +for the secondary master, using a web browser. +If you can connect via localhost but not from another host, check your firewall rules. +You can see the web UI for each of the RegionServers at port 16030 of their IP addresses, or by +clicking their links in the web UI for the Master.

+
+
+
+

3.4.7. Test what happens when nodes or services disappear.

+
+

With a three-node cluster like you have configured, things will not be very resilient. +Still, you can test what happens when the primary Master or a RegionServer disappears, +by killing the processes and watching the logs.

+
+
+
+
+

3.5. Next Steps

+
+

After completing the exercises in this chapter, you are ready to start considering +your real-world cluster’s hardware and configuration requirements, your table schemas, +security, and other aspects of running HBase in the real world.

+
+
+
+
+
+

4. Next Steps

+
+
+

Now that you have had an introduction to HBase, the sky’s the limit. You might want +to read about:

+
+ +
+
+
+

5. Installation Notes

+
+
+

This appendix contains supplemental information about prerequisites and dependencies +of HBase.

+
+
+

5.1. HBase Operating System Notes

+
+

It is assumed that you have the following utilities available in your OS:

+
+
+
+
ssh
+
+

HBase uses the Secure Shell (ssh) command and utilities extensively to communicate between cluster nodes. +Each server in the cluster must be running ssh so that the Hadoop and HBase daemons can be managed. +You must be able to connect to all nodes via SSH, including the local node, from the Master as well +as any backup Master, using a shared key rather than a password. You can see the basic methodology +for such a set-up in Linux or Unix systems at "Procedure: Configure Passwordless SSH Access". If your cluster +nodes use OS X, see the section, +SSH: Setting up Remote Desktop and Enabling Self-Login +on the Hadoop wiki.

+
+
DNS
+
+

HBase uses the local hostname to self-report its IP address. Both forward and reverse DNS resolving +must work in versions of HBase previous to 0.92.0. The hadoop-dns-checker +tool can be used to verify DNS is working correctly on the cluster. The project README +file provides detailed instructions on usage.

+
+
NTP
+
+

The clocks on cluster nodes should be synchronized. A small amount of variation is acceptable, +but larger amounts of skew can cause erratic and unexpected behavior. Time synchronization is one +of the first things to check if you see unexplained problems in your cluster. It is recommended +that you run a Network Time Protocol (NTP) service, or another time-synchronization mechanism, +on your cluster, and that all nodes look to the same service for time synchronization. See the +Basic NTP Configuration at The Linux Documentation Project (TLDP) +to set up NTP.

+
+
+
+
+
+
Limits on Number of Files and Processes (ulimit)
+
+

Apache HBase is a database. It requires the ability to open a large number of files at once. +Many Linux distributions limit the number of files a single user is allowed to open to 1024 +(or 256 on older versions of OS X). You can check this limit on your servers by running the +command ulimit -n when logged in as the user which runs HBase. See +the Troubleshooting section for +some of the problems you may experience if the limit is too low. You may also +notice errors such as the following:

+
+
+
2010-04-06 03:04:37,542 INFO org.apache.hadoop.hdfs.DFSClient: Exception increateBlockOutputStream java.io.EOFException
+2010-04-06 03:04:37,542 INFO org.apache.hadoop.hdfs.DFSClient: Abandoning block blk_-6935524980745310745_1391901
+
+
+
+

It is recommended to raise the ulimit to at least 10,000, but more likely 10,240, because the value +is usually expressed in multiples of 1024. Each ColumnFamily has at least one StoreFile, and possibly +more than six StoreFiles if the region is under load. The number of open files required depends upon +the number of ColumnFamilies and the number of regions. The following is a rough formula for calculating +the potential number of open files on a RegionServer.

+
+
+
Calculate the Potential Number of Open Files
+
+
(StoreFiles per ColumnFamily) x (regions per RegionServer)
+
+
+
+

For example, assuming that a schema had 3 ColumnFamilies per region with an average +of 3 StoreFiles per ColumnFamily, and there are 100 regions per RegionServer, +the JVM will open 3 * 3 * 100 = 900 file descriptors, not counting open JAR files, +configuration files, and others. Opening a file does not take many resources, +and the risk of allowing a user to open too many files is minimal.

+
+
+

Another related setting is the number of processes a user is allowed to run at once. +In Linux and Unix, the number of processes is set using the ulimit -u command. +This should not be confused with the nproc command, which controls the number +of CPUs available to a given user. Under load, a ulimit -u that is too low can +cause OutOfMemoryError exceptions. See Jack Levin’s major HDFS issues thread on +the hbase-users mailing list, from 2011.

+
+
+

Configuring the maximum number of file descriptors and processes for the user +who is running the HBase process is an operating system configuration, rather +than an HBase configuration. It is also important to be sure that the settings +are changed for the user that actually runs HBase. To see which user started HBase, +and that user’s ulimit configuration, look at the first line of the HBase log for +that instance.

+
+
+
Example 4. ulimit Settings on Ubuntu
+
+
+

To configure ulimit settings on Ubuntu, edit /etc/security/limits.conf, which +is a space-delimited file with four columns. Refer to the man page for limits.conf +for details about the format of this file. In the following example, the first +line sets both soft and hard limits for the number of open files (nofile) to +32768 for the operating system user with the username hadoop. The second line +sets the number of processes to 32000 for the same user.

+
+
+
+
hadoop  -       nofile  32768
+hadoop  -       nproc   32000
+
+
+
+

The settings are only applied if the Pluggable Authentication Module (PAM) environment +is directed to use them. To configure PAM to use these limits, be sure that the +/etc/pam.d/common-session file contains the following line:

+
+
+
+
session required  pam_limits.so
+
+
+
+
+
+
Linux Shell
+
+

All of the shell scripts that come with HBase rely on the GNU Bash shell.

+
+
Windows
+
+

Prior to HBase 0.96, testing for running HBase on Microsoft Windows was limited. +Running a on Windows nodes is not recommended for production systems.

+
+
+
+
+
+

5.2. HBase Java Compatibility Notes

+ ++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
HBase VersionJDK 6JDK 7JDK 8

1.3

Not Supported

yes

yes

1.2

Not Supported

yes

yes

1.1

Not Supported

yes

Running with JDK 8 will work but is not well tested.

1.0

Not Supported

yes

Running with JDK 8 will work but is not well tested.

0.98

yes

yes

Running with JDK 8 works but is not well tested. Building with JDK 8 would require removal of the +deprecated remove() method of the PoolMap class and is under consideration. See +HBASE-7608 for more information about JDK 8 +support.

0.94

yes

yes

N/A

+
+ + + + + +
+ + +In HBase 0.98.5 and newer, you must set JAVA_HOME on each node of your cluster. hbase-env.sh provides a handy mechanism to do this. +
+
+
+
+

5.3. HBase Hadoop Compatibility Notes

+
+

The following table summarizes the versions of Hadoop supported with each version of HBase. +Based on the version of HBase, you should select the most appropriate version of Hadoop. +You can use Apache Hadoop, or a vendor’s distribution of Hadoop. +No distinction is made here. +See the Hadoop wiki +for information about vendors of Hadoop.

+
+
+ + + + + +
+ + +
Hadoop 2.x is recommended.
+
+

Hadoop 2.x is faster and includes features, such as short-circuit reads, which will help improve your +HBase random read profile. Hadoop 2.x also includes important bug fixes that will improve your overall +HBase experience. HBase 0.98 drops support for Hadoop 1.0 and deprecates use of Hadoop +1.1+, and HBase 1.0 does not support Hadoop 1.x.

+
+
+
+
+

Use the following legend to interpret this table:

+
+
+
Hadoop version support matrix
+
    +
  • +

    "S" = supported

    +
  • +
  • +

    "X" = not supported

    +
  • +
  • +

    "NT" = Not tested

    +
  • +
+
+ +++++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
HBase-0.94.xHBase-0.98.x (Support for Hadoop 1.1+ is deprecated.)HBase-1.0.x (Hadoop 1.x is NOT supported)HBase-1.1.xHBase-1.2.xHBase-1.3.x

Hadoop-1.0.x

X

X

X

X

X

X

Hadoop-1.1.x

S

NT

X

X

X

X

Hadoop-0.23.x

S

X

X

X

X

X

Hadoop-2.0.x-alpha

NT

X

X

X

X

X

Hadoop-2.1.0-beta

NT

X

X

X

X

X

Hadoop-2.2.0

NT

S

NT

NT

X

X

Hadoop-2.3.x

NT

S

NT

NT

X

X

Hadoop-2.4.x

NT

S

S

S

S

S

Hadoop-2.5.x

NT

S

S

S

S

S

Hadoop-2.6.0

X

X

X

X

X

X

Hadoop-2.6.1+

NT

NT

NT

NT

S

S

Hadoop-2.7.0

X

X

X

X

X

X

Hadoop-2.7.1+

NT

NT

NT

NT

S

S

+
+ + + + + +
+ + +
Hadoop 2.6.x
+
+

Hadoop distributions based on the 2.6.x line must have +HADOOP-11710 applied if you plan to run +HBase on top of an HDFS Encryption Zone. Failure to do so will result in cluster failure and +data loss. This patch is present in Apache Hadoop releases 2.6.1+.

+
+
+
+
+ + + + + +
+ + +
Hadoop 2.7.x
+
+

Hadoop version 2.7.0 is not tested or supported as the Hadoop PMC has explicitly +labeled that release as not being stable.

+
+
+
+
+ + + + + +
+ + +
Replace the Hadoop Bundled With HBase!
+
+

Because HBase depends on Hadoop, it bundles an instance of the Hadoop jar under its lib directory. +The bundled jar is ONLY for use in standalone mode. +In distributed mode, it is critical that the version of Hadoop that is out on +your cluster match what is under HBase. Replace the hadoop jar found in the HBase +lib directory with the hadoop jar you are running on your cluster to avoid version +mismatch issues. Make sure you replace the jar in HBase everywhere on your cluster. +Hadoop version mismatch issues have various manifestations but often cause the cluster +to hang.

+
+
+
+
+

5.3.1. Hadoop versions 0.20.x - 1.x

+
+

HBase will lose data unless it is running on an HDFS that has a durable sync implementation. +DO NOT use Hadoop 0.20.2, Hadoop 0.20.203.0, and Hadoop 0.20.204.0 which DO NOT have this attribute. +Currently only Hadoop versions 0.20.205.x or higher, including hadoop-1.0.0 — have a working, durable sync. +The Cloudera blog post An + update on Apache Hadoop 1.0 by Charles Zedlweski has a nice exposition on how all the Hadoop versions relate. +It’s worth checking out if you are having trouble making sense of the Hadoop version morass.

+
+
+

Sync has to be explicitly enabled by setting dfs.support.append to true on +the client side, in hbase-site.xml and on the server side in hdfs-site.xml.

+
+
+
+
<property>
+  <name>dfs.support.append</name>
+  <value>true</value>
+</property>
+
+
+
+

You must restart your cluster after making this edit.

+
+
+
+

5.3.2. Apache HBase on Secure Hadoop

+
+

Apache HBase will run on any Hadoop 0.20.x that incorporates Hadoop security +features as long as you do as suggested above and replace the Hadoop jar that +ships with HBase with the secure version. +To read more about how to setup Secure HBase, see +HBase Secure Configuration.

+
+
+
+

5.3.3. dfs.datanode.max.transfer.threads

+
+

An HDFS DataNode has an upper bound on the number of files that it will serve at any one time. +Before doing any loading, make sure you have configured Hadoop’s conf/hdfs-site.xml, +setting the dfs.datanode.max.transfer.threads value to at least the following:

+
+
+
+
<property>
+  <name>dfs.datanode.max.transfer.threads</name>
+  <value>4096</value>
+</property>
+
+
+
+

Be sure to restart your HDFS after making the above configuration.

+
+
+

Not having this configuration in place makes for strange-looking failures. +One manifestation is a complaint about missing blocks. +For example:

+
+
+
+
10/12/08 20:10:31 INFO hdfs.DFSClient: Could not obtain block
+          blk_XXXXXXXXXXXXXXXXXXXXXX_YYYYYYYY from any node: java.io.IOException: No live nodes
+          contain current block. Will get new block locations from namenode and retry...
+
+
+
+

See also casestudies.max.transfer.threads and note +that this property was previously known as dfs.datanode.max.xcievers +(e.g. Hadoop HDFS: Deceived by Xciever).

+
+
+
+
+

5.4. HBase ZooKeeper Compatibility Notes

+
+

ZooKeeper 3.4.x is required as of HBase 1.0.0. +HBase makes use of the multi functionality that is only available since 3.4.0 +(The useMulti configuration option defaults to true in HBase 1.0.0). +See +HBASE-12241 (The crash of regionServer when taking deadserver’s replication queue breaks replication) +and +HBASE-6775 (Use ZK.multi when available for HBASE-6710 0.92/0.94 compatibility fix) +for background.

+
+
+
+
+
+ + + \ No newline at end of file diff --git a/src/main/docs/installation/next_steps.adoc b/src/main/docs/installation/next_steps.adoc new file mode 100644 index 0000000..a345ec3 --- /dev/null +++ b/src/main/docs/installation/next_steps.adoc @@ -0,0 +1,34 @@ +//// +/** + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +//// + +[[intro_next_steps]] += Next Steps +:Author: Apache HBase Team +:Email: +:doctype: book + +Now that you have had an introduction to HBase, the sky's the limit. You might want +to read about: + +- link:/book.html#security[HBase security] +- link:/book.html#schema[HBase schema design] +- link:/book.html#configuration[Advanced configuration] +- link:/book.html#hbase_apis[Java] and link:/book.html#external_apis[external] APIs \ No newline at end of file diff --git a/src/main/docs/installation/quickstart.adoc b/src/main/docs/installation/quickstart.adoc new file mode 100644 index 0000000..361306e --- /dev/null +++ b/src/main/docs/installation/quickstart.adoc @@ -0,0 +1,639 @@ +//// +/** + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +//// + +[[intro_quickstart]] += Quickstart +:Author: Apache HBase Team +:Email: +:doctype: book + +== Quickstart Overview + +This chapter will get you up and running on a single-node, standalone instance of +HBase, followed by a pseudo-distributed single-machine instance, and finally a fully-distributed +cluster ready for further testing and proofs of concept. You will learn how configure +HBase and how to write to and read from it. Each of the exercises includes a +list of prerequisites and steps. + +=== Quickstart Limitations + +* This quickstart does not address security configuration. Before your cluster can +be considered production-ready, you must configure security. + +* This quickstart does not address row key design or other aspects of table schema +design. Row key design is absolutely crucial to getting acceptable performance +from HBase, and there is no one-size-fits-all approach. + +=== Prerequisites + +This quickstart assumes that you have fulfilled the prerequisites and installed +HBase using one of the methods in +<>. + +[[intro_quickstart_standalone]] +== Single-Host Standalone Configuration + +At the end of this exercise, you will have a single-host standalone HBase configuration. +All HBase process will be running in a single JVM on your host. + +WARNING: This type of configuration is only useful as a learning exercise and for +basic testing. Data stored on a local filesystem is not durable against process +or server crashes and is not highly available. + +=== Configure HBase + +. Open the configuration file `conf/hbase-site.xml` in a text editor. If this file does not exist, +create it first. + +. HBase uses a configuration pattern familiar within the Hadoop ecosystem. You only +need to configure items that differ from the defaults. A configuration key consists +of a `` element which contains a `` element, a `` element, +and an optional `` element. There are many configurable properties in +HBase, and most of them are documented in `conf/hbase-default.xml`. Don't worry about +any besides the ones mentioned in these exercises, for now. + +. Paste the following into `conf/hbase-site.xml`. ++ +[source,xml] +---- + + + hbase.rootdir + file:///home/testuser/hbase + The location where HBase stores data files. + + + hbase.zookeeper.property.dataDir + /home/testuser/zookeeper + The location where ZooKeeper stores its data. + + +---- ++ +Change the path and username in the `` element to match your test user and +path. The `hbase` and `zookeeper` paths do not need to exist. Save and close the file. + +=== Start HBase + +Start HBase using the `bin/start-hbase.sh` script: + +---- +$ bin/start-hbase.sh +---- + +Use the `jps` command to verify that the HBase processes are running. + +[[quickstart_shell_exercises]] +=== Use HBase Shell + +. Run the HBase Shell so that you can interactively use HBase. In the remaining exercises, +the HBase shell prompt is indicated by `hbase>`, and the operating system prompt is +indicated by `$`. ++ +---- +$ bin/hbase shell + +hbase> +---- + +. Display HBase Shell Help Text. ++ +Type `help` and press Enter, to display some basic usage information for HBase Shell, as well as several example commands. +Notice that table names, rows, columns all must be enclosed in quote characters. + +. Create a table. ++ +Use the `create` command to create a new table. +You must specify the table name and the ColumnFamily name. ++ +---- +hbase(main):001:0> create 'test', 'cf' +0 row(s) in 0.4170 seconds + +=> Hbase::Table - test +---- + +. List Information About your Table ++ +Use the `list` command to ++ +---- +hbase(main):002:0> list 'test' +TABLE +test +1 row(s) in 0.0180 seconds + +=> ["test"] +---- + +. Put data into your table. ++ +To put data into your table, use the `put` command. ++ +---- +hbase(main):003:0> put 'test', 'row1', 'cf:a', 'value1' +0 row(s) in 0.0850 seconds + +hbase(main):004:0> put 'test', 'row2', 'cf:b', 'value2' +0 row(s) in 0.0110 seconds + +hbase(main):005:0> put 'test', 'row3', 'cf:c', 'value3' +0 row(s) in 0.0100 seconds +---- ++ +Here, we insert three values, one at a time. +The first insert is at `row1`, column `cf:a`, with a value of `value1`. +Columns in HBase are comprised of a column family prefix, `cf` in this example, +followed by a colon and then a column qualifier suffix, `a` in this case. + +. Scan the table for all data at once. ++ +One of the ways to get data from HBase is to scan. +Use the `scan` command to scan the table for data. +You can limit your scan, but for now, all data is fetched. ++ +---- +hbase(main):006:0> scan 'test' +ROW COLUMN+CELL + row1 column=cf:a, timestamp=1421762485768, value=value1 + row2 column=cf:b, timestamp=1421762491785, value=value2 + row3 column=cf:c, timestamp=1421762496210, value=value3 +3 row(s) in 0.0230 seconds +---- + +. Get a single row of data. ++ +To get a single row of data at a time, use the `get` command. ++ +---- +hbase(main):007:0> get 'test', 'row1' +COLUMN CELL + cf:a timestamp=1421762485768, value=value1 +1 row(s) in 0.0350 seconds +---- + +. Disable a table. ++ +If you want to delete a table or change its settings, as well as in some other +situations, you need to disable the table first, using the `disable` command. +You can re-enable it using the `enable` command. ++ +---- +hbase(main):008:0> disable 'test' +0 row(s) in 1.1820 seconds + +hbase(main):009:0> enable 'test' +0 row(s) in 0.1770 seconds +---- ++ +Disable the table again if you tested the `enable` command above: ++ +---- +hbase(main):010:0> disable 'test' +0 row(s) in 1.1820 seconds +---- + +. Drop the table. ++ +To drop (delete) a table, use the `drop` command. ++ +---- +hbase(main):011:0> drop 'test' +0 row(s) in 0.1370 seconds +---- + +. Exit the HBase Shell. ++ +To exit the HBase Shell and disconnect from your cluster, use the `quit` command. +HBase is still running in the background. + +=== Stop HBase + +To stop all HBase processes, use the _bin/stop-hbase.sh_. + +---- +$ ./bin/stop-hbase.sh +---- + +After issuing the command, it can take several minutes for the processes to shut down. +Use the `jps` to be sure that the HMaster and HRegionServer processes are shut down. + +=== Remove HBase Data +If you want to remove all the HBase data you created in this exercise, remove the +`/home/testuser/hbase` and `/home/testuser/zookeeper` directories (or the ones you +specified in your configuration) after HBase has completely shut down. + +[[intro_quickstart_pseudo]] +== Single-Host Pseudo-Distributed Configuration + +After completing <>, you can re-configure HBase to +run in pseudo-distributed mode. In pseudo-distributed mode, HBase still runs +completely on a single host, but each HBase daemon (HMaster, HRegionServer, +and ZooKeeper) runs as a separate process. + +This exercise also stores your data in HDFS, though durability and high availability +depend upon your HDFS installation being configured to use multiple dataNodes and +a replication factor of at least 3. You can skip the HDFS configuration to continue +storing your data in the local filesystem. + +The last few steps of this exercise add a pseudo-high-availability factor to HMasters +and RegionServers. This is not true high availability as all processes are running +on a single host, and is only appropriate for testing. + +.Hadoop Configuration +[NOTE] +==== +This procedure assumes that you have configured Hadoop and HDFS on your local system and/or a remote +system, and that they are running and available. It also assumes you are using Hadoop 2. +The guide on +link:http://hadoop.apache.org/docs/stable/hadoop-project-dist/hadoop-common/SingleCluster.html[Setting up a Single Node Cluster] +in the Hadoop documentation is a good starting point. +==== + +=== Stop HBase if it is running. ++ +If you have just finished <> and HBase is still running, stop it. +If you are adding HDFS support, this procedure will create a totally new directory +where HBase will store its data, so any databases you created before will be ignored. + +=== Configure HBase. + +Edit the `conf/hbase-site.xml` configuration file from the previous exercise. + +. First, add the following property. +which directs HBase to run in distributed mode, with one JVM instance per daemon. ++ +[source,xml] +---- + + hbase.cluster.distributed + true + +---- + +. Next, change the `hbase.rootdir` from the local filesystem to the address of +your HDFS instance, using the `hdfs:////` URI syntax. In this example, HDFS is +running on `localhost` at port `8020`. ++ +[source,xml] +---- + + hbase.rootdir + hdfs://localhost:8020/hbase + +---- ++ +Do not create the directory in HDFS. HBase will do this for you. + +=== Start HBase. + +Use the _bin/start-hbase.sh_ command to start HBase. +If your system is configured correctly, the `jps` command should show the +HMaster and HRegionServer processes running. + +=== Verify HDFS + +If you chose to configure HDFS, check that the `hbase` directory was created. +If everything worked correctly, you can use the `hadoop fs` command in Hadoop's +`bin/` directory to list this directory. The listing should look similar to this: + +---- + +$ ./bin/hadoop fs -ls /hbase +Found 7 items +drwxr-xr-x - hbase users 0 2014-06-25 18:58 /hbase/.tmp +drwxr-xr-x - hbase users 0 2014-06-25 21:49 /hbase/WALs +drwxr-xr-x - hbase users 0 2014-06-25 18:48 /hbase/corrupt +drwxr-xr-x - hbase users 0 2014-06-25 18:58 /hbase/data +-rw-r--r-- 3 hbase users 42 2014-06-25 18:41 /hbase/hbase.id +-rw-r--r-- 3 hbase users 7 2014-06-25 18:41 /hbase/hbase.version +drwxr-xr-x - hbase users 0 2014-06-25 21:49 /hbase/oldWALs +---- + +=== Create a table and populate it with data. + +You can use the HBase Shell to create a table, populate it with data, scan and +get values from it, using the same procedure as in <>. + +=== Start and Stop a backup HBase Master (HMaster) Process. + +NOTE: Running multiple HMaster instances on the same hardware does not make sense +in a production environment, in the same way that running a pseudo-distributed +cluster does not make sense for production. This step is offered for testing and +learning purposes only. + +The HMaster process controls the HBase cluster. +You can start up to 9 backup HMaster servers, which makes 10 total HMasters, +including the primary. + +To start a backup HMaster, use the `local-master-backup.sh`. +For each backup master you want to start, add a parameter representing the port +offset for that master. + +Each HMaster uses three ports (16010, 16020, and 16030 by default). The port +offset is added to these ports, so using an offset of 2, the backup HMaster +would use ports 16012, 16022, and 16032. + +The following command starts 3 backup servers using ports 16012/16022/16032, +16013/16023/16033, and 16015/16025/16035. + +---- +$ ./bin/local-master-backup.sh 2 3 5 +---- + +To stop a backup master without stopping the entire cluster, you need to find its +process ID (PID). The PID is stored in a file with a name like `/tmp/hbase-USER-X-master.pid`. +The only contents of the file is the PID. +Use the `kill -9` command to kill that PID. The following command will stop the +master with port offset 1, but leave the cluster running: + +---- +$ cat /tmp/hbase-testuser-1-master.pid |xargs kill -9 +---- + +=== Start and Stop Additional RegionServers + +The HRegionServer manages the data in its StoreFiles as directed by the HMaster. +Generally, one HRegionServer runs per node in the cluster. +Running multiple HRegionServers on the same system can be useful for testing in +pseudo-distributed mode. + +The `local-regionservers.sh` command allows you to run multiple RegionServers. +It works in a similar way to the `local-master-backup.sh` command, in that each +parameter you provide represents the port offset for an instance. Each RegionServer +requires two ports, and the default ports are 16020 and 16030. However, the base ports +for additional RegionServers are not the default ports since the default ports +are used by the HMaster, which is also a RegionServer since HBase version 1.0.0. +The base ports are 16200 and 16300 instead. + +You can run 99 additional RegionServer processes that are not a HMaster or backup HMaster, +on a server. The following command starts four additional RegionServers, running +on sequential ports starting at 16202/16302 (base ports 16200/16300 plus 2). + +---- +$ .bin/local-regionservers.sh start 2 3 4 5 +---- + +To stop a RegionServer manually, use the `local-regionservers.sh` command with the +`stop` parameter and the offset of the server to stop. Regions it was managing will +be moved to other RegionServers. + +---- +$ .bin/local-regionservers.sh stop 3 +---- + +=== Stop HBase + +You can stop HBase the same way as in the <> procedure, using the +`bin/stop-hbase.sh` command. + +=== Remove HBase Data +If you want to remove all the HBase data you created in this exercise, remove the +`hbase` directory from HDFS using the `hadoop fs -rmr` command. + + +[[intro_quickstart_full]] +== Fully-Distributed Multi-Host Configuration with High Availability + +In reality, you need a fully-distributed configuration to fully test HBase and +to use it in real-world scenarios. In a distributed configuration, the cluster +contains multiple nodes, each of which runs one or more HBase daemon. These include +primary and backup Master processes, multiple ZooKeeper processes, and multiple RegionServer +processes. + +This advanced quickstart adds two more nodes to your cluster. +The architecture will be as follows: + +.Distributed Cluster Demo Architecture +[cols="1,1,1,1", options="header"] +|=== +| Node Name | Master | ZooKeeper | RegionServer +| node-a.example.com | yes | yes | no +| node-b.example.com | backup | yes | yes +| node-c.example.com | no | yes | yes +|=== + +This quickstart assumes that each node is a virtual machine and that they are all on the same network. +It builds upon the previous quickstart, <>, assuming that +the system you configured in that procedure is now `node-a`. Stop HBase on `node-a` before continuing. + +NOTE: Be sure that all the nodes have full access to communicate, and that no +firewall rules are in place which could prevent them from talking to each other. +If you see any errors like `no route to host`, check your firewall. + +[[passwordless.ssh.quickstart]] +=== Procedure: Configure Passwordless SSH Access + +`node-a` needs to be able to log into `node-b` and `node-c` (and to itself) in +order to start the daemons. The easiest way to accomplish this is to use the same +username on all hosts, and configure password-less SSH login from `node-a` to +each of the others. + +. On `node-a`, generate a key pair. ++ +While logged in as the user who will run HBase, generate a SSH key pair, using the following command: ++ +[source,bash] +---- +$ ssh-keygen -t rsa +---- ++ +If the command succeeds, the location of the key pair is printed to standard output. +The default name of the public key is `id_rsa.pub`. + +. Create the directory that will hold the shared keys on the other nodes. ++ +On `node-b` and `node-c`, log in as the HBase user and create a `.ssh/` directory +in the user's home directory, if it does not already exist. +If it already exists, be aware that it may already contain other keys. + +. Copy the public key to the other nodes. ++ +Securely copy the public key from `node-a` to each of the nodes, by using the `scp` +command or some other secure means. On each of the nodes (including `node-a`), create a new file +called `.ssh/authorized_keys` _if it does not already exist_, and append the +contents of the `id_rsa.pub` file to the end of it. ++ +---- +$ cat id_rsa.pub >> ~/.ssh/authorized_keys +---- + +. Test password-less login. ++ +If you performed the procedure correctly, if you SSH from `node-a` to either of +the other nodes, using the same username, you should not be prompted for a password. + +. Since `node-b` will run a backup Master, repeat the procedure above, +substituting `node-b` everywhere you see `node-a`. Be sure not to overwrite your +existing `.ssh/authorized_keys` files, but concatenate the new key onto the existing +file using the `>>` operator rather than the `>` operator. + +=== Prepare `node-a` + +`node-a` will run your primary master and ZooKeeper processes, but no RegionServers. + +. To prevent the RegionServer from starting on `node-a`, edit `conf/regionservers` +and remove the line which contains `localhost`. Add lines with the hostnames or\IP +addresses for `node-b` and `node-c`. ++ +Even if you did want to run a RegionServer on `node-a`, you should refer to it by +the hostname the other servers would use to communicate with it. In this case, +that would be `node-a.example.com`. This enables you to distribute the configuration +to each node of your cluster any hostname conflicts. +Save the file. + +. Configure HBase to use `node-b` as a backup master. Create a new file in `conf/` +called `backup-masters`, and add a new line to it with the hostname for `node-b`. +In this demonstration, the hostname is `node-b.example.com`. + +. Configure ZooKeeper ++ +In reality, you should carefully consider your ZooKeeper configuration. +You can find out more about configuring ZooKeeper in <>. +This configuration will direct HBase to start and manage a ZooKeeper instance on each node of the cluster. ++ +On `node-a`, edit `conf/hbase-site.xml` and add the following properties. ++ +[source,xml] +---- + + hbase.zookeeper.quorum + node-a.example.com,node-b.example.com,node-c.example.com + + + hbase.zookeeper.property.dataDir + /usr/local/zookeeper + +---- + +. Everywhere in your configuration that you have referred to `node-a` as `localhost`, +change the reference to point to the hostname that the other nodes will use to refer to `node-a`. +In these examples, the hostname is `node-a.example.com`. + +=== Prepare `node-b` and `node-c` + +`node-b` will run a backup master server and a ZooKeeper instance. + +. Download and unpack HBase to `node-b`, just as you did for the standalone and +pseudo-distributed quickstarts. + +. Copy the configuration files from `node-a` to `node-b`.and `node-c`. ++ +Each node of your cluster needs to have the same configuration information. +Copy the contents of the `conf/` directory to the `conf/` directory on `node-b` and `node-c`. + + +=== Start and Test Your Cluster +NOTE: Be sure HBase is not running on any node. +If you forgot to stop HBase from previous testing, you will have errors. +Check to see whether HBase is running on any of your nodes by using the `jps` command. +Look for the processes `HMaster`, `HRegionServer`, and `HQuorumPeer`. +If they exist, kill them. + + +On `node-a`, issue the `start-hbase.sh` command. +Your output will be similar to that below. + +---- +$ bin/start-hbase.sh +node-c.example.com: starting zookeeper, logging to /home/hbuser/hbase-0.98.3-hadoop2/bin/../logs/hbase-hbuser-zookeeper-node-c.example.com.out +node-a.example.com: starting zookeeper, logging to /home/hbuser/hbase-0.98.3-hadoop2/bin/../logs/hbase-hbuser-zookeeper-node-a.example.com.out +node-b.example.com: starting zookeeper, logging to /home/hbuser/hbase-0.98.3-hadoop2/bin/../logs/hbase-hbuser-zookeeper-node-b.example.com.out +starting master, logging to /home/hbuser/hbase-0.98.3-hadoop2/bin/../logs/hbase-hbuser-master-node-a.example.com.out +node-c.example.com: starting regionserver, logging to /home/hbuser/hbase-0.98.3-hadoop2/bin/../logs/hbase-hbuser-regionserver-node-c.example.com.out +node-b.example.com: starting regionserver, logging to /home/hbuser/hbase-0.98.3-hadoop2/bin/../logs/hbase-hbuser-regionserver-node-b.example.com.out +node-b.example.com: starting master, logging to /home/hbuser/hbase-0.98.3-hadoop2/bin/../logs/hbase-hbuser-master-nodeb.example.com.out +---- + +ZooKeeper starts first, followed by the master, then the RegionServers, and finally the backup masters. + +=== Verify that the processes are running. + +On each node of the cluster, run the `jps` command and verify that the correct processes are running on each server. +You may see additional Java processes running on your servers as well, if they are used for other purposes. + +.`node-a` `jps` Output +==== +---- +$ jps +20355 Jps +20071 HQuorumPeer +20137 HMaster +---- +==== + +.`node-b` `jps` Output +==== +---- +$ jps +15930 HRegionServer +16194 Jps +15838 HQuorumPeer +16010 HMaster +---- +==== + +.`node-c` `jps` Output +==== +---- +$ jps +13901 Jps +13639 HQuorumPeer +13737 HRegionServer +---- +==== + +.ZooKeeper Process Name +[NOTE] +==== +The `HQuorumPeer` process is a ZooKeeper instance which is controlled and started by HBase. +If you use ZooKeeper this way, it is limited to one instance per cluster node, , and is appropriate for testing only. +If ZooKeeper is run outside of HBase, the process is called `QuorumPeer`. +For more about ZooKeeper configuration, including using an external ZooKeeper instance with HBase, see <>. +==== + +=== Access the Web UI + +.Web UI Port Changes +NOTE: Web UI Port Changes ++ +In HBase newer than 0.98.x, the HTTP ports used by the HBase Web UI changed from 60010 for the +Master and 60030 for each RegionServer to 16010 for the Master and 16030 for the RegionServer. + + +If everything is set up correctly, you should be able to connect to the UI for the Master +`http://node-a.example.com:16010/` or the secondary master at `http://node-b.example.com:16010/` +for the secondary master, using a web browser. +If you can connect via `localhost` but not from another host, check your firewall rules. +You can see the web UI for each of the RegionServers at port 16030 of their IP addresses, or by +clicking their links in the web UI for the Master. + +=== Test what happens when nodes or services disappear. + +With a three-node cluster like you have configured, things will not be very resilient. +Still, you can test what happens when the primary Master or a RegionServer disappears, +by killing the processes and watching the logs. + +== Next Steps + +After completing the exercises in this chapter, you are ready to start considering +your real-world cluster's hardware and configuration requirements, your table schemas, +security, and other aspects of running HBase in the real world. \ No newline at end of file diff --git a/src/main/site/site.xml b/src/main/site/site.xml index 38dc0c1..5d9c7d6 100644 --- a/src/main/site/site.xml +++ b/src/main/site/site.xml @@ -92,7 +92,7 @@ - + -- 2.7.4 (Apple Git-66)