2016-05-05 63 views
3

我一直在C++中使用HBase的Thrift API(示例用法爲here),但現在我需要使用Thrift2代替。我知道在其他語言中使用Thrift2的例子,例如C#,Python和Java,但我找不到C++的文檔。在C++中使用Hbase Thrift2 API

這裏是我的調用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()不再有效(該函數不存在)。

+1

它是如何工作的。仍然沒有關閉的MCVE問題 – Drew

+0

該功能不存在。沒有關於如何使用Thrift和Thrift一樣的功能的文檔。 – apohl

+0

夠公平的。問題重新打開 – Drew

回答

0

某些功能從hbase thrift2界面中刪除。如果您只想獲取hbase中的表名列表,您可以使用zookeeper中的/ hbase/table的子元素。

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); 
} 
+0

感謝您的回答,但我們現在已經走了另一個方向。使用Java客戶端而不是Thrift。 – apohl