PHP通过Thrift操作Hbase
HBase是一个开源的NoSQL产品,它是实现了Google BigTable论文的一个开源产品,和Hadoop和HDFS一起,可用来存储和处理海量column family的数据。官方网址是:http://hbase.apache.org
一 、HBase访问接口
1. Native Java API,最常规和高效的访问方式,适合Hadoop MapReduce Job并行批处理HBase表数据
2. HBase Shell,HBase的命令行工具,最简单的接口,适合HBase管理使用
3. Thrift Gateway,利用Thrift序列化技术,支持C++,PHP,Python等多种语言,适合其他异构系统在线访问HBase表数据
4. REST Gateway,支持REST 风格的Http API访问HBase, 解除了语言限制
5. Pig,可以使用Pig Latin流式编程语言来操作HBase中的数据,和Hive类似,本质最终也是编译成MapReduce Job来处理HBase表数据,适合做数据统计
6. Hive,当前Hive的Release版本尚没有加入对HBase的支持,但在下一个版本Hive 0.7.0中将会支持HBase,可以使用类似SQL语言来访问HBase
如果使用PHP操作Hbase,推荐使用Facebook开源出来的thrift,官网是:http://thrift.apache.org/ ,它是一个类似ice的中间件,用于不同系统语言间信息交换。
二、安装Thrift
在Hadoop和Hbase都已经安装好的集群上安装Thrift,Thrift安装在Hmaster机器上
1. 下载thrift
wget http://mirror.bjtu.edu.cn/apache//thrift/0.8.0/thrift-0.8.0.tar.gz
2. 解压
tar -xzf thrift-0.8.0.tar.gz
3 .编译安装:
如果是源码编译的,首先要使用./boostrap.sh创建文件./configure ,我们这下载的tar包,自带有configure文件了。((可以查阅README文件))
If you are building from the first time out of the source repository, you will
need to generate the configure scripts. (This is not necessary if you
downloaded a tarball.) From the top directory, do:
./bootstrap.sh
./configure
make ; make install
4. 启动:
# ./bin/hbase-daemon.sh start thrift [--port=PORT]
starting thrift, logging to /home/banping/hbase/hbase-0.90.3/bin/../logs/hbase-root-thrift-localhost.localdomain.out
Thrift默认监听的端口是9090
使用jps查看进程,看到ThriftServer进程:

三、测试:
1 .php脚本库操作Hbase
PHP通过Thrift访问Hbase的库是在thrift-0.8.0/lib/php/src目录下,其实这个文件夹下也包含通过Thrift访问Hbase的PHP扩展源代码。
1)复制thrift-0.8.0/lib/php到相应的php web目录。
2)然后生成php与hbase接口文件
把Hbase.php,Hbase_types.php copy到:web目录/php/src/packages/Hbase/
3)使用php脚本测试:
- <?php
- ini_set('display_errors', E_ALL);
- $GLOBALS['THRIFT_ROOT'] = './php/src';
- require_once( $GLOBALS['THRIFT_ROOT'] . '/Thrift.php' );
- require_once( $GLOBALS['THRIFT_ROOT'] . '/transport/TSocket.php' );
- require_once( $GLOBALS['THRIFT_ROOT'] . '/transport/TBufferedTransport.php' );
- require_once( $GLOBALS['THRIFT_ROOT'] . '/protocol/TBinaryProtocol.php' );
- require_once( $GLOBALS['THRIFT_ROOT'] . '/packages/Hbase/Hbase.php' );
- $socket = new TSocket('10.64.60.83', '9090');
- $socket->setSendTimeout(10000); // Ten seconds (too long for production, but this is just a demo ;)
- $socket->setRecvTimeout(20000); // Twenty seconds
- $transport = new TBufferedTransport($socket);
- $protocol = new TBinaryProtocol($transport);
- $client = new HbaseClient($protocol);
- $transport->open();
- //获取表列表
- $tables = $client->getTableNames();
- sort($tables);
- foreach ($tables as $name) {
- echo( " found: {$name}\n" );
- }
- //创建新表student
- $columns = array(
- new ColumnDescriptor(array(
- 'name' => 'id:',
- 'maxVersions' => 10
- )),
- new ColumnDescriptor(array(
- 'name' => 'name:'
- )),
- new ColumnDescriptor(array(
- 'name' => 'score:'
- )),
- );
- $tableName = "student";
- try {
- $client->createTable($tableName, $columns);
- } catch (AlreadyExists $ae) {
- echo( "WARN: {$ae->message}\n" );
- }
- //获取表的描述
- $descriptors = $client->getColumnDescriptors($tableName);
- asort($descriptors);
- foreach ($descriptors as $col) {
- echo( " column: {$col->name}, maxVer: {$col->maxVersions}\n" );
- }
- //修改表列的数据
- $row = '2';
- $valid = "foobar-\xE7\x94\x9F\xE3\x83\x93";
- $mutations = array(
- new Mutation(array(
- 'column' => 'score',
- 'value' => $valid
- )),
- );
- $client->mutateRow($tableName, $row, $mutations);
- //获取表列的数据
- $row_name = '2';
- $fam_col_name = 'score';
- $arr = $client->get($tableName, $row_name, $fam_col_name);
- // $arr = array
- foreach ($arr as $k => $v) {
- // $k = TCell
- echo ("value = {$v->value} , <br> ");
- echo ("timestamp = {$v->timestamp} <br>");
- }
- $arr = $client->getRow($tableName, $row_name);
- // $client->getRow return a array
- foreach ($arr as $k => $TRowResult) {
- // $k = 0 ; non-use
- // $TRowResult = TRowResult
- var_dump($TRowResult);
- }
- $transport->close();
- ?>
通过浏览器查看看到项目中的所有表,证明PHP可以通过thrift访问HBase了。
2. 使用PHP扩展的方式来使用thrift
我们使用PHP自带的phpize来生成Thtift的php扩展。该扩展的源码结构:
hadoop@ubuntu:/usr/local/hbase-0.90.4/thrift-0.8.0/lib/php/src
$ cd ext/thrift_protocol
$ /usr/local/php/bin/phpize
$ ./configure --with-php-config=/usr/local/php/bin/php-config --enable-thrift_protocol
$ make
$ make install
然后把生成的thrift_protocol.so文件配置到php.ini并重启apache服务。
PHP通过Thrift操作Hbase的更多相关文章
- Nodejs通过Thrift操作hbase卡住原因分析及与javascript的垃圾回收机制的关系
在最近使用Nodejs通过Thrift操作hbase的时候写了个脚本,不断发送http请求,从而取得hbase下所需的数据,但是在run的过程中for循环并没有执行完全,在执行一部分后会卡住,就再也进 ...
- Python之操作HBASE数据库
目前有两个库可以操作HBASE:hbase-thrift 和 happybase happybase使用起来比较简单方便,因此重点学习该库,hbase-thrift只做简要介绍. (一)hbase- ...
- 大数据自学6-Hue集成环境操作Hbase
上一章讲过,Hue集成环境是可以直接操作Hbase,但是公司的环境一直报错,虽然也可以透过写代码访问Hbase,但是看到Hue环境中无法访问,还是觉得不爽,因此决定再花些力气找找原因. 找原因要先查L ...
- 大数据自学5-Python操作Hbase
在Hue环境中本身是可以直接操作Hbase数据库的,但是公司的环境不知道什么原因一直提示"Api Error:timed out",进度条一直在跑,却显示不出表. 但是在CDH后台 ...
- python 操作 hbase
python 是万能的,当然也可以通过api去操作big database 的hbase了,python是通过thrift去访问操作hbase 以下是在centos7 上安装操作,前提是hbase已经 ...
- 【Hbase三】Java,python操作Hbase
Java,python操作Hbase 操作Hbase python操作Hbase 安装Thrift之前所需准备 安装Thrift 产生针对Python的Hbase的API 启动Thrift服务 执行p ...
- 吴裕雄--天生自然HADOOP操作实验学习笔记:使用hive操作hbase
实验目的 熟悉hive和hbase的操作 熟悉hadoop.hbase.hive.zookeeper的关系 熟练大数据环境的搭建 学会分析日志排除问题 实验原理 1.hive整合hbase原理 前面大 ...
- 基于jython操作hbase
一.前言 关于jython介绍,直接上官网www.jython.org,可以得到详细资料,这里只介绍一下jython操作hbase的一些方法,本质上和用java操作hbase差不多,只不过语法换成了p ...
- PySpark操作HBase时设置scan参数
在用PySpark操作HBase时默认是scan操作,通常情况下我们希望加上rowkey指定范围,即只获取一部分数据参加运算.翻遍了spark的python相关文档,搜遍了google和stackov ...
随机推荐
- RII K25A 语音空中飞鼠 红外学习步骤
1.按住多功能遥控器上的SET按键,超过4秒不要放手,LED指示灯会闪一次,然后长亮.2.将多功能遥控器的红外口对准你原来的遥控器的红外口,然后按RII多功能遥控器面上任何按钮,上面灯将会闪动,闪动过 ...
- Storm几篇文章
http://tianhailong.com/ http://www.cnblogs.com/panfeng412/archive/2012/07/02/storm-common-patterns-o ...
- C++中的内存对齐
在我们的程序中,数据结构还有变量等等都需要占有内存,在很多系统中,它都要求内存分配的时候要对齐,这样做的好处就是可以提高访问内存的速度. 我们还是先来看一段简单的程序: 程序一 1 #include ...
- Jsp、Servlet
1 forward.redirect forward 转发是服务器行为,浏览器根本不知道服务器发送的内容是从哪儿来,所以它的地址栏中还是原来的地址. redirect 重定向是客户端行为.redire ...
- qt example
#include"mainwindow.h" #include"ui_mainwindow.h" #include<QWebFrame> #incl ...
- UVA 12230 - Crossing Rivers(概率)
UVA 12230 - Crossing Rivers 题目链接 题意:给定几条河,每条河上有来回开的船,某一天出门,船位置随机,如今要求从A到B,所须要的期望时间 思路:每条河的期望,最坏就是船刚开 ...
- Git基础 1 ---- 版本控制系统的介绍
1 Git 1 版本控制系统 vcs - version control system 2 版本控制是一种记录一个或若干文件内容变化,以便将来查阅特定版本修订情况的系统 3 版本控制系统的主要功能 1 ...
- Oracle PL/SQL 游标
在PL/SQL块中执行SELECT.INSERT.DELETE和UPDATE语句时,ORACLE会在内存中为其分配上下文区(Context Area),即缓冲区.游标是指向该区的一个指针,或是命名一个 ...
- 最简单的javascript 竖向菜单
<html xmlns="http://www.w3.org/1999/xhtml"><head runat="server"> ...
- Visual Studio Tools for Unity安装及使用
Visual Studio Tools for Unity安装及使用 转载自:CSDN 晃了一下,10.1到现在又过去两个月了,这两个月什么也没有学,整天上班下班,从这周末开始拾起unity,为了年后 ...