我一直在C ++中使用Thrift API for HBase(示例用法here),但现在我需要使用Thrift2。我知道有一些在其他语言中使用Thrift2的例子,比如C#,Python和Java,但是我找不到C ++的文档。
这是我当前调用Thrift API的代码:
transport->open();
std::string t("demo_table");
/ Scan all tables, look for the demo table and delete it. /
std::cout << "scanning tables..." << std::endl;
StrVec tables;
client.getTableNames(tables);
for (StrVec::const_iterator it = tables.begin(); it != tables.end(); ++it) {
std::cout << " found: " << *it << std::endl;
if (t == *it) {
if (client.isTableEnabled(*it)) {
std::cout << " disabling table: " << *it << std::endl;
client.disableTable(*it);
}
std::cout << " deleting table: " << *it << std::endl;
client.deleteTable(*it);
}
}
现在切换到Thrift2后失败了。例如,client.getTableNames()不再有效(函数不存在)。
答案 0 :(得分:0)
从hbase thrift2接口中删除了一些函数。如果您只想获取hbase中的表名列表,可以在zookeeper中使用/ hbase / table的get children。
struct String_vector paths;
int ret = zoo_get_children(zkhandle,"/hbase/table", 0,&paths);//
if(ret)
{
std::cout << "zoo_get_children error " << ret << std::endl;
} else {
for(i = 0;i < paths.count;i++)
printf("/hbase/table/%s\n",paths.data[i]);
free_vector(&paths);
}