2010-01-25 10 views
2

Je joue avec une installation de cluster HBase et j'essaie d'accéder aux données via l'interface Stargate REST. La plupart des fonctions en lecture seule (c'est-à-dire, répertorier des tables, obtenir une version, des méta-données, etc.) fonctionnent bien. Cependant, j'ai du mal à insérer des données dans les tables que j'ai créées. Voici ce que j'ai jusqu'à présent ....Comment insérer des données dans les tables Hbase à l'aide du client PHP Stargate

créé une table factice avec deux colonnes, comme suit:

$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(); 

La création de table fonctionne très bien. Ensuite, je veux insérer des données dans ma nouvelle table. Voici comment je tente de le faire:

$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(); 

Le résultat de cette requête renvoie une erreur 503, à l'exception suivante:

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

L'erreur est assez clair, mais je ne suis pas sûr ce qui est mal avec mon schéma posté ci-dessus.

Je me demande également si je suis mieux d'utiliser le paquet Thrift et de générer les fichiers client PHP nécessaires au lieu d'utiliser Starbase? Si quelqu'un a une expérience avec cela, j'aimerais avoir de vos nouvelles.

Toute aide est grandement appréciée.

Répondre

3

Vous devez spécifier le nom de la colonne en tant que famille: paire qualificative. Le "ColumnSchema" que vous spécifiez ne donne que le nom de la famille, donc vous pouvez dire, par exemple, $column_name = base64_encode("info:column1");

+0

Cela fait un moment que je l'ai posté, mais merci d'avoir pris le temps de répondre! – sayajay