Как вставить данные в таблицы Hbase с помощью клиента PHP Stargate - PullRequest
2 голосов
/ 26 января 2010

Я играю с установкой кластера HBase и пытаюсь получить доступ к данным через интерфейс REST Stargate. Большинство функций только для чтения (то есть, перечисление таблиц, получение версии, метаданных и т. Д.) Работают хорошо. Однако у меня возникли проблемы с вставкой данных в любые таблицы, которые я создал. Вот что у меня так далеко ...

Создана фиктивная таблица с двумя столбцами:

$table_schema = <<<SCHEMA
    <TableSchema name="mytable" IS_META="false" IS_ROOT="false">
        <ColumnSchema name="info" BLOCKSIZE="65536" BLOOMFILTER="false" BLOCKCACHE="false" COMPRESSION="NONE" LENGTH="2147483647" VERSIONS="1" TTL="-1" IN_MEMORY="false" />
        <ColumnSchema name="url" BLOCKSIZE="65536" BLOOMFILTER="false" BLOCKCACHE="false" COMPRESSION="NONE" LENGTH="2147483647" VERSIONS="1" TTL="-1" IN_MEMORY= "false"/>
    </TableSchema>
SCHEMA;

require_once "HTTP/Request.php";
$request = new HTTP_Request("http://localhost:8080");
$request->setMethod(HTTP_REQUEST_METHOD_PUT);
$request->addHeader("Accept", "text/xml");
$request->addHeader("Accept", "text/xml");
$request->setBody($table_schema);
$request->sendRequest();

Создание таблицы работает отлично. Далее я хочу вставить некоторые данные в мою новую таблицу. Вот как я пытаюсь это сделать:

$row_key = base64_encode("higgilty");
$column_name = base64_encode("info");
$value = base64_encode("Here is a test value");

$data = <<<DATA
     <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
     <CellSet>
         <Row key="$row_key">
             <Cell column="$column_name">
                 $value
             </Cell>
         </Row>
     </CellSet>
DATA;

require_once "HTTP/Request.php";
$request = new HTTP_Request("http://localhost:8080/mytable/higgilty");
$request->setMethod(HTTP_REQUEST_METHOD_PUT);
$request->addHeader("Accept", "text/xml");
$request->addHeader("Accept", "text/xml");
$request->setBody($data);
$request->sendRequest();

В результате этого запроса возвращается ошибка 503, со следующим исключением:

[...] org.apache.hadoop.hbase.regionserver.NoSuchColumnFamilyException: Column family  does not exist in region [...]

Ошибка довольно очевидна, но я не уверен, что не так с моей схемой, опубликованной выше.

Мне также интересно, лучше ли мне использовать пакет Thrift и генерировать необходимые клиентские файлы PHP вместо использования Starbase? Если у кого-то есть опыт с этим, я хотел бы услышать от вас.

Любая помощь очень ценится.

1 Ответ

3 голосов
/ 04 июня 2010

Вам необходимо указать имя столбца в виде семейства: пара квалификаторов. Указанная вами «ColumnSchema» дает только фамилию, поэтому вы можете сказать, например, $column_name = base64_encode("info:column1");

...