php - 如何使用 PHP Stargate 客户端将数据插入 Hbase 表

标签 php rest hbase thrift stargate

我正在安装 HBase 集群,并尝试通过 Stargate REST 接口(interface)访问数据。大多数只读功能(即列出表、获取版本、元数据等)都可以很好地工作。但是,我在将数据实际插入到我创建的任何表中时遇到了麻烦。这是我到目前为止所得到的......

创建了一个包含两列的虚拟表,如下所示:

$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 错误,但有以下异常(exception):

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

错误非常明显,但我不确定上面发布的架构出了什么问题。

我还想知道使用 Thrift 包并生成必要的 PHP 客户端文件是否比使用 Starbase 更好?如果有人有这方面的经验,我很乐意听取您的意见。

非常感谢任何帮助。

最佳答案

您需要将列名指定为 family:qualifier 对。您指定的“ColumnSchema”仅提供系列名称,因此您可以说,例如,$column_name = base64_encode("info:column1");

关于php - 如何使用 PHP Stargate 客户端将数据插入 Hbase 表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2135692/

相关文章:

php - REST 服务不工作-Code Igniter

asp.net-mvc - MVC RESTful 服务授权

hbase - 从 HBase 中的 HDFS 导入表

apache-spark - Spark 只写入一个 hbase 区域服务器

rest - 如何使用 Postman Rest Client 获取和重用 CSRF token

hadoop - 从 HDFS 读取并写入 HBASE

javascript - 如何将 JSON 对象解析为 mysql 查询

php - Eloquent 模型返回数字键和关联键

php - 是否可以从其他 session 访问 $_SESSION 变量?

php - 在 Twig 中过滤和拼接一个数组