经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 程序设计 » PHP » 查看文章
在php的yii2框架中整合hbase库的方法
来源:jb51  时间:2018/9/25 19:04:09  对本文有异议

Hbase通过thrift这个跨语言的RPC框架提供多语言的调用。

Hbase有两套thrift接口(thrift1和thrift2),但是它们并不兼容。根据官方文档,thrift1很可能被抛弃,本文以thrift2整合为例。

1、访问官网http://thrift.apache.org/download,下载

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官网(http://archive.apache.org/dist/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目录包含文件:

  1. THBaseService.php
  2. Types.php

4、要通过thrifc调用hbase,需要先启动hbase的接口服务

  1. $HBASE_HOME/bin/hbase-daemon.sh start thrift2 //启动
  2. $HBASE_HOME/bin/hbase-daemon.sh stop thrift2 //停止

5、与yii2整合

在vendor文件夹中新建hbase目录

  1. vendor\hbase\gen-php //复制D:\project\thrift\gen-php
  2. vendor\hbase\php //复制D:\project\thrift\thrift-0.11.0\lib\php

由于thrift2的php不使用Composer,类库命名方式也不完全符合PSR-4标准, 所以本文使用include_path方式来定位并导入类文件。

common\models\HArticle.php

  1. <?php
  2. namespace common\models;
  3. require_once dirname(dirname(__DIR__)).'/vendor/hbase/php/lib/Thrift/ClassLoader/ThriftClassLoader.php';
  4. use Thrift\ClassLoader\ThriftClassLoader;
  5. $loader = new ThriftClassLoader();
  6. $loader->registerNamespace('Thrift', dirname(dirname(__DIR__)) . '/vendor/hbase/php/lib');
  7. $loader->register();
  8. require_once dirname(dirname(__DIR__)) . '/vendor/hbase/gen-php/Types.php';
  9. require_once dirname(dirname(__DIR__)) . '/vendor/hbase/gen-php/THBaseService.php';
  10. use Thrift\Protocol\TBinaryProtocol;
  11. use Thrift\Transport\TSocket;
  12. use Thrift\Transport\TBufferedTransport;
  13. use THBaseServiceClient;
  14. use TGet;
  15.  
  16. class HArticle
  17. {
  18. private $host = '192.168.1.108';
  19. private $port = 9090;
  20. public function get($rowKey){
  21. $socket = new TSocket($this->host, $this->port);
  22. $transport = new TBufferedTransport($socket);
  23. $protocol = new TBinaryProtocol($transport);
  24. $client = new THBaseServiceClient($protocol);
  25. $transport->open();
  26. $tableName = "article_2018";
  27. $get = new TGet();
  28. $get->row = $rowKey;
  29.  
  30. $arr = $client->get($tableName, $get);
  31. $data = array();
  32. $results = $arr->columnValues;
  33. foreach($results as $result)
  34. {
  35. $qualifier = (string)$result->qualifier;
  36. $value = $result->value;
  37. $data[$qualifier] = $value;
  38. }
  39. $transport->close();
  40. return $data;
  41. }
  42. }
  43.  

frontend\controllers\TestController.php

  1. <?php
  2. namespace frontend\controllers;
  3. use yii\web\Controller;
  4. use common\models\HArticle;
  5. class TestController extends Controller
  6. {
  7.  
  8. public function actionIndex()
  9. {
  10. $hArticle = new HArticle();
  11. $data = $hbaseNews->get('20180908_1f1be3cd26a36e351175015f450fa3f6');
  12. var_dump($data);
  13. exit();
  14. }
  15. }
  16.  

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持w3xue。

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号