Thrift是一种跨语言的服务部署框架,通过一种中间语言定义RPC接口,然后通过编译器生成不同语言的代码,能够支持常见的开发语言,包括c#,java,python,php,ruby等等。本文尝试使用perl语言,通过thrift连接Hbase。
下载thrift,可至任意apache镜像站下载:http://mirror.bit.edu.cn/apache/thrift/
# wget http://mirror.bit.edu.cn/apache/thrift/0.8.0/thrift-0.8.0.tar.gz
# tar xvfz thrift-0.8.0.tar.gz
# cd thrift-0.8.0执行编译命令如下:
# ./configure --prefix=/usr/local/thrift/ --with-cshare=no --with-java=no --with-erlang=no --with-python=no --with-php=no --with-php_extension=no --with-ruby=no --with-haskell=no --with-go=no --with-perl=yes
# make
# make install在我的个人环境中,安装时出现一些错误,经过检查主要是缺少依赖包,安装好相关依赖包后,编译安装过程就能够顺利进行下去。
主要出现的错误如下:
1、没有编译perl的链接库
尽管我们在编译时强制指定编译perl的链接库,但实际编译时仍然没有编译perl的链接库,输出信息如下:
Building code generators ..... :
Building C++ Library ......... : no
Building C (GLib) Library .... : no
Building Java Library ........ : no
Building C# Library .......... : no
Building Python Library ...... : no
Building Ruby Library ........ : no
Building Haskell Library ..... : no
Building Perl Library ........ : yes
Building PHP Library ......... : no
Building Erlang Library ...... : no
Building Go Library .......... : no您说其它语言的没有也就算了,因为我们明确地禁用了,但perl为什么没有呢,经过检查configure的输出日志,发现与在perl有关的部分提示:
checking for perl... /usr/bin/perl
checking for perl module Bit::Vector... no一看就知道,这是缺少模块,执行下列命令安装Bit::Vector模块:
- # perl -MCPAN -e ¨install Bit::Vector¨
2、提示缺少yacc命令
编译时抛出错误信息如下:
/bin/sh ../../ylwrap `test -f ¨src/thrifty.yy¨ || echo ¨./¨`src/thrifty.yy y.tab.c thrifty.cc y.tab.h thrifty.h y.output thrifty.output -- yacc -d
../../ylwrap: line 109: yacc: command not found直接通过yum命令安装byacc,然后就有yacc命令了:
- # yum install byacc
3、提示缺少flex命令
/bin/sh ../../ylwrap `test -f ¨src/thriftl.ll¨ || echo ¨./¨`src/thriftl.ll .c thriftl.cc -- /bin/sh /data/software/thrift-0.8.0/missing --run flex
/data/software/thrift-0.8.0/missing: line 52: flex: command not found通过yum命令安装flex相关包:
- # yum install flex
4、提示缺少perl模块
- Warning: prerequisite Class::Accessor 0 not found.
执行下列命令进行安装:
- # perl -MCPAN -e ¨install Class::Accessor¨
出现上类错误,安装软件包后如果编译仍然出错,那么就删除MakeFile和config.log文件,而后重新执行./configure命令编译安装。
安装完成后,下面配置perl语言连接hbase。
首先要生成perl的映射,这段要在装有HBase的环境上操作:
# cp /data/software/thrift-0.8.0/lib/perl/lib/* ~/perl-src/ -r
# /usr/local/thrift/bin/thrift --gen perl /usr/local/hbase-0.90.5/src/main/resources/org/apache/hadoop/hbase/thrift/Hbase.thrift而后将生成的gen-perl目录中的Hbase目录,复制到具有perl环境的服务器适当路径下:
# mkdir perl-src/packages -p
# cp -a gen-perl/Hbase perl-src/packagesHbase文件中的*.pm就是我们要用到的连接模板。
下面创建一段perl脚本,通过thrift连接HBase,输出当前所有表名:
- # vi t_thrift.pl
增加下列内容:
#!/bin/env perl
use strict;
use warnings;
use lib ¨./perl-src¨;
use lib ¨./perl-src/packages¨;
use Data::Dumper;
use Thrift;
use Thrift::BinaryProtocol;
use Thrift::Socket;
use Thrift::BufferedTransport;
use Hbase::Hbase;
my $host = ¨192.168.30.203¨;
my $port = ¨9090¨;
my $socket = new Thrift::Socket($host,$port);
my $transport = new Thrift::BufferedTransport($socket,1024,1024);
my $protocol = new Thrift::BinaryProtocol($transport);
my $client = new Hbase::HbaseClient($protocol);
eval { $transport->open () };
my $tables = $client->getTableNames();
foreach my $table (sort @{$tables})
{
print " found {$table}\n";
}启动HBase thrift服务:
- $ /usr/local/hbase-0.90.5/bin/hbase-daemon.sh start thrift
执行t_thrift.pl脚本:
# perl t_thrift.pl
found {rlog}
found {t}
found {t1}
found {t2}
found {t3}检查一下输出的结果是您连接的HBase中创建的表对象吗:
$ hbase shell
HBase Shell; enter ¨help¨ for list of supported commands.
Type "exit" to leave the HBase Shell
Version 0.90.5, r1212209, Fri Dec 9 05:40:36 UTC 2011
hbase(main):001:0> list
TABLE
rlog
t
t1
t2
t3
5 row(s) in 0.6890 seconds如果没有报错,那么就可以在此基础之上进行扩展,实现通过perl连接HBase并执行各种操作了。
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/7607759/viewspace-761360/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/7607759/viewspace-761360/