PHP语言通过thrift0.9.0操作HBase
小标 2018-09-14 来源 : 阅读 1361 评论 0

摘要:本文主要向大家介绍了PHP语言通过thrift0.9.0操作HBase,通过具体的内容向大家展示,希望对大家学习php语言有所帮助。

本文主要向大家介绍了PHP语言通过thrift0.9.0操作HBase,通过具体的内容向大家展示,希望对大家学习php语言有所帮助。

一 、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,官网是://thrift.apache.org/ ,它是一个类似ice的中间件,用于不同系统语言间信息交换。

二、安装Thrift

在Hadoop和Hbase都已经安装好的集群上安装Thrift,Thrift安装在Hmaster机器上

1. 下载thrift

 

wget //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-config
make
make 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-config
make
make 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


<?php
ini_set("display_errors", E_ALL);
$GLOBALS["THRIFT_ROOT"] = "/html/lib/thrift";
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.php" );

$socket = new TSocket("10.64.60.83", "27090");
$socket->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();?>


本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注职坐标编程语言PHP频道!

本文由 @小标 发布于职坐标。未经许可,禁止转载。
喜欢 | 1 不喜欢 | 0
看完这篇文章有何感觉?已经有1人表态,100%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式AI+学习就业服务平台 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved