环境配置

操作系统 centos 5.8    hadoop版本cloudera cdh3u3  hbase版本hbase-0.90.4-cdh3u3  php版本5.2

1.  下载并编译thrift

# wget http://ftp.tc.edu.tw/pub/Apache/thrift/0.8.0/thrift-0.8.0.tar.gz

安装所需的依赖包

# yum install automake libtool flex bison pkgconfig gcc-c++ boost-devel libevent-devel zlib-devel python-devel ruby-devel php php-devel

# tar zxvf  thrift-0.8.0.tar.gz

# cd thrift-0.8.0

#   ./configure --prefix=/home/thrift --with-php-config=/usr/bin/php-config

# make && make install

2  生成php和hbase的接口文件:

# cd /home/thrift/

# bin/thrift  --gen php $HBASE_HOME/src/main/resources/org/apache/hadoop/hbase/thrift/Hbase.thrift

# cd gen-php/Hbase

# ls

Hbase.php  Hbase_types.php

3. 把PHP客户端需要的包及刚才生成的接口文件复制出来供php程序调用:

#  mkdir -p  /var/www/html/hbasethrift/libs     (/var/www/html为apache的web主目录)

#  cp -a /home/soft/thrift-0.8.0/lib/php/src /var/www/html/hbasethrift/libs

#  mkdir -p /var/www/html/hbasethrift/libs/packages

#  cp -a /home/thrift/gen-php/Hbase /var/www/html/hbasethrift/libs/packages

4.  启动hbase thrift server,测试php连接hbase

# ./bin/hbase-daemon.sh start thrift

hbase thrift 默认监听端口为9090

测试php连接与操作hbase代码

# vi hbasethrift.php

$GLOBALS['THRIFT_ROOT'] = '/home/www/html/hbasethrift/libs';

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=newTSocket( 'localhost', 9090 );

$socket->setSendTimeout( 10000 ); // Ten seconds (too long for production, but this is just a demo ;)

$socket->setRecvTimeout( 20000 ); // Twenty seconds

$transport=newTBufferedTransport( $socket );

$protocol=newTBinaryProtocol( $transport );

$client=newHbaseClient( $protocol );

$transport->open();

echo nl2br( "listing tables...\n" );

$tables= $client->getTableNames();

sort( $tables );

foreach ( $tables as $name ) {

echo nl2br( "  found: {$name}\n" );

}

$columns=array(

new ColumnDescriptor( array(

'name' =>'entry:',

'maxVersions' =>10

) ),

new ColumnDescriptor( array(

'name' =>'unused:'

) )

);

$t="table1";

echo( "creating table: {$t}\n" );

try {

$client->createTable( $t, $columns );

} catch ( AlreadyExists $ae ) {

echo( "WARN: {$ae->message}\n" );

}

$t="test";

echo( "column families in {$t}:\n" );

$descriptors= $client->getColumnDescriptors( $t );

asort( $descriptors );

foreach ( $descriptors as $col ) {

echo( "  column: {$col->name}, maxVer: {$col->maxVersions}\n" );

}

$t="table1";

echo( "column families in {$t}:\n" );

$descriptors= $client->getColumnDescriptors( $t );

asort( $descriptors );

foreach ( $descriptors as $col ) {

echo( "  column: {$col->name}, maxVer: {$col->maxVersions}\n" );

}

$t="table1";

$row="row_name";

$valid="foobar-\xE7\x94\x9F\xE3\x83\x93";

$mutations=array(

new Mutation( array(

'column' =>'entry:foo',

'value' =>$valid

) ),

);

// 多记录批量提交(200提交一次时测试小记录大概在5000/s左右): $rows = array('timestamp'=>$timestamp, 'columns'=>array('txt:col1'=>$col1, 'txt:col2'=>$col2, 'txt:col3'=>$col3)); $records = array(rowkey=>$rows,...); $batchrecord = array(); foreach ($records as $rowkey => $rows) { $timestamp = $rows['timestamp']; $columns = $rows['columns']; // 生成一条记录 $record = array(); foreach($columns as $column => $value) { $col = new Mutation(array('column'=>$column, 'value'=>$value)); array_push($record, $col); } // 加入记录数组 $batchTmp = new BatchMutation(array('row'=>$rowkey, 'mutations'=>$record)); array_push($batchrecord, $batchTmp); } $ret = $hbase->mutateRows('test', $batchrecord);

$client->mutateRow( $t, $row, $mutations );

$table_name="table1";

$row_name='row_name';

$fam_col_name='entry:foo';

$arr= $client->get($table_name, $row_name , $fam_col_name);

// $arr=array

foreach ( $arr as $k=>$v  ) {

// $k=TCell

echo ("value= {$v->value} ,
");

echo ("timestamp= {$v->timestamp}
");

}

$table_name="table1";

$row_name="row_name";

$arr= $client->getRow($table_name, $row_name);

// $client->getRow return a array

foreach ( $arr as $k=>$TRowResult  ) {

// $k=0; non-use

// $TRowResultTRowResult= TRowResult

var_dump($TRowResult);

}

//scannerOpenWithStop($tableName, $startRow, $stopRow, $columns);

$table_name='zTest';

$startRow="9-9-20120627-";

$stopRow="9-9-20120627_";

$columns=Array('info:');

$result=$client->scannerOpenWithStop($table_name,$startRow,$stopRow,$columns);

while (true) {

$record= $client->scannerGet($result);

if ($record== NULL) {

break;

}

foreach($record as $TRowResult) {

$row= $TRowResult->row;

$column= $TRowResult->columns;

foreach($column as $family_column=>$Tcell){

echo("$family_column={$Tcell->value}
");

echo("timestamp is $Tcell->timestamp");

}

}

}

$transport->close();

?>

通过浏览器访问http://localhost/hbasethrift/hbasethrift.php,如果显示hbase中的表名与新建表table1 ,说明连接成功。

php hbase thrift,php通过thrift操作hbase相关推荐

  1. HBase安装配置以及Java操作hbase

    2019独角兽企业重金招聘Python工程师标准>>> Apache HBase Apache HBase™是Hadoop数据库,是一个分布式,可扩展的大数据存储. 当您需要对大数据 ...

  2. HBase之四--(1):Java操作Hbase进行建表、删表以及对数据进行增删改查,条件查询...

    1.搭建环境 新建JAVA项目,添加的包有: 有关Hadoop的hadoop-core-0.20.204.0.jar 有关Hbase的hbase-0.90.4.jar.hbase-0.90.4-tes ...

  3. hbase常见错误---IDE连接操作hbase报错 Insufficient permissions (user=Administrator

    IDEA连接hbase,并操作hbase的时候报错,原因是,本地机器的hostname为Administrator,但是我们的hbase表的用户没有Administrator,所以出现Administ ...

  4. 使用 Java API 操作 HBase

    使用 Java API 操作 HBase 数据库,就类似HBase Shell,本质上一个是Java 代码,一个是Shell 命令.(hadoop 的文件系统莫不如此,可用Java API 的方式操作 ...

  5. PHP通过Thrift操作Hbase

    HBase是一个开源的NoSQL产品,它是实现了Google BigTable论文的一个开源产品,和Hadoop和HDFS一起,可用来存储和处理海量column family的数据.官方网址是:htt ...

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

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

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

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

  8. python链接hbase模块_利用python访问Hbase(Thrift模块安装与测试)

    转:http://shineforever.blog.51cto.com/1429204/1567640/ hadoop环境介绍: master服务:node1 slave服务器:node2,node ...

  9. python2.7.12操作Hbase

    前置条件:您已经安装好Hbase.python2.7 题外话:最好自己安装个虚拟环境,以下操作都是在虚拟环境中的 (ma) hadoop@master:/usr/local/pycharm/bin$ ...

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

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

最新文章

  1. mysql性能优化之sql语句优化最强合集
  2. java spring 服务器关闭_通过springboot怎么停止服务器??
  3. case when是不是只要满足第一个别的就不进行执行了
  4. VTK:可视化算法之Hello
  5. [Abp vNext 源码分析] - 19. 多租户
  6. 植物大战僵尸不能保存进度
  7. Node操作Mysql的简单例子
  8. android surfaceview 技术,Android中SurfaceView的理解和使用
  9. flashAndPHP 简单交互
  10. python提取数据库nosql_用 Python 写一个 NoSQL 数据库
  11. 顺序表的动态存储细节
  12. C# 中的 ConfigurationManager类引用方法应用程序配置文件App.config的写法
  13. 【名牌电脑制作隐藏分区与释放隐藏分区的方法】
  14. linux下电路仿真软件下载,Virtual Breadboard免费版
  15. MySQl:子查询和关联查询哪个效率高
  16. 2021.09.17 word文档撤销按钮变灰,快捷键失效解决办法
  17. cim系统 是什么_CIM和IBM i:它是什么以及它如何工作
  18. 解读Secondary NameNode的功能
  19. 电脑使用小常识(4):让win10强制更新棍淡
  20. [AHK]按文件的年份归档到不同年份目录里

热门文章

  1. 【Sql查询数据】for 日、月、年
  2. WF的性能特征(一)
  3. CreatorPrimer|优化编辑器
  4. HDU3017:Lucas定理及详解
  5. Java中按值传递与按引用传递的区别
  6. Android - 获取字符串长度的宽度
  7. Linux硬链接和符号链接(转)
  8. debian sources
  9. 手机配置代理报错invalid host header
  10. 因项目需要做——ubuntu16.04 双网卡绑定