中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

php通過thrift操作hbase

發布時間:2020-04-10 23:36:32 來源:網絡 閱讀:10030 作者:jiedushi 欄目:關系型數據庫

 環境配置 

操作系統 centos 5.8    hadoop版本cloudera cdh4u3  hbase版本hbase-0.90.4-cdh4u3  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

 

  1. <?php  
  2. $GLOBALS['THRIFT_ROOT'] = '/home/www/html/hbasethrift/libs';  
  3. require_once( $GLOBALS['THRIFT_ROOT'].'/Thrift.php' );  
  4. require_once( $GLOBALS['THRIFT_ROOT'].'/transport/TSocket.php' );  
  5. require_once( $GLOBALS['THRIFT_ROOT'].'/transport/TBufferedTransport.php' );  
  6. require_once( $GLOBALS['THRIFT_ROOT'].'/protocol/TBinaryProtocol.php' );  
  7. require_once( $GLOBALS['THRIFT_ROOT'].'/packages/Hbase/Hbase.php' );  
  8. $socket = new TSocket( 'localhost', 9090 );  
  9. $socket->setSendTimeout( 10000 ); // Ten seconds (too long for production, but this is just a demo ;)  
  10. $socket->setRecvTimeout( 20000 ); // Twenty seconds  
  11. $transport = new TBufferedTransport( $socket );  
  12. $protocol = new TBinaryProtocol( $transport );  
  13. $client = new HbaseClient( $protocol );  
  14. $transport->open();  
  15. echo nl2br( "listing tables...\n" );  
  16. $tables = $client->getTableNames();  
  17. sort( $tables );  
  18. foreach ( $tables as $name ) {  
  19. echo nl2br( "  found: {$name}\n" );  
  20. }  
  21. $columns = array(  
  22. new ColumnDescriptor( array(  
  23. 'name' => 'entry:',  
  24. 'maxVersions' => 10  
  25. ) ),  
  26. new ColumnDescriptor( array(  
  27. 'name' => 'unused:'  
  28. ) )  
  29. );  
  30. $t = "table1";  
  31. echo( "creating table: {$t}\n" );  
  32. try {  
  33. $client->createTable( $t, $columns );  
  34. } catch ( AlreadyExists $ae ) {  
  35. echo( "WARN: {$ae->message}\n" );  
  36. }  
  37. $t = "test";  
  38. echo( "column families in {$t}:\n" );  
  39. $descriptors = $client->getColumnDescriptors( $t );  
  40. asort( $descriptors );  
  41. foreach ( $descriptors as $col ) {  
  42. echo( "  column: {$col->name}, maxVer: {$col->maxVersions}\n" );  
  43. }  
  44. $t = "table1";  
  45. echo( "column families in {$t}:\n" );  
  46. $descriptors = $client->getColumnDescriptors( $t );  
  47. asort( $descriptors );  
  48. foreach ( $descriptors as $col ) {  
  49. echo( "  column: {$col->name}, maxVer: {$col->maxVersions}\n" );  
  50. }  
  51. $t = "table1";  
  52. $row = "row_name";  
  53. $valid = "foobar-\xE7\x94\x9F\xE3\x83\x93";  
  54. $mutations = array(  
  55. new Mutation( array(  
  56. 'column' => 'entry:foo',  
  57. 'value' => $valid  
  58. ) ),  
  59. );  
  60. // 多記錄批量提交(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);
  61.  
  62. $client->mutateRow( $t, $row, $mutations );  
  63. $table_name = "table1";  
  64. $row_name = 'row_name';  
  65. $fam_col_name = 'entry:foo';  
  66. $arr = $client->get($table_name, $row_name , $fam_col_name);  
  67. // $arr = array  
  68. foreach ( $arr as $k=>$v  ) {  
  69. // $k = TCell  
  70. echo ("value = {$v->value} , <br>  ");  
  71. echo ("timestamp = {$v->timestamp}  <br>");  
  72. }  
  73. $table_name = "table1";  
  74. $row_name = "row_name";  
  75. $arr = $client->getRow($table_name, $row_name);  
  76. // $client->getRow return a array  
  77. foreach ( $arr as $k=>$TRowResult  ) {  
  78. // $k = 0 ; non-use  
  79. // $TRowResultTRowResult = TRowResult  
  80. var_dump($TRowResult);  
  81. }  
  82.  
  83. //scannerOpenWithStop($tableName, $startRow, $stopRow, $columns); 
  84. $table_name = 'zTest'
  85. $startRow="9-9-20120627-"
  86. $stopRow="9-9-20120627_"
  87. $columns = Array ('info:'); 
  88. $result =$client->scannerOpenWithStop($table_name,$startRow,$stopRow,$columns); 
  89. while (true) { 
  90.       $record = $client->scannerGet($result); 
  91.       if ($record == NULL) { 
  92.           break; 
  93.       } 
  94.       
  95.       foreach($record as $TRowResult) { 
  96.           $row = $TRowResult->row; 
  97.           $column = $TRowResult->columns; 
  98.            foreach($column as $family_column=>$Tcell){ 
  99.                 echo("$family_column={$Tcell->value}<br>");
  100. echo("timestamp is $Tcell->timestamp");
  101.             } 
  102.       } 
  103.   } 
  104. $transport->close();  
  105. ?>  

通過瀏覽器訪問http://localhost/hbasethrift/hbasethrift.php,如果顯示hbase中的表名與新建表table1 ,說明連接成功。

hbase thrift api 參考http://hbase.apache.org/apidocs/org/apache/hadoop/hbase/thrift/doc-files/index.html


參考http://www.banping.com/2011/07/08/hbase-thrift-php/

 

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

札达县| 遂昌县| 临澧县| 大庆市| 枣强县| 友谊县| 巴林右旗| 岳普湖县| 元氏县| 贞丰县| 东台市| 深圳市| 澜沧| 黑龙江省| 师宗县| 元氏县| 昆山市| 商丘市| 改则县| 高台县| 太原市| 长春市| 信阳市| 隆德县| 林芝县| 三台县| 秭归县| 固始县| 页游| 永仁县| 宝鸡市| 邻水| 扶绥县| 莱州市| 五寨县| 石家庄市| 通化市| 朝阳区| 辰溪县| 阿荣旗| 大方县|