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.
Cela fait un moment que je l'ai posté, mais merci d'avoir pris le temps de répondre! – sayajay