2013-03-11 3 views
1

Некоторое время царапает мне голову. Я просто начинаю использовать PHP/Thrift для общения с HBase (я могу сделать это хорошо с Python). По какой-то причине ниже код производящего класса «HbaseClient» не найден на $ клиента = новой линии:PHP - класс «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)

Заранее благодарен!

ответ

2

Я считаю, что это проблема пространства имен. Попробуйте положить:

namespace Hbase; 

в файле экземпляра объекта или использовать полное имя:

$client = new Hbase\HbaseClient($protocol); 
+1

оба работают, но вместо захвата их пространства имен, как в первом решении, его нужно импортировать: 'use Hbase;' –

+0

@fab whoops, вы правы! – TheMethod

+0

Спасибо, я думаю, что это он. Я также понял, что у меня есть версия бережливости, установленная из того, что я делал вручную, и от менеджера cloudera, поэтому я думаю, что использовал неправильные версии включений. – Geesu

0

Вы уверены, что разместили папку HBase в директории THRIFT_ROOT или снаружи?

+0

Да, это не было бы бросить другую ошибку, если у меня не было (на требуется линия)? – Geesu

+0

Вы изменили структуру каталогов загруженного пакета? в соответствии с примерами на бережливости с клиентской страницей hbase код должен быть: '$ GLOBALS ['THRIFT_ROOT'] = dirname (__ FILE __). '/ thrift/src';' Кроме того, будет ли ошибка require_once отображается, зависит от уровня сообщений об ошибках, включенных в вашей системе. – priyolahiri

Смежные вопросы