PHPはThrift操作でHbase
5836 ワード
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拡張ソースコードも含まれています.
1)thrift-0.8.0/lib/phpを対応するphp webディレクトリにコピーします.
2)phpとhbaseインタフェースファイルを生成する
#/usr/local/thrift/bin/thrift --gen php/usr/local/hbase/src/main/resources/org/apache/hadoop/hbase/thrift/Hbase.thrift
#(自分のディレクトリ設定による)
ディレクトリファイルの生成:/usr/local/hbase/gen-php/Hbase
ファイルあり:Hbase.php,Hbase_types.php
...php,Hbase_types.php copyから:webディレクトリ/php/src/packages/Hbase/
3)phpスクリプトを使用してテスト:
ブラウザでプロジェクトのすべてのテーブルを表示し、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
一、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拡張ソースコードも含まれています.
1)thrift-0.8.0/lib/phpを対応するphp webディレクトリにコピーします.
2)phpとhbaseインタフェースファイルを生成する
#/usr/local/thrift/bin/thrift --gen php/usr/local/hbase/src/main/resources/org/apache/hadoop/hbase/thrift/Hbase.thrift
#(自分のディレクトリ設定による)
ディレクトリファイルの生成:/usr/local/hbase/gen-php/Hbase
ファイルあり:Hbase.php,Hbase_types.php
...php,Hbase_types.php copyから:webディレクトリ/php/src/packages/Hbase/
3)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}
" );
}
// 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}
" );
}
//
$descriptors = $client->getColumnDescriptors($tableName);
asort($descriptors);
foreach ($descriptors as $col) {
echo( " column: {$col->name}, maxVer: {$col->maxVersions}
" );
}
//
$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
thrift_protocol.so php.ini apache 。