您的位置:首页 > 编程语言 > PHP开发

php通过thrift操作hbase

2014-06-25 20:43 519 查看
环境配置

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

view
source

print?

01.
<?php


02.
$GLOBALS
[
'THRIFT_ROOT'
]
=
'/home/www/html/hbasethrift/libs'
;


03.
require_once
(
$GLOBALS
[
'THRIFT_ROOT'
].
'/Thrift.php'
);


04.
require_once
(
$GLOBALS
[
'THRIFT_ROOT'
].
'/transport/TSocket.php'
);


05.
require_once
(
$GLOBALS
[
'THRIFT_ROOT'
].
'/transport/TBufferedTransport.php'
);


06.
require_once
(
$GLOBALS
[
'THRIFT_ROOT'
].
'/protocol/TBinaryProtocol.php'
);


07.
require_once
(
$GLOBALS
[
'THRIFT_ROOT'
].
'/packages/Hbase/Hbase.php'
);


08.
$socket
=
new
TSocket(
'localhost'
,
9090 );


09.
$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.
$client
->mutateRow(
$t
,
$row
,
$mutations
);


61.
$table_name
=
"table1"
;


62.
$row_name
=
'row_name'
;


63.
$fam_col_name
=
'entry:foo'
;


64.
$arr
=
$client
->get(
$table_name
,
$row_name
,
$fam_col_name
);


65.
//
$arr =array


66.
foreach
(
$arr
as
$k
=>
$v
)
{


67.
//
$k =TCell


68.
echo
(
"value
={$v->value} ,<br> "
);


69.
echo
(
"timestamp
={$v->timestamp} <br>"
);


70.
}


71.
$table_name
=
"table1"
;


72.
$row_name
=
"row_name"
;


73.
$arr
=
$client
->getRow(
$table_name
,
$row_name
);


74.
//
$client->getRow return a array


75.
foreach
(
$arr
as
$k
=>
$TRowResult
)
{


76.
//
$k =0 ; non-use


77.
//
$TRowResult =TRowResult


78.
var_dump(
$TRowResult
);


79.
}


80.
$transport
->close();


81.
?>


通过浏览器访问http://www.it165.net/hbasethrift/hbasethrift.php,如果显示hbase中的表名与新建表table1 ,说明连接成功。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: