当前位置:首页 > CMS教程 > 其它CMS > 列表

在php的yii2框架中整合hbase库的方法

发布:smiling 来源: PHP粉丝网  添加日期:2021-10-29 11:08:02 浏览: 评论:0 

这篇文章主要介绍了在php的yii2框架中整合hbase库的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧。

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目录包含文件:

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

  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.   private $host = '192.168.1.108'
  18.   private $port = 9090; 
  19.     
  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.       
  27.     $tableName = "article_2018"
  28.       
  29.     $get = new TGet(); 
  30.     $get->row = $rowKey
  31.  
  32.     $arr = $client->get($tableName$get); 
  33.     $data = array(); 
  34.     $results = $arr->columnValues; 
  35.     foreach($results as $result
  36.     { 
  37.       $qualifier = (string)$result->qualifier; 
  38.       $value = $result->value; 
  39.       $data[$qualifier] = $value
  40.     } 
  41.     $transport->close(); 
  42.     return $data
  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.   public function actionIndex() 
  8.   { 
  9.     $hArticle = new HArticle(); 
  10.     $data = $hbaseNews->get('20180908_1f1be3cd26a36e351175015f450fa3f6'); 
  11.     var_dump($data); 
  12.     exit(); 
  13.   } 
  14. }

Tags: yii2 hbase

分享到: