如何用php与thrift连接base

前言

各位看官可能要说,网上有很多相关的文章介绍如何使用php和thrift连接hbase,为毛你还要写呢?
其实我也是无奈之举,本人在开发的过程中,需要使用php去连接hbase,但是拜读过网上的文章后,经过试验,都没有能满足我个人的需求。
痛定思痛,耐下心来查看thrift生成的php相关的代码,跟着注释以及自己的猜测,一步步的试验,终于达到目的,为了使自己的努力成果不至于很快遗忘,所以只好痛下决心将整个过程记录下来,以备以后使用。因为网上的文章基本都不是基于thrift2的,所以为了站在巨人的肩膀上,自己也是基于thrift的,不是thrft2的,能力有限,各位看官多多包涵。

启动thrift server

在hbase的master上(不知道regionserver是否也可以,没试),进入hbase_home/bin/目录下,启动thrift
./hbase-daemon.sh start thrift
完成thrift启动。默认端口为9090端口

组织thrift客户端代码

在php的服务器,安装thrift,我的版本是thrift-0.10.0,进入目录,进行安装
./configure --prefix=/home/thrift --with-php-config=/usr/bin/php-config
make && make install
将hbase的源代码上传到php的服务器,解压,

由于thrift的php代码来自不同的位置,所以需要创建一个目录,将其搜集起来,例如mkdir /home/myweb
cp -r thrift源码目录/lib/php/lib/Thrift/*  /home/myweb/
mkdir /home/myweb/packages
cd /home/thrift/
bin/thrift --gen php hbase源码目录/hbase-thrift/src/main/resources/org/apache/hadoop/hbase/thrift/Hbase.thrift
cp -r /home/thrift/gen-php/* /home/myweb/packages/
cp thrift-0.10.0目录/lib/php/src/*.php /home/myweb/

这样,整个thrift的客户端需要的源码就搜集完毕了

开发代码

代码如下:
setSendTimeout(10000);
$socket->setRecvTimeout(20000);
$transport = new Thrift\Transport\TBufferedTransport($socket);
$protocol = new Thrift\Protocol\TBinaryProtocol($transport);
$client = new Hbase\HbaseClient($protocol);
$transport->open();

//根据条件查询记录
/**
*  第一个参数为表的名称,
*  第二个参数是开始的行的rowkey,如果为空,则从最开始的行开始查询
*  第三个参数为查询出来的数据都需要哪些列,如果是列簇,则直接写名字,如果是列,则这样写列簇名:列名  可以写多个
*  最后一个参数为筛选条件,据我观察,只能列出等于的条件,大于小于应该是不可以
*/
$scannerid = $client->scannerOpen("announce_hits","",array("data"),array("data:agent"=>"edufe"));
/**
*  得到了scannerid后,就可以获取查询到的数据了,后边的参数是获取的数据条数,第一次调用获得第一行和第二行,第二次调用获得的是第三行和第四行
*/
$res = $client->scannerGetList($scannerid,2);
foreach ($res as $r)
{
    print_r($r);
}
$res = $client->scannerGetList($scannerid,2);
foreach ($res as $r)
{
    print_r($r);
}
//查询完毕后,建议关闭scanner
$client->scannerClose($scannerid);
?>

写在最后

我这里只写了一个例子,就是我最需要的,还有其他需求的看官,可以在整理完文件后,查看/home/myweb/packages/Hbase/Hbase.php中最开始的HbaseIf接口,这里有对$client的所有调用方法的相关说明,虽然没有例子,但是看注释也能大部分看明白,有些的不详细的,就只好靠看更深入的源码和猜测了。


你可能感兴趣的:(hbase,php)