請先參考HBase + Thrift + PHP

首先要先引用Thrift

<?
        //include thrift路徑
        GLOBALS['THRIFT_ROOT'] = '/var/www/hbase/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/Hbase.php' );

        //建立連線
        socket = new TSocket( 'johnson-cloud', 9090 );          socket->setSendTimeout( 10000 ); // Ten seconds
        socket->setRecvTimeout( 20000 ); // Twenty seconds          transport = new TBufferedTransport( socket );          protocol = new TBinaryProtocol( transport );          client = new HbaseClient( protocol );          //啟動          transport->open();


        /*程式碼寫在這*/

        $transport->close();
?>

1.列出hbase 裡的所有 table

<?php
        echo( "listing tables...\n" );
        tables = client->getTableNames();
        sort( tables );          foreach ( tables as name )          {                  echo name."\n";
        }
?>

2.刪除table

<?php
        name = "test2"; //要刪除的資料表          if(client->isTableEnabled(name))          {                  echo "關閉".name."資料表\n";
                client->disableTable(name);
        }
        echo "刪除中...\n";
        client->deleteTable(name);
        echo "刪除完成";
?>

3.新增table

<?php
        //定義columns 的物件結構,一個Column需要new出一個ColumnDescriptor物件
        columns = array(                  new ColumnDescriptor( array(                          'name' => 'name:'                  ) ),                  new ColumnDescriptor( array(                          'name'=> 'scores:',                  ) )          );            t = "test2";//Table name
        echo( "creating table: {t}\n" );          try          {                  client->createTable( t, columns );
        }
        catch ( AlreadyExists ae )          {                  echo( "WARN: {ae->message}\n" );
        }
?>

4.列出table內的column family

<?php
        //列出 table內的column family
        t = "results";//資料表名稱          echo( "column families in {t}:\n" );
        descriptors = client->getColumnDescriptors( t );          asort( descriptors );
        foreach ( descriptors as col )
        {
                echo( " column: {col->name}, maxVer: {col->maxVersions}\n" );
        }
?>

5.寫入資料

<?php
        t = "results";//Table name          row = "s96113106";//row name
        valid = "Tom";          mutations = array(
        new Mutation( array(
                'column' => 'name:',
                'value' => valid                   ) )          );          client->mutateRow( t, row, $mutations );
        echo "新增成功";
?>

6.讀取資料,取得一個 column value

<?php
        include "ThriftLib.php";
        table_name = 'results';//Table name          row_name = 's96113106';//row name
        fam_col_name = 'scores:math';//column name          arr = client->get(table_name, row_name , fam_col_name);

        foreach ( arr as k=>v )          {                  //// k = TCell物件
                echo "value = {v->value} , 
"; echo "timestamp = {
v->timestamp} <br>"; } ?>
Categories: HadoopPHP