在php的yii2框架中整合hbase库的方法
hbase通过thrift这个跨语言的rpc框架提供多语言的调用。
hbase有两套thrift接口(thrift1和thrift2),但是它们并不兼容。根据官方文档,thrift1很可能被抛弃,本文以thrift2整合为例。
1、访问官网,下载
thrift-0.11.0.exe (生成接口rpc工具,thrift-0.11.0.exe改名thrift.exe,保存在d:\project\thrift\thrift.exe)
thrift-0.11.0.tar.gz(thrift相关库,保存在d:\project\thrift\thrift-0.11.0)
2、访问hbase官网(),下载hbase-1.2.6-src.tar.gz
解压保存在d:\project\thrift\hbase-1.2.6
3、生成php接口代码
解压hbase-1.2.6-src.tar.gz,hbase-1.2.6\hbase-thrift\src\main\resources\org\apache\hadoop\hbase文件夹同时存在thrift和thrift2接口描述文件,本文只使用thrift2
在d:\project\thrift目录中输入cmd命令,生成对应php的sdk文件。
thrift -gen php hbase-1.2.6\hbase-thrift\src\main\resources\org\apache\hadoop\hbase\thrift2\hbase.thrift
生成的d:\project\thrift\gen-php目录包含文件:
thbaseservice.php types.php
4、要通过thrifc调用hbase,需要先启动hbase的接口服务
$hbase_home/bin/hbase-daemon.sh start thrift2 //启动 $hbase_home/bin/hbase-daemon.sh stop thrift2 //停止
5、与yii2整合
在vendor文件夹中新建hbase目录
vendor\hbase\gen-php //复制d:\project\thrift\gen-php vendor\hbase\php //复制d:\project\thrift\thrift-0.11.0\lib\php
由于thrift2的php不使用composer,类库命名方式也不完全符合psr-4标准, 所以本文使用include_path方式来定位并导入类文件。
common\models\harticle.php
<?php namespace common\models; require_once dirname(dirname(__dir__)).'/vendor/hbase/php/lib/thrift/classloader/thriftclassloader.php'; use thrift\classloader\thriftclassloader; $loader = new thriftclassloader(); $loader->registernamespace('thrift', dirname(dirname(__dir__)) . '/vendor/hbase/php/lib'); $loader->register(); require_once dirname(dirname(__dir__)) . '/vendor/hbase/gen-php/types.php'; require_once dirname(dirname(__dir__)) . '/vendor/hbase/gen-php/thbaseservice.php'; use thrift\protocol\tbinaryprotocol; use thrift\transport\tsocket; use thrift\transport\tbufferedtransport; use thbaseserviceclient; use tget; class harticle { private $host = '192.168.1.108'; private $port = 9090; public function get($rowkey){ $socket = new tsocket($this->host, $this->port); $transport = new tbufferedtransport($socket); $protocol = new tbinaryprotocol($transport); $client = new thbaseserviceclient($protocol); $transport->open(); $tablename = "article_2018"; $get = new tget(); $get->row = $rowkey; $arr = $client->get($tablename, $get); $data = array(); $results = $arr->columnvalues; foreach($results as $result) { $qualifier = (string)$result->qualifier; $value = $result->value; $data[$qualifier] = $value; } $transport->close(); return $data; } }
frontend\controllers\testcontroller.php
<?php namespace frontend\controllers; use yii\web\controller; use common\models\harticle; class testcontroller extends controller { public function actionindex() { $harticle = new harticle(); $data = $hbasenews->get('20180908_1f1be3cd26a36e351175015f450fa3f6'); var_dump($data); exit(); } }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
上一篇: 回家的火车票买到了吗
下一篇: 覃奀垚
推荐阅读
-
php框架 - 怎样让phpstorm支持Yii2的Behavior中的方法?
-
在php中使用swoole扩展时,server端的回调函数中如何使用thinkphp框架的方法?
-
详解在Python的Django框架中创建模板库的方法
-
在Python的Django框架中更新数据库数据的方法
-
详解在Python的Django框架中创建模板库的方法
-
在Python的Django框架中更新数据库数据的方法
-
在php的yii2框架中整合hbase库的方法
-
在php的yii2框架中整合hbase库的方法
-
详解在Python的Django框架中创建模板库的方法
-
在php中使用swoole扩展时,server端的回调函数中如何使用thinkphp框架的方法?