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


Posted in PHP onSeptember 20, 2018

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

<?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 相关文章推荐
基于PHP 面向对象之成员方法详解
May 04 PHP
Mysql的Root密码忘记,查看或修改的解决方法(图文介绍)
Jun 14 PHP
Linux Apache PHP Oracle 安装配置(具体操作步骤)
Jun 17 PHP
将二维数组转为一维数组的2种方法
May 26 PHP
Laravel 中获取上一篇和下一篇数据
Jul 27 PHP
PHP的Yii框架中创建视图和渲染视图的方法详解
Mar 29 PHP
PHP递归遍历多维数组实现无限分类的方法
May 06 PHP
php英文单词统计器
Jun 23 PHP
PHP实现自动识别原编码并对字符串进行编码转换的方法
Jul 13 PHP
Yii2创建多界面主题(Theme)的方法
Oct 08 PHP
利用php操作memcache缓存的基础方法示例
Aug 02 PHP
PHP数组array类常见操作示例
May 15 PHP
php实现在线考试系统【附源码】
Sep 18 #PHP
PHP htmlspecialchars() 函数实例代码及用法大全
Sep 18 #PHP
Laravel用户授权系统的使用方法示例
Sep 16 #PHP
Laravel中错误与异常处理的用法示例
Sep 16 #PHP
laravel获取不到session的三种解决办法【推荐】
Sep 16 #PHP
win7 wamp 64位 php环境开启curl服务遇到的问题及解决方法
Sep 16 #PHP
thinkphp5引入公共部分header、footer的方法详解
Sep 14 #PHP
You might like
php桌面中心(四) 数据显示
2007/03/11 PHP
PHP array_push 数组函数
2009/12/26 PHP
PHP获取http请求的头信息实现步骤
2012/12/16 PHP
php定时计划任务的实现方法详解
2013/06/06 PHP
WordPress中编写自定义存储字段的相关PHP函数解析
2015/12/25 PHP
PHP5.6读写excel表格文件操作示例
2019/02/26 PHP
浅谈laravel5.5 belongsToMany自身的正确用法
2019/10/17 PHP
深入探讨JavaScript、JQuery屏蔽网页鼠标右键菜单及禁止选择复制
2014/06/10 Javascript
javascript常用函数(1)
2015/11/04 Javascript
JavaScrip数组删除特定元素的几种方法总结
2017/09/06 Javascript
使用clipboard.js实现复制功能的示例代码
2017/10/16 Javascript
基于vue 开发中出现警告问题去除方法
2018/01/25 Javascript
Javascript中prototype与__proto__的关系详解
2018/03/11 Javascript
剖析Angular Component的源码示例
2018/03/23 Javascript
详解微信小程序回到顶部的两种方式
2019/05/09 Javascript
jQuery实现购物车全功能
2021/01/11 jQuery
[02:35]DOTA2超级联赛专访XB 难忘一年九冠称王
2013/06/20 DOTA
[52:52]完美世界DOTA2联赛PWL S3 LBZS vs access 第一场 12.10
2020/12/13 DOTA
Python中的Numpy入门教程
2014/04/26 Python
python使用win32com库播放mp3文件的方法
2015/05/30 Python
python爬取w3shcool的JQuery课程并且保存到本地
2017/04/06 Python
python dlib人脸识别代码实例
2019/04/04 Python
python实现发送form-data数据的方法详解
2019/09/27 Python
详解Python多线程下的list
2020/07/03 Python
Python调用Redis的示例代码
2020/11/24 Python
python的setattr函数实例用法
2020/12/16 Python
Django用内置方法实现简单搜索功能的方法
2020/12/18 Python
实例讲解CSS3中的border-radius属性
2015/08/18 HTML / CSS
医科大学生毕业的自我评价分享
2013/11/12 职场文书
优秀英语专业毕业生求职信
2013/11/23 职场文书
人力资源主管职责范本
2014/03/05 职场文书
春节请假条
2014/04/11 职场文书
学生违反校规检讨书
2014/10/28 职场文书
大学生创业事迹材料
2014/12/30 职场文书
《伯牙绝弦》教学反思
2016/02/16 职场文书
nginx处理http请求实现过程解析
2021/03/31 Servers