首页 > 编程 > PHP > 正文

php通过thrift操作hbase

2020-03-22 17:33:57
字体:
来源:转载
供稿:网友
  • 环境配置

    操作系统 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

    <?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 = new TSocket( 'localhost', 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(); 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 ) ), ); $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} , <br>  "); echo ("timestamp = {$v->timestamp}  <br>"); } $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 // $TRowResult = TRowResult var_dump($TRowResult); } $transport->close(); ?> 

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


    本文出自 “东杰书屋” 博客,请务必保留此出处http://jiedushi.blog.51cto.com/673653/902550

    PHP编程

    郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。

  • 发表评论 共有条评论
    用户名: 密码:
    验证码: 匿名发表