Hi Jinsong, Are you sure that the port you're connecting to is indeed the thrift server?
Unfortunately both the HBase thrift server and the Hue namenode plugin listen on port 9090, so you might be having an issue where your HBase client is trying to connect to the Namenode server instead of HBase. You can verify the ports using a command like "/sbin/fuser -n tcp 9090" to see which pid has it open, then cross reference against sudo jps. Thanks -Todd On Thu, Sep 2, 2010 at 4:40 PM, Jinsong Hu <jinsong...@hotmail.com> wrote: > Hi, There, > I am trying to test and see if thrift for hbase works. I followed the > example from > > http://www.workhabit.com/labs/centos-55-and-thriftscribe > http://incubator.apache.org/thrift/ > http://wiki.apache.org/hadoop/Hbase/ThriftApi > > and wrote test code: I found that client.getTableNames(); > returns all table names successfully, but the scanner never returned > any record. and it even throws exception: > > org.apache.thrift.TApplicationException: get failed: unknown result > at > org.apache.hadoop.hbase.thrift.generated.Hbase$Client.recv_get(Hbase.java:785) > at > org.apache.hadoop.hbase.thrift.generated.Hbase$Client.get(Hbase.java:750) > at > org.apache.hadoop.hbase.thrift.HbaseThriftTest.testThriftAPI(HbaseThriftTest.java:73) > at > org.apache.hadoop.hbase.thrift.HbaseThriftTest.main(HbaseThriftTest.java:128) > > I checked the syntax and the table and confirmed that the table does have > record and it should > return result, but it doesn't. Can anybody tell me what is wrong ? > > At this time, I am suspecting the thrift server shipped with CDH3 may have > problem. if there anyway > I can get this test code working ? > > I have to use thrift-0.2.0-incubating.tar.gz , as I found that the code > generated from hbase-thrift project > doesn't even compile with 0.3.0 and 0.4.0 thrift. > > > Jimmy. > > > > > > > public void testThriftAPI() > { > // Make socket > TSocket transport = new TSocket("10.20.12.13", 9090); > > > > // Wrap in a protocol > TBinaryProtocol protocol = new TBinaryProtocol(transport); > > Hbase.Client client = new Hbase.Client(protocol); > > try { > transport.open(); > List<byte[]> tableNamesList=client.getTableNames(); > for (byte [] name : tableNamesList) > { > System.out.println(new String(name)); > } > > String tableName="HEARTBEAT_CLUSTER"; > String startRow=""; > List<byte[]> columns= new ArrayList<byte[]>(); > columns.add("fields:time_format".getBytes()); > columns.add("fields:customer_id".getBytes()); > > int aScannerId=0; > try { > > TCell cell=client.get(tableName.getBytes(), > "2010-08\tproduction-2".getBytes(), "fields:customer_id".getBytes()); > if (cell != null) > { > String value= new String( cell.value); > System.out.println(value); > } > aScannerId=client.scannerOpen(tableName.getBytes(), > startRow.getBytes(), columns); > TRowResult result=null; > for (int i=0; i< 10; i++) > { > try { > result=client.scannerGet(aScannerId); > } catch (Exception ex1) > { > > } > if (result ==null) break; > > String timeFormat=result.getFieldValue(0).toString(); > String customerId=result.getFieldValue(1).toString(); > System.out.println(timeFormat + "\t" + customerId); > } > } catch (Exception ex) > { > ex.printStackTrace(); > } > finally { > if (aScannerId >0 ) client.scannerClose(aScannerId); > } > } catch (Exception exp) > { > exp.printStackTrace(); > } > finally{ > transport.close(); > } > > } > -- Todd Lipcon Software Engineer, Cloudera