2

HBaseクラスターのインストールで遊んでいて、StargateRESTインターフェイスを介してデータにアクセスしようとしています。ほとんどの読み取り専用関数(つまり、テーブルの一覧表示、バージョンの取得、メタデータなど)はうまく機能します。ただし、作成したテーブルに実際にデータを挿入するのに問題があります。これが私がこれまでに得たものです。

次のように、2つの列を持つダミーテーブルを作成しました。

$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 [...]

エラーはかなり明確ですが、上記のスキーマの何が問題になっているのかわかりません。

また、Starbaseを使用する代わりに、Thriftパッケージを使用して必要なPHPクライアントファイルを生成する方がよいのではないかと思います。誰かがこれについて何か経験があれば、私はあなたから聞いてみたいです。

どんな助けでも大歓迎です。

4

1 に答える 1

3

列名をfamily:qualifierのペアとして指定する必要があります。指定する「ColumnSchema」は名前のみを指定するため、たとえば、次のように言うことができます。$column_name = base64_encode("info:column1");

于 2010-06-04T04:46:38.950 に答える