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();
       }

}

Reply via email to