1

これについてしばらく頭を悩ませていました。PHP/Thrift を使用して HBase と通信することを始めたばかりです (Python で問題なく実行できます)。何らかの理由で、以下のコードは $client = new 行に見つからないクラス 'HbaseClient' を生成しています:

$GLOBALS['THRIFT_ROOT'] = 'thrift';
require_once( $GLOBALS['THRIFT_ROOT'] . '/Thrift.php' );
require_once( $GLOBALS['THRIFT_ROOT'] . '/transport/TSocket.php' );
require_once( $GLOBALS['THRIFT_ROOT'] . '/transport/TBufferedTransport.php' );
require_once( $GLOBALS['THRIFT_ROOT'] . '/protocol/TBinaryProtocol.php' );
require_once( $GLOBALS['THRIFT_ROOT'] . '/Hbase/Hbase.php' );

try
{
    $socket = new TSocket('127.0.0.1', 9090);
    $transport = new TBufferedTransport($socket, 1024, 1024);
    $protocol = new TBinaryProtocolAccelerated($transport);
    $client = new HbaseClient( $protocol );
    $transport->open();
}
catch (Exception $e)
{
    echo "Exception: %e\r\n";
}

文字通り理由がわかりません。Hbase.php インクルード ファイルでは、クライアントは次のように定義されています。

class HbaseClient implements \Hbase\HbaseIf {

ここで明らかに単純なものが欠けていますか?(完全な HBase.php はこちら: http://pastebin.com/6kd9r2Se )

前もって感謝します!

4

2 に答える 2

2

これは名前空間の問題だと思います。入れてみてください:

namespace Hbase;

オブジェクトをインスタンス化するファイルで、または完全修飾名を使用します。

$client = new Hbase\HbaseClient( $protocol );
于 2013-03-11T15:30:54.010 に答える
0

HBase フォルダを THRIFT_ROOT ディレクトリの下または外部に配置しましたか?

于 2013-03-11T15:11:20.053 に答える