2016-05-05 7 views
3

私はC++でHBase用のThrift APIを使用していましたが(例用例here)、代わりにThrift2を使用する必要があります。私は、C#、Python、Javaなどの他の言語でThrift2を使用する例があることを知っていますが、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と同じ機能をThrift2で行う方法に関するドキュメントはありません。 – apohl

+0

十分です。質問は再開 – Drew

答えて

0

一部の機能はhbase thrift2インターフェイスから削除されています。 hbaseでテーブル名のリストを取得したいだけなら、zookeeperで/ hbase/tableのget子を使うことができます。

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

答えをありがとう、しかし私たちは実際に別の方向に行ってきました。 Thriftの代わりにJavaクライアントを使用する。 – apohl

関連する問題