在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中记录用户访问过的产品,在cookie记录产品id,id取得产品信息
May 04 PHP
PHP中使用unset销毁变量并内存释放问题
Jul 05 PHP
屏蔽机器人从你的网站搜取email地址的php代码
Nov 14 PHP
php另类上传图片的方法(PHP用Socket上传图片)
Oct 30 PHP
PHP set_error_handler()函数使用详解(示例)
Nov 12 PHP
PHP实现长文章分页实例代码(附源码)
Feb 03 PHP
PHP文件操作实例总结
Sep 27 PHP
PHPCMS V9 添加二级导航的思路详解
Oct 20 PHP
php字符集转换
Jan 23 PHP
php识别翻转iphone拍摄的颠倒图片
May 17 PHP
PHP使Laravel为JSON REST API返回自定义错误的问题
Oct 16 PHP
php项目中类的自动加载实例讲解
Sep 12 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+Ajax实现验证码的实时验证
2016/07/20 PHP
PHP使用FFmpeg获取视频播放总时长与码率等信息
2016/09/13 PHP
PHP迭代与递归实现无限级分类
2017/08/28 PHP
XmlUtils JS操作XML工具类
2009/10/01 Javascript
JQuery 解析多维的Json数据格式
2009/11/02 Javascript
js页面跳转常用的几种方式
2010/11/25 Javascript
jQuery+css+html实现页面遮罩弹出框
2013/03/21 Javascript
javascript中数组array及string的方法总结
2014/11/28 Javascript
基于JQuery打造无缝滚动新闻步骤详解
2016/03/31 Javascript
jQuery 利用$.ajax 时获取原生XMLHttpRequest 对象的方法
2016/08/25 Javascript
js动态生成form 并用ajax方式提交的实现方法
2016/09/09 Javascript
Angular和Vue双向数据绑定的实现原理(重点是vue的双向绑定)
2016/11/22 Javascript
Angular实现双向折叠列表组件的示例代码
2017/11/21 Javascript
Cookbook组件形式:优化 Vue 组件的运行时性能
2018/11/25 Javascript
vue项目中引入vue-datepicker插件的详解
2019/05/14 Javascript
JS Thunk 函数的含义和用法实例总结
2020/04/08 Javascript
Vue实现购物小球抛物线的方法实例
2020/11/22 Vue.js
Python3模拟登录操作实例分析
2019/03/12 Python
Apache,wsgi,django 程序部署配置方法详解
2019/07/01 Python
python自定义时钟类、定时任务类
2021/02/22 Python
pytorch对梯度进行可视化进行梯度检查教程
2020/02/04 Python
windows10环境下用anaconda和VScode配置的图文教程
2020/03/30 Python
Python对excel的基本操作方法
2021/02/18 Python
HTML5表单验证特性(知识点小结)
2020/03/10 HTML / CSS
白俄罗斯大卖场:21vek.by
2019/07/25 全球购物
Nicole Miller官方网站:纽约女装品牌
2019/09/14 全球购物
eDreams德国:南欧领先的在线旅游公司
2020/12/07 全球购物
接待员岗位责任制
2014/02/10 职场文书
计算机毕业生自荐信
2014/06/12 职场文书
中共广东省委常委会党的群众路线教育实践活动整改方案
2014/09/23 职场文书
学前班幼儿评语大全
2014/12/29 职场文书
教师考核表个人总结
2015/02/12 职场文书
合同审查法律意见书
2015/06/04 职场文书
伊索寓言读书笔记
2015/06/30 职场文书
python的变量和简单数字类型详解
2021/09/15 Python
8个JS的reduce使用实例和reduce操作方式
2021/10/05 Javascript