////
/**
 *
 * 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) Reference Guide 
:Author: Apache HBase Team
:Email: <hbase-dev@lists.apache.org>
:doctype: book
:Version: {docVersion}
:revnumber: {docVersion}
// Logo for PDF -- doesn't render in HTML
:title-logo: hbase_logo_with_orca.png
:numbered:
:toc: left
:toclevels: 1
:toc-title: Contents
:sectanchors:
:icons: font
:iconsdir: icons
:linkcss:
:experimental:
:source-language: java
:leveloffset: 0

// Logo for HTML -- doesn't render in PDF
++++
<div>
  <a href="http://hbase.apache.org"><img src="images/hbase_logo_with_orca.png" alt="Apache HBase Logo" /></a>
</div>
++++

// The directory is called _chapters because asciidoctor skips direct
// processing of files found in directories starting with an _. This
// prevents each chapter being built as its own book.

include::_chapters/preface.adoc[]

include::_chapters/getting_started.adoc[]
include::_chapters/configuration.adoc[]
include::_chapters/upgrading.adoc[]
include::_chapters/shell.adoc[]
include::_chapters/datamodel.adoc[]
include::_chapters/schema_design.adoc[]
include::_chapters/mapreduce.adoc[]
include::_chapters/security.adoc[]
include::_chapters/architecture.adoc[]
include::_chapters/hbase_mob.adoc[]
include::_chapters/hbase_apis.adoc[]
include::_chapters/external_apis.adoc[]
include::_chapters/thrift_filter_language.adoc[]
include::_chapters/spark.adoc[]
include::_chapters/cp.adoc[]
include::_chapters/performance.adoc[]
include::_chapters/troubleshooting.adoc[]
include::_chapters/case_studies.adoc[]
include::_chapters/ops_mgt.adoc[]
include::_chapters/developer.adoc[]
include::_chapters/unit_testing.adoc[]
include::_chapters/zookeeper.adoc[]
include::_chapters/community.adoc[]

= Appendix

include::_chapters/appendix_contributing_to_documentation.adoc[]
include::_chapters/faq.adoc[]
include::_chapters/hbck_in_depth.adoc[]
include::_chapters/appendix_acl_matrix.adoc[]
include::_chapters/compression.adoc[]
include::_chapters/sql.adoc[]
include::_chapters/ycsb.adoc[]
include::_chapters/appendix_hfile_format.adoc[]
include::_chapters/other_info.adoc[]
include::_chapters/hbase_history.adoc[]
include::_chapters/asf.adoc[]
include::_chapters/orca.adoc[]
include::_chapters/tracing.adoc[]
include::_chapters/rpc.adoc[]


