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接口文件

  #/usr/local/thrift/bin/thrift --gen php /usr/local/hbase/src/main/resources/org/apache/hadoop/hbase/thrift/Hbase.thrift
  #(根据自己的目录设置)
 
   生成目录文件: /usr/local/hbase/gen-php/Hbase
   有文件: Hbase.php,Hbase_types.php

把Hbase.php,Hbase_types.php copy到:web目录/php/src/packages/Hbase/

3)使用php脚本测试:

<?phpini_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 = TCellecho ("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 = TRowResultvar_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服务。

转载于:https://www.cnblogs.com/iplus/archive/2012/02/27/4490288.html

PHP通过Thrift操作Hbase相关推荐

  1. c# 访问hbase_大数据技术 windows下C#通过Thrift操作HBase

    本篇教程探讨了大数据技术 windows下C#通过Thrift操作HBase,希望阅读本篇文章以后大家有所收获,帮助大家对大数据技术的理解更加深入. < 1.到apache官网下载Thrift源 ...

  2. php hbase thrift,PHP使用Thrift操作Hbase

    系统架构图 HBase 启动 Thrift服务 hbase启动thrift服务 // 进入安装的hbase bin目录下 // 执行 hbase-daemon.sh start thrift2 需要注 ...

  3. hadoop组件---面向列的开源数据库(九)--python--python使用thrift连接hbase

    Python使用thrift操作HBase thrift支持多种语言进行连接使用,但是没找到linux中的cli操作命令行的形式.所以如果服务器有python环境的话,可以使用python进行连接,快 ...

  4. python提取hbase数据_详解python操作hbase数据的方法介绍

    配置 thrift python使用的包 thrift 个人使用的python 编译器是pycharm community edition. 在工程中设置中,找到project interpreter ...

  5. Python之操作HBASE数据库

    目前有两个库可以操作HBASE:hbase-thrift 和  happybase happybase使用起来比较简单方便,因此重点学习该库,hbase-thrift只做简要介绍. (一)hbase- ...

  6. 用Python3.6操作HBase之HBase-Thrift

    全栈工程师开发手册 (作者:栾鹏) 架构系列文章 ubuntu上hbase的安装和简单使用参考:https://blog.csdn.net/luanpeng825485697/article/deta ...

  7. python使用happybase库操作hbase

    若想深入理解Hbase的系统架构,推荐:https://www.jianshu.com/p/479bc6308381 happybase官方文档:https://happybase.readthedo ...

  8. hive删除hbase数据_Hive进阶:Hive通过外部表操作Hbase数据

    概述: HBase: 查询效率比较高,常为实时业务提供服务,但是其查询方式比较单一,只能通过row方式get单条数据,或者通过scan加过滤器的方式扫描数据表获取数据. Hive: hive用来存储结 ...

  9. HBase 6、用Phoenix Java api操作HBase

    开发环境准备:eclipse3.5.jdk1.7.window8.hadoop2.2.0.hbase0.98.0.2.phoenix4.3.0 1.从集群拷贝以下文件:core-site.xml.hb ...

最新文章

  1. LeetCode 32最长有效括号(困难)
  2. c#下简单的文件读写
  3. 二进制、字节、int范围、编码
  4. python flask服务_在python中Flask配置服务
  5. 将用int型存储的时间转换成time时间格式笔记
  6. 33营销是引导至转化的过程
  7. 安卓mqtt调试工具_MOTT工具调试阿里云物联网平台
  8. 单片机交通灯灯c语言程序,关于LED模拟交通灯单片机C语言程序设计
  9. 疯狂Java讲义笔记汇总
  10. 成都车展:百度车联网的“阅兵”表演
  11. java实现猴子排序_java实现猴子排序(BogoSort)
  12. HIF转16位TIF或者PNG
  13. 23andme的申请流程和注意事项
  14. SCD-缓慢变化维-拉链表
  15. Jquery分页之(上一页,下一页)
  16. 3DTouch介绍(一)
  17. ChatGPT突遭大面积封号!网友应急出解封教程
  18. 网络与社会导论课上所学感悟
  19. jackson的·入门
  20. Bug现形记(一):一个多重继承程序的查错

热门文章

  1. python使用方法视频-使用Python进行视频处理
  2. python开发微信小程序-Python 开发者的微信小程序开发实践
  3. python批量下载文件-python 从远程批量下载文件到本地
  4. php与jpython-Ruby on Rails VS PHP VS Python
  5. python的用途-python“ with”语句的用途是什么?
  6. python代码大全p-python处理写入数据代码讲解
  7. python基础教学视频-Python基础教程(附教学视频)
  8. 零基础自学python看什么书-零基础Python入门看哪本书好?这里有答案
  9. python入门教程 官方-Pytest官方教程-01-安装及入门
  10. window下删除无效的区域通知图标