You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by br...@apache.org on 2008/04/09 00:22:45 UTC
svn commit: r646105 - in /hadoop/hbase/trunk: CHANGES.txt
src/java/overview.html
Author: bryanduxbury
Date: Tue Apr 8 15:22:45 2008
New Revision: 646105
URL: http://svn.apache.org/viewvc?rev=646105&view=rev
Log:
HBASE-523 package-level javadoc should have example client
-updated docs
Modified:
hadoop/hbase/trunk/CHANGES.txt
hadoop/hbase/trunk/src/java/overview.html
Modified: hadoop/hbase/trunk/CHANGES.txt
URL: http://svn.apache.org/viewvc/hadoop/hbase/trunk/CHANGES.txt?rev=646105&r1=646104&r2=646105&view=diff
==============================================================================
--- hadoop/hbase/trunk/CHANGES.txt (original)
+++ hadoop/hbase/trunk/CHANGES.txt Tue Apr 8 15:22:45 2008
@@ -30,6 +30,7 @@
HBASE-557 HTable.getRow() should receive RowResult objects
HBASE-452 "region offline" should throw IOException, not IllegalStateException
HBASE-541 Update hadoop jars.
+ HBASE-523 package-level javadoc should have example client
Release 0.1.0
Modified: hadoop/hbase/trunk/src/java/overview.html
URL: http://svn.apache.org/viewvc/hadoop/hbase/trunk/src/java/overview.html?rev=646105&r1=646104&r2=646105&view=diff
==============================================================================
--- hadoop/hbase/trunk/src/java/overview.html (original)
+++ hadoop/hbase/trunk/src/java/overview.html Tue Apr 8 15:22:45 2008
@@ -145,6 +145,117 @@
the HBase version. It does not change your install unless you explicitly ask it to.
</p>
+<h2><a name="client_example">Example API Usage</a></h2>
+<p>Once you have a running HBase, you probably want a way to hook your application up to it.
+ If your application is in Java, then you should use the Java API. Here's an example of what
+ a simple client might look like. This example assumes that you've created a table called
+ "myTable" with a column family called "myColumnFamily".
+</p>
+
+<div style="background-color: #cccccc; padding: 2px">
+<code><pre>
+import org.apache.hadoop.hbase.client.HTable;
+import org.apache.hadoop.hbase.HBaseConfiguration;
+import org.apache.hadoop.hbase.HStoreKey;
+import org.apache.hadoop.hbase.HScannerInterface;
+import org.apache.hadoop.hbase.io.BatchUpdate;
+import org.apache.hadoop.hbase.io.Cell;
+import org.apache.hadoop.io.Text;
+import java.io.IOException;
+
+public class MyClient {
+
+ public static void main(String args[]) throws IOException {
+ // You need a configuration object to tell the client where to connect.
+ // But don't worry, the defaults are pulled from the local config file.
+ HBaseConfiguration config = new HBaseConfiguration();
+
+ // This instantiates an HTable object that connects you to the "myTable"
+ // table.
+ HTable table = new HTable(config, new Text("myTable"));
+
+ // To do any sort of update on a row, you use an instance of the BatchUpdate
+ // class. A BatchUpdate takes a row and optionally a timestamp which your
+ // updates will affect.
+ BatchUpdate batchUpdate = new BatchUpdate(new Text("myRow"));
+
+ // The BatchUpdate#put method takes a Text that describes what cell you want
+ // to put a value into, and a byte array that is the value you want to
+ // store. Note that if you want to store strings, you have to getBytes()
+ // from the string for HBase to understand how to store it. (The same goes
+ // for primitives like ints and longs and user-defined classes - you must
+ // find a way to reduce it to bytes.)
+ batchUpdate.put(new Text("myColumnFamily:columnQualifier1"),
+ "columnQualifier1 value!".getBytes());
+
+ // Deletes are batch operations in HBase as well.
+ batchUpdate.delete(new Text("myColumnFamily:cellIWantDeleted"));
+
+ // Once you've done all the puts you want, you need to commit the results.
+ // The HTable#commit method takes the BatchUpdate instance you've been
+ // building and pushes the batch of changes you made into HBase.
+ table.commit(batchUpdate);
+
+ // Now, to retrieve the data we just wrote. The values that come back are
+ // Cell instances. A Cell is a combination of the value as a byte array and
+ // the timestamp the value was stored with. If you happen to know that the
+ // value contained is a string and want an actual string, then you must
+ // convert it yourself.
+ Cell cell = table.get(new Text("myRow"),
+ new Text("myColumnFamily:columnQualifier1"));
+ String valueStr = new String(valueBytes.getValue());
+
+ // Sometimes, you won't know the row you're looking for. In this case, you
+ // use a Scanner. This will give you cursor-like interface to the contents
+ // of the table.
+ HStoreKey row = new HStoreKey();
+ SortedMap<Text, byte[]> columns = new TreeMap<Text, byte[]>();
+ HScannerInterface scanner =
+ // we want to get back only "myColumnFamily:columnQualifier1" when we iterate
+ table.obtainScanner(new Text[]{new Text("myColumnFamily:columnQualifier1")},
+ // we want to start scanning from an empty Text, meaning the beginning of
+ // the table
+ new Text(""));
+
+
+ // Scanners in HBase 0.2 return RowResult instances. A RowResult is like the
+ // row key and the columns all wrapped up in a single interface.
+ // RowResult#getRow gives you the row key. RowResult also implements
+ // Map<Text, Cell>, so you can get to your column results easily.
+
+ // Now, for the actual iteration. One way is to use a while loop like so:
+ RowResult rowResult = scanner.next();
+
+ while(rowResult != null) {
+ // print out the row we found and the columns we were looking for
+ System.out.println("Found row: " + rowResult.getRow() + " with value: " +
+ new String(rowResult.get("myColumnFamily:columnQualifier1")));
+
+ rowResult = scanner.next();
+ }
+
+ // The other approach is to use a foreach loop. Scanners are iterable!
+ for (RowResult rowResult : scanner) {
+ // print out the row we found and the columns we were looking for
+ System.out.println("Found row: " + rowResult.getRow() + " with value: " +
+ new String(rowResult.get("myColumnFamily:columnQualifier1")));
+ }
+
+ // Make sure you close your scanners when you are done!
+ scanner.close();
+ }
+}
+</pre></code>
+</div>
+
+<p>There are many other methods for putting data into and getting data out of
+ HBase, but these examples should get you started. See the HTable javadoc for
+ more methods. Additionally, there are methods for managing tables in the
+ HBaseAdmin class.</p>
+
+<p>If your client is NOT Java, then you should consider the Thrift or REST
+ libraries.</p>
+
<h2><a name="related" >Related Documentation</a></h2>
<ul>
<li><a href="http://hbase.org">HBase Home Page</a>