Yes, I confirmed that it is indeed thrift server.
and the fact that the API
List<byte[]> tableNamesList=client.getTableNames();
for (byte [] name : tableNamesList)
{
System.out.println(new String(name));
}
successfully printed all table names shows that it is indeed thrift server.
if it is hue, it won't print the table names.
Jimmy.
--------------------------------------------------
From: "Todd Lipcon" <t...@cloudera.com>
Sent: Thursday, September 02, 2010 5:18 PM
To: <user@hbase.apache.org>
Subject: Re: thrift for hbase in CDH3 broken ?
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