在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:projectthriftthrift.exe)
thrift-0.11.0.tar.gz(thrift相关库,保存在D:projectthriftthrift-0.11.0)
2、访问hbase官网(http://archive.apache.org/dist/hbase/),下载hbase-1.2.6-src.tar.gz
解压保存在D:projectthrifthbase-1.2.6
3、生成php接口代码
解压hbase-1.2.6-src.tar.gz,hbase-1.2.6hbase-thriftsrcmainresourcesorgapachehadoophbase文件夹同时存在thrift和thrift2接口描述文件,本文只使用thrift2
在D:projectthrift目录中输入cmd命令,生成对应php的sdk文件。
thrift -gen php hbase-1.2.6hbase-thriftsrcmainresourcesorgapachehadoophbasethrift2hbase.thrift
生成的D:projectthriftgen-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目录
vendorhbasegen-php //复制D:projectthriftgen-php vendorhbasephp //复制D:projectthriftthrift-0.11.0libphp
由于thrift2的php不使用Composer,类库命名方式也不完全符合PSR-4标准, 所以本文使用include_path方式来定位并导入类文件。
commonmodelsHArticle.php
<?php namespace commonmodels; require_once dirname(dirname(__DIR__)).'/vendor/hbase/php/lib/Thrift/ClassLoader/ThriftClassLoader.php'; use ThriftClassLoaderThriftClassLoader; $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 ThriftProtocolTBinaryProtocol; use ThriftTransportTSocket; use ThriftTransportTBufferedTransport; 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; } }
frontendcontrollersTestController.php
<?php namespace frontendcontrollers; use yiiwebController; use commonmodelsHArticle; class TestController extends Controller { public function actionIndex() { $hArticle = new HArticle(); $data = $hbaseNews->get('20180908_1f1be3cd26a36e351175015f450fa3f6'); var_dump($data); exit(); } }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。
- php概述
- php教程
- php环境搭建
- PHP书写格式
- php变量
- php常量
- PHP注释
- php数组
- php字符串 string
- PHP整型 integer
- PHP浮点型 float
- php布尔型
- php数据类型之数组
- php数据类型之对象
- php数据类型之null
- php数据类型之间的转换
- php运算符
- php表达式
- PHP循环控制
- PHP流程控制
- php函数
- php全局变量
- PHP魔术变量
- php命名空间
- php 日期
- PHP包含文件
- php文件
- PHP 文件上传
- php Cookies
- php Sessions
- php email
- php安全email
- php错误处理
- PHP异常处理
- php过滤器
- PHP 高级过滤器
- php json
- php 表单
- PHP MySQL 简介
- PHP 连接 MySQL
- php创建数据库
- php 创建表
- php mysq 插入数据
- PHP MySQL 插入多条数据
- PHP MySQL 预处理语句
- php mysql 读取数据
- php mysql where
- PHP MySQL Order By
- PHP MySQL Update
- PHP MySQL Delete
- php ODBC
- python写文件时覆盖原来的实例方法
- Laravel 解决419错误 -ajax请求错误的问题(CSRF验证)
- PHP判断当前使用的是什么浏览器(推荐)
- PHP 计算两个时间段之间交集的天数示例
- laravel model 两表联查示例
- Laravel使用模型实现like模糊查询的例子
- Laravel 模型使用软删除-左连接查询-表起别名示例
- PHP上传图片到数据库并显示的实例代码
- Laravel 5.5 实现禁用用户注册示例
- 解决php用mysql方式连接数据库出现Deprecated报错问题
- Laravel自动生成UUID,从建表到使用详解
- Python中Selenium库使用教程详解
- 浅谈laravel aliases别名的原理
- Yii2框架中一些折磨人的坑
- php获取是星期几的的一些常用姿势