在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();
}
}
以上就是本文的全部内容,希望对大家的学习有所帮助。
- 使用Docker-Docker for Web Developers(2)
- 打造高效前端工作环境-tmuxinator
- 在Linux Mint上安装node.js和npm
- JS魔法堂:再识Number type
- (cljs/run-at (JSVM. :browser) "搭建刚好可用的开发环境!")
- (cljs/run-at (->JSVM :browser) "语言基础")
- 微博爬虫
- 电话域名受欢迎,微语言融资3000万
- 前端魔法堂——异常不仅仅是try/catch
- (cljs/run-at (JSVM. :all) "一起实现柯里化")
- (cljs/run-at (JSVM. :browser) "简单类型可不简单啊~")
- 前端魔法堂:解秘FOUC
- JS魔法堂:深究JS异步编程模型
- 前端魔法堂:屏蔽Backspace导致页面回退
- 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
- codeforces 1256C (贪心+构造)
- codeforces 722C(带权并查集+反向思维)
- codeforces 1144D(思维)
- 经典的SparkSQL/Hive-SQL/MySQL面试-练习题
- codeforces 1249E(dp)
- Redis-KV数据库Java连接以及Jedis包的使用
- codeforces 1203D1(暴力)
- codeforces 1366B(线段相交)
- 一文搞懂Python自动化测试框架
- codeforces 1005D(数学)
- JSP开发简单实例演示
- Linux笔记【003】| Linux系统目录结构与基本命令
- codeforces1322A(括号匹配)
- codeforces 1296D(贪心)
- codeforces 1399D