当前位置:天才代写 > tutorial > 其他教程 > PHP通过Thrift操纵Hbase

PHP通过Thrift操纵Hbase

2017-12-03 08:00 星期日 所属: 其他教程 浏览:690

HBase是一个开源的NoSQL产物,它是实现了Google BigTable论文的一个开源产物,和Hadoop和HDFS一起,可用来存储和处理惩罚海量column family的数据。官方网址是:http://hbase.apache.org
一 、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,官网是:http://thrift.apache.org/ ,它是一个雷同ice的中间件,用于差异系统语言间信息互换。
二、安装Thrift

在Hadoop和Hbase都已经安装好的集群上安装Thrift,Thrift安装在Hmaster呆板上
1. 下载thrift

wget http://mirror.bjtu.edu.cn/apache//thrift/0.8.0/thrift-0.8.0.tar.gz

2. 解压

tar -xzf thrift-0.8.0.tar.gz
3 .编译安装:

假如是源码编译的,首先要利用./boostrap.sh建设文件./configure ,我们这下载的tar包,自带有configure文件了。((可以查阅README文件))
If you are building from the first time out of the source repository, you will
need to generate the configure scripts.  (This is not necessary if you
downloaded a tarball.)  From the top directory, do:
./bootstrap.sh
./configure
make ; make install
4. 启动:

# ./bin/hbase-daemon.sh start thrift [–port=PORT] starting thrift, logging to /home/banping/hbase/hbase-0.90.3/bin/../logs/hbase-root-thrift-localhost.localdomain.out
Thrift默认监听的端口是9090
利用jps查察历程,看到ThriftServer历程:

三、测试:

1 .php剧本库操纵Hbase

PHP通过Thrift会见Hbase的库是在thrift-0.8.0/lib/php/src目次下,其实这个文件夹下也包括通过Thrift会见Hbase的PHP扩展源代码。
复制thrift-0.8.0/lib/php到相应的php web目次。然后利用php剧本测试:

  • <?php  
  •   
  • ini_set(‘display_errors’, E_ALL);  
  • $GLOBALS[‘THRIFT_ROOT’] = ‘./php/src’;  
  •   
  • 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(‘10.64.60.83’, ‘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();  
  •   
  • //获取表列表  
  • $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 = array  
  • foreach ($arr as $k => $v) {  
  • // $k = TCell  
  •     echo ("value = {$v->value} , <br>  ");  
  •     echo ("timestamp = {$v->timestamp}  <br>");  
  • }  
  •   
  • $arr = $client->getRow($tableName, $row_name);  
  • // $client->getRow return a array  
  • foreach ($arr as $k => $TRowResult) {  
  • // $k = 0 ; non-use  
  • // $TRowResult = TRowResult  
  •     var_dump($TRowResult);  
  • }  
  •   
  • $transport->close();  
  • ?>  

    通过欣赏器查察看到项目中的所有表,证明PHP可以通过thrift会见HBase了。

    2. 利用PHP扩展的方法来利用thrift

    我们利用PHP自带的phpize来生成Thtift的php扩展。该扩展的源码布局:

    hadoop@ubuntu:/usr/local/hbase-0.90.4/thrift-0.8.0/lib/php/src
    $ cd ext/thrift_protocol
    $ /usr/local/php/bin/phpize
    $ ./configure –with-php-config=/usr/local/php/bin/php-config –enable-thrift_protocol
    $ make
    $ make install

    1. 然后把生成的thrift_protocol.so文件设置到php.ini并重启apache处事。

    复制代码

  •  

      关键字:

    天才代写-代写联系方式