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 回答