Hi,
We're building an analytics server with HBase using Jetty. I have
experimented with the Thrift API + PHP over the past few days and got it
working, but needed the filter functionality which has not been released
yet. So I decided to switch to the Java API and run it with a Jetty server.
My Jetty server is setup on crunch2.in.escapemg.com:8888.
Hbase is setup on the same machine, with all the configuration settings
according to the "Getting Started" guide. We are using Hbase version
0.20.1.
Just doing a quick scanning test with this code:
HBaseConfiguration config = new HBaseConfiguration();
HTable table = new HTable(config, "Guts");
Scan s = new Scan();
s.addColumn(Bytes.toBytes("user:"),Bytes.toBytes("theme"));
ResultScanner scanner = table.getScanner(s);
int count = 0;
int limit = 10;
try {
for (Result rr = scanner.next(); rr != null; rr =
scanner.next()) {
if (count <= limit) {
response.getOutputStream().write( rr.getRow() );
count++;
}
}
} finally {
scanner.close();
}
I get this error, which states (I think) that the HBase is throwing a
connection error:
[exec] 14:56:14,197 DEBUG [24109...@qtp-15206466-0,Configuration]
java.io.IOException: config()
[exec] at
org.apache.hadoop.conf.Configuration.<init>(Configuration.java:210)
[exec] at
org.apache.hadoop.conf.Configuration.<init>(Configuration.java:197)
[exec] at
org.apache.hadoop.hbase.HBaseConfiguration.<init>(HBaseConfiguration.java:33)
[exec] at com.grooveshark.HBaseHandler.handle(HBaseHandler.java:25)
[exec] at
org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
[exec] at org.mortbay.jetty.Server.handle(Server.java:326)
[exec] at
org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:536)
[exec] at
org.mortbay.jetty.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:913)
[exec] at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:539)
[exec] at
org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:212)
[exec] at
org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:405)
[exec] at
org.mortbay.jetty.bio.SocketConnector$Connection.run(SocketConnector.java:228)
[exec] at
org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:582)
[exec]
[exec] 2010-01-20 14:56:14.697::WARN: /
[exec] java.lang.NoClassDefFoundError: org/apache/zookeeper/Watcher
[exec] at java.lang.ClassLoader.defineClass1(Native Method)
[exec] at java.lang.ClassLoader.defineClass(ClassLoader.java:621)
[exec] at
java.security.SecureClassLoader.defineClass(SecureClassLoader.java:124)
[exec] at java.net.URLClassLoader.defineClass(URLClassLoader.java:260)
[exec] at java.net.URLClassLoader.access$000(URLClassLoader.java:56)
[exec] at java.net.URLClassLoader$1.run(URLClassLoader.java:195)
[exec] at java.security.AccessController.doPrivileged(Native Method)
[exec] at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
[exec] at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
[exec] at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
[exec] at java.lang.ClassLoader.loadClass(ClassLoader.java:252)
[exec] at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320)
[exec] at
org.apache.hadoop.hbase.client.HConnectionManager.getClientZooKeeperWatcher(HConnectionManager.java:151)
[exec] at
org.apache.hadoop.hbase.client.HConnectionManager$TableServers.getZooKeeperWrapper(HConnectionManager.java:885)
[exec] at
org.apache.hadoop.hbase.client.HConnectionManager$TableServers.locateRootRegion(HConnectionManager.java:901)
[exec] at
org.apache.hadoop.hbase.client.HConnectionManager$TableServers.locateRegion(HConnectionManager.java:580)
[exec] at
org.apache.hadoop.hbase.client.HConnectionManager$TableServers.locateRegion(HConnectionManager.java:556)
[exec] at
org.apache.hadoop.hbase.client.HConnectionManager$TableServers.locateRegionInMeta(HConnectionManager.java:630)
[exec] at
org.apache.hadoop.hbase.client.HConnectionManager$TableServers.locateRegion(HConnectionManager.java:589)
[exec] at
org.apache.hadoop.hbase.client.HConnectionManager$TableServers.locateRegion(HConnectionManager.java:556)
[exec] at
org.apache.hadoop.hbase.client.HConnectionManager$TableServers.locateRegionInMeta(HConnectionManager.java:630)
[exec] at
org.apache.hadoop.hbase.client.HConnectionManager$TableServers.locateRegion(HConnectionManager.java:593)
[exec] at
org.apache.hadoop.hbase.client.HConnectionManager$TableServers.locateRegion(HConnectionManager.java:556)
[exec] at org.apache.hadoop.hbase.client.HTable.<init>(HTable.java:127)
[exec] at org.apache.hadoop.hbase.client.HTable.<init>(HTable.java:105)
[exec] at com.grooveshark.HBaseHandler.handle(HBaseHandler.java:27)
[exec] at
org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
[exec] at org.mortbay.jetty.Server.handle(Server.java:326)
[exec] at
org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:536)
[exec] at
org.mortbay.jetty.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:913)
[exec] at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:539)
[exec] at
org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:212)
[exec] at
org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:405)
[exec] at
org.mortbay.jetty.bio.SocketConnector$Connection.run(SocketConnector.java:228)
[exec] at
org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:582)
[exec] Caused by: java.lang.ClassNotFoundException:
org.apache.zookeeper.Watcher
[exec] at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
[exec] at java.security.AccessController.doPrivileged(Native Method)
[exec] at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
[exec] at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
[exec] at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
[exec] at java.lang.ClassLoader.loadClass(ClassLoader.java:252)
[exec] at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320)
[exec] ... 35 more
After doing a mailing list search, it seemed that other configuration
problems were fixed by upgrading to 0.20.2 which I have not yet done. Is
this the problem or is there something simple I am overlooking? I have also
added my hbase-site.xml and hbase-default.xml to my lib and conf directories
to my working classpath.
I am confused because I was able to connect via thrift, and I also have a
BulkImporter MapReduce script to load the logging data into HBase that works
fine, but have been unable to locate my error in this case.