blob: 6249f56a4c91fd2111cdb0154b2bcdfff30c89f8 [file] [log] [blame]
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<!--
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.
-->
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="author" content="dev@gora.apache.org" />
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8" />
<meta name="Description" content="Apache Gora -- Gora HBase Module" />
<meta name="Keywords" content="Apache Gora NoSQL Framework" />
<meta name="Owner" content="dev@gora.apache.org" />
<meta name="Robots" content="index, follow" />
<meta name="Security" content="Public" />
<meta name="Source" content="wiki template" />
<meta
name="DC.Rights"
content="Copyright 2010-2024, The Apache Software Foundation"
/>
<link href="/resources/css/bootstrap.min.css" rel="stylesheet" />
<!-- Fav and touch icons -->
<link
rel="apple-touch-icon-precomposed"
sizes="144x144"
href="http://twitter.github.com/bootstrap/assets/ico/apple-touch-icon-144-precomposed.png"
/>
<link
rel="apple-touch-icon-precomposed"
sizes="114x114"
href="http://twitter.github.com/bootstrap/assets/ico/apple-touch-icon-114-precomposed.png"
/>
<link
rel="apple-touch-icon-precomposed"
sizes="72x72"
href="http://twitter.github.com/bootstrap/assets/ico/apple-touch-icon-72-precomposed.png"
/>
<link
rel="apple-touch-icon-precomposed"
href="http://twitter.github.com/bootstrap/assets/ico/apple-touch-icon-57-precomposed.png"
/>
<link rel="shortcut icon" href="/resources/img/feather-small.png" />
<title>Apache Gora&trade; - Gora HBase Module</title>
</head>
<body style="padding-top: 100px">
<nav class="navbar navbar-expand-lg navbar-dark bg-dark fixed-top shadow-lg">
<div class="container-fluid">
<a class="navbar-brand" href="/index.html"
><img
src="/resources/img/gora-logo.png"
alt="Apache Gora"
title="Apache Gora"
height="50px"
/></a>
<button
class="navbar-toggler"
type="button"
data-bs-toggle="collapse"
data-bs-target="#navbarNav"
aria-controls="navbarNav"
aria-expanded="false"
aria-label="Toggle navigation"
>
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarNav">
<ul class="navbar-nav me-auto">
<li class="nav-item">
<a class="nav-link" href="/downloads.html">Downloads</a>
</li>
<li class="nav-item dropdown">
<a
class="nav-link dropdown-toggle"
href="#"
id="navbarDropdown1"
role="button"
data-bs-toggle="dropdown"
aria-expanded="false"
>Community</a
>
<ul class="dropdown-menu" aria-labelledby="navbarDropdown1">
<li>
<a
class="dropdown-item"
href="https://whimsy.apache.org/board/minutes/Gora.html"
>Board Reporting</a
>
</li>
<li>
<a class="dropdown-item" href="/contribute.html"
>Contribute</a
>
</li>
<li>
<a class="dropdown-item" href="/mailing_lists.html"
>Mailing Lists</a
>
</li>
<li>
<a class="dropdown-item" href="/credits.html">People</a>
</li>
<li>
<a class="dropdown-item" href="/related.html"
>Related Projects</a
>
</li>
</ul>
</li>
<li class="nav-item dropdown">
<a
class="nav-link dropdown-toggle"
href="#"
id="navbarDropdown2"
role="button"
data-bs-toggle="dropdown"
aria-expanded="false"
>Documentation</a
>
<ul class="dropdown-menu" aria-labelledby="navbarDropdown2">
<li><a class="dropdown-item" href="/about.html">About</a></li>
<li>
<a class="dropdown-item" href="/current/index.html"
>Current Documentation</a
>
</li>
<li>
<a class="dropdown-item" href="/current/api/javadoc.html"
>JavaDoc Documentation</a
>
</li>
<li>
<a class="dropdown-item" href="/current/tutorial.html"
>Gora Tutorial</a
>
</li>
<li>
<a
class="dropdown-item"
href="https://cwiki.apache.org/confluence/display/GORA/"
>Gora Wiki</a
>
</li>
</ul>
</li>
<li class="nav-item dropdown">
<a
class="nav-link dropdown-toggle"
href="#"
id="navbarDropdown3"
role="button"
data-bs-toggle="dropdown"
aria-expanded="false"
>Development</a
>
<ul class="dropdown-menu" aria-labelledby="navbarDropdown3">
<li>
<a
class="dropdown-item"
href="https://issues.apache.org/jira/browse/GORA"
>Issue Tracking</a
>
</li>
<li>
<a class="dropdown-item" href="/mailing_lists.html"
>Mailing Lists</a
>
</li>
<li>
<a class="dropdown-item" href="/version_control.html"
>Version Control</a
>
</li>
<li>
<a class="dropdown-item" href="/roadmap.html">Roadmap</a>
</li>
</ul>
</li>
<li class="nav-item dropdown">
<a
class="nav-link dropdown-toggle"
href="#"
id="navbarDropdown4"
role="button"
data-bs-toggle="dropdown"
aria-expanded="false"
>
<img
src="/resources/img/feather-small.png"
alt="Apache"
title="Apache"
/>
</a>
<ul class="dropdown-menu" aria-labelledby="navbarDropdown4">
<li>
<a class="dropdown-item" href="http://www.apache.org"
>Apache Home</a
>
</li>
<li>
<a
class="dropdown-item"
href="http://www.apache.org/licenses/"
>Apache License</a
>
</li>
<li>
<a
class="dropdown-item"
href="http://www.apache.org/security/"
>Security</a
>
</li>
<li>
<a
class="dropdown-item"
href="http://www.apache.org/foundation/sponsorship.html"
>Support</a
>
</li>
<li>
<a
class="dropdown-item"
href="http://www.apache.org/foundation/thanks.html"
>Thanks</a
>
</li>
</ul>
</li>
</ul>
</div>
</div>
</nav>
<div class="container top-buffer" id="Gora_Gora HBase Module">
<h2 id="overview">Overview<a class="headerlink" href="#overview" title="Permalink">&para;</a></h2>
<p>This is the main documentation for the gora-hbase module. gora-hbase
module enables <a href="http://hbase.apache.org">Apache HBase</a> backend support for Gora.</p>
<div id="toc"><ul><li><a class="toc-href" href="#goraproperties" title="gora.properties">gora.properties</a></li><li><a class="toc-href" href="#gora-hbase-mappings" title="Gora HBase mappings">Gora HBase mappings</a></li></ul></div>
<h2 id="goraproperties">gora.properties<a class="headerlink" href="#goraproperties" title="Permalink">&para;</a></h2>
<ul>
<li><code>gora.datastore.default=org.apache.gora.hbase.store.HBaseStore</code> - Implementation of the storage class</li>
<li><code>gora.datastore.autocreateschema=true</code> - Create the table if doesn't exist</li>
<li><code>gora.datastore.scanner.caching=1000</code> - HBase client cache that improves the scan in HBase (default 0)</li>
<li><code>hbase.client.autoflush.default=false</code> - HBase autoflushing. Enabling autoflush decreases write performance. Available since Gora 0.2. Defaults to disabled.</li>
</ul>
<h2 id="gora-hbase-mappings">Gora HBase mappings<a class="headerlink" href="#gora-hbase-mappings" title="Permalink">&para;</a></h2>
<p>Say we wished to map some Employee data and store it into the HBaseStore.</p>
<pre><code>&lt;gora-otd&gt;
&lt;table name="Employee"&gt;
&lt;family name="info"
compression="$$$"
blockCache="$$$"
blockSize="$$$"
bloomFilter="$$$"
maxVersions="$$$"
timeToLive="$$$"
inMemory="$$$" /&gt;
&lt;/table&gt;
&lt;class name="org.apache.gora.examples.generated.Employee" keyClass="java.lang.String" table="Employee"&gt;
&lt;field name="name" family="info" qualifier="nm"/&gt;
&lt;field name="dateOfBirth" family="info" qualifier="db"/&gt;
&lt;field name="ssn" family="info" qualifier="sn"/&gt;
&lt;field name="salary" family="info" qualifier="sl"/&gt;
&lt;field name="boss" family="info" qualifier="bs"/&gt;
&lt;field name="webpage" family="info" qualifier="wp"/&gt;
&lt;/class&gt;
&lt;/gora-otd&gt;
</code></pre>
<p>Here you can see that we require the definition of two child elements within the
<code>gora-otd</code> mapping configuration, namely;</p>
<p>The table element; where we specify:</p>
<ol>
<li>
<p>a parameter relating to the HBase table name (String) e.g. name=<b>"Employee"</b>,</p>
</li>
<li>
<p>a nested element containing the type and definition of families we wish to create within HBase. In this case we create one family <b>info</b> which could have a combination of any of the following parameters;</p>
<p><b>name</b> (String): family name e.g. info</p>
<p><b>compression</b> (String): the compression option to use in HBase. Please see <a href="http://hbase.apache.org/book/compression.html">HBase documentation</a>.</p>
<p><b>blockCache</b> (boolean): an LRU cache that contains three levels of block priority to allow for scan-resistance and in-memory ColumnFamilies. Please see <a href="https://hbase.apache.org/book/regionserver.arch.html#block.cache">HBase documentation</a>.</p>
<p><b>blockSize</b> (Integer): The blocksize can be configured for each ColumnFamily in a table, and this defaults to 64k. Larger cell values require larger blocksizes. There is an inverse relationship between blocksize and the resulting StoreFile indexes (i.e., if the blocksize is doubled then the resulting indexes should be roughly halved). Please see <a href="http://hbase.apache.org/book/perf.schema.html#schema.cf.blocksize">HBase documentation</a>.</p>
<p><b>bloomFilter</b> (String): Bloom Filters can be enabled per-ColumnFamily. We use <code>HColumnDescriptor.setBloomFilterType(NONE | ROW | ROWCOL)</code> to enable blooms per Column Family. Default = NONE for no bloom filters. If ROW, the hash of the row will be added to the bloom on each insert. If ROWCOL, the hash of the row + column family name + column family qualifier will be added to the bloom on each key insert. Please see <a href="http://hbase.apache.org/book/perf.schema.html#schema.bloom">HBase documentation</a>.</p>
<p><b>maxVersions</b> (Integer): The maximum number of row versions to store is configured per column family via <code>HColumnDescriptor</code>. The default for max versions is <b>3</b>. This is an important parameter because HBase does not overwrite row values, but rather stores different values per row by time (and qualifier). Excess versions are removed during major compaction's. The number of max versions may need to be increased or decreased depending on application needs. Please see <a href="http://hbase.apache.org/book/schema.versions.html">HBase documentation</a>.</p>
<p><b>timeToLive</b> (Integer): ColumnFamilies can set a TTL length in seconds, and HBase will automatically delete rows once the expiration time is reached. This applies to all versions of a row - even the current one. The TTL time encoded in the HBase for the row is specified in UTC. Please see <a href="https://hbase.apache.org/book/ttl.html">HBase documentation</a>.</p>
<p><b>inMemory</b> (Boolean): ColumnFamilies can optionally be defined as in-memory. Data is still persisted to disk, just like any other ColumnFamily. In-memory blocks have the highest priority in the Block Cache, but it is not a guarantee that the entire table will be in memory. Please see <a href="http://hbase.apache.org/book/perf.schema.html#cf.in.memory">HBase documentation</a>.</p>
</li>
</ol>
<p>The class element where we specify of persistent fields which values should map to. This contains;</p>
<ol>
<li>
<p>a parameter containing the Persistent class name e.g. <b>org.apache.gora.examples.generated.Employee</b>,</p>
</li>
<li>
<p>a parameter containing the keyClass e.g. <b>java.lang.String</b> which specifies the keys which map to the field values,</p>
</li>
<li>
<p>a parameter containing the Table name e.g. <b>Employee</b> which matches to the above Table definition,</p>
</li>
<li>
<p>finally nested child element(s) mapping fields which are to be persisted into HBase. These fields need to be configured such that they receive;</p>
<p>a parameter containing the <b>name</b> e.g. (name, dateOfBirth, ssn and salary respectively),</p>
<p>a parameter containing the column <b>family</b> to which they belong e.g. (all info in this case),</p>
<p>an optional parameter <b>qualifier</b>, which enables more granular control over the data to be persisted into HBase.</p>
</li>
</ol>
</div>
<!-- /container (main block) -->
<hr />
<div class="container">
<footer>
<p>
Copyright © 2010-2024 The Apache Software Foundation.
Licensed under
<a href="http://www.apache.org/licenses/LICENSE-2.0"
>Apache License 2.0</a
>.
</p>
<p>
Apache Gora, Gora, Apache, the Apache feather logo, and the Apache
Gora project logo are trademarks of The Apache Software Foundation.
</p>
</footer>
</div>
<!-- /container -->
<script src="/resources/js/bootstrap.bundle.min.js"></script>
<script type="text/javascript">
stLight.options({
publisher: "4059fafd-3891-49f9-8c96-e4100290d8e6",
doNotHash: false,
doNotCopy: false,
hashAddressBar: false,
});
</script>
<script src="//cdn.jsdelivr.net/gh/highlightjs/cdn-release@11.0.1/build/highlight.min.js"></script>
<script>
hljs.highlightAll();
</script>
</body>
</html>