博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
PHP通过Thrift操作Hbase
阅读量:6322 次
发布时间:2019-06-22

本文共 3067 字,大约阅读时间需要 10 分钟。

一 、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.9.0/thrift-0.9.0.tar.gz

 

2. 解压

tar -xzf thrift-0.9.0.tar.gz

 

3 .编译安装:

如果是源码编译的,首先要使用./boostrap.sh创建文件./configure

./configure --prefix=/usr/local/thrift --with-php-config=/usr/local/php/bin/php-configmakemake install

 

4. 启动:

/usr/local/hbase/bin/hbase-daemon.sh start thrift --port=27090

 Thrift默认监听的端口是9090

 

5. 编译:thrift_protocol.so

cd /usr/local/src/thrift-0.9.0/lib/php/src/ext/thrift_protocol/usr/local/php/bin/phpize./configure --enable-thrift_protocol --with-php-config=/usr/local/php/bin/php-configmakemake install

 然后把生成的thrift_protocol.so文件配置到php.ini并重启apache服务

 

 6. 使用thrift生成接口文件

/usr/local/thrift/bin/thrift --gen php /usr/local/hbase/src/main/resources/org/apache/hadoop/hbase/thrift/Hbase.thrift

然后把接口文件copy到packages目录下

 

三、测试:

1 .php脚本库操作Hbase

setSendTimeout(10000); // Ten seconds$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 = arrayforeach ($arr as $k => $v) {// $k = TCell echo ("value = {$v->value} ,
"); echo ("timestamp = {$v->timestamp}
");}$arr = $client->getRow($tableName, $row_name);// $client->getRow return a arrayforeach ($arr as $k => $TRowResult) {// $k = 0 ; non-use// $TRowResult = TRowResult var_dump($TRowResult);}$transport->close();?>

 

 

转载于:https://www.cnblogs.com/eprsoft/archive/2012/10/24/2736922.html

你可能感兴趣的文章
sql server 索引阐述系列八 统计信息
查看>>
c# Request对象(13)
查看>>
USB,蓝牙,以太网,还是WIFI?
查看>>
阿里云服务器更改时区为utc
查看>>
APP测试流程和测试点
查看>>
ansible实战
查看>>
PowerShell 远程管理之启用和执行命令
查看>>
mysql安装错误
查看>>
马斯克:我并不讨厌苹果 Apple Watch还不成熟
查看>>
win系统与linux系统之间文件备份
查看>>
PHP中实现函数重载
查看>>
白宫电子邮件系统疑被黑:第一夫人护照信息被曝光
查看>>
站在物联网风口,传感器产业弯道超车?
查看>>
Javascript类型转换的规则
查看>>
一个ios的各种组件、代码分类,供参考
查看>>
Shell脚本学习之sed详解
查看>>
解决Python开发过程中依赖库打包问题的方法
查看>>
java基础(五)-----关键字static
查看>>
[UIKit学习]04.关于HUD提示框,定时任务、开发关于资源常见问题
查看>>
http://git.oschina.net/chunanyong/springrain
查看>>