hbase-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From bryanduxb...@apache.org
Subject svn commit: r646105 - in /hadoop/hbase/trunk: CHANGES.txt src/java/overview.html
Date Tue, 08 Apr 2008 22:22:45 GMT
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>



Mime
View raw message