使用perl通過thrift連線hbase讀取資料
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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- python通過thrift操作hbase例項Python
- 通過讀取properties檔案動態生成對資料庫的連線資料庫
- spark讀取hbase的資料Spark
- 使用Java通過POI讀取EXCEL中的資料JavaExcel
- root 使用者通過 sqlplus 連線資料庫SQL資料庫
- Java讀取properties檔案連線資料庫Java資料庫
- 1.3.3. 通過SQL*Plus 連線資料庫SQL資料庫
- 通過cmd命令列連線mysql資料庫命令列MySql資料庫
- Qt中通過ODBC連線MSSQL資料庫QTSQL資料庫
- perl 讀mysql 資料 。MySql
- 【easyUI】datagrid 通過formatter讀取巢狀資料UIORM巢狀
- java通過相對路徑讀取properties資料Java
- 通過Java程式測試資料庫連線資訊Java資料庫
- 通過連線檢視資料庫相關資訊資料庫
- Java的JDBC通過SSH Tunnel連線MySQL資料庫JavaJDBCMySql資料庫
- 通過觸發器記錄資料庫連線資訊觸發器資料庫
- mysql--通過cmd連線mysql,並建立資料庫MySql資料庫
- Linux使用perl透過unixODBC連線SQLServer2000(轉)LinuxSQLServer
- 用 Phoenix 通過 SQL 語句更新操作 HBase 資料SQL
- 使用 Excel 讀取 SAP ABAP CDS View 通過 ODBC 暴露出來的資料ExcelView
- mysql 通過IP連線MySql
- .NET 5/.NET Core使用EF Core 5連線MySQL資料庫寫入/讀取資料示例教程MySql資料庫
- Hbase單機部署 java連線HbaseJava
- 通過命令列連線oracle資料庫/進入sql plus命令列Oracle資料庫SQL
- Oracle 11g RAC通過SCAN IP連線資料庫 - JDBC連線串問題Oracle資料庫JDBC
- jdbc獲取資料庫連線JDBC資料庫
- pandas的基礎使用,資料庫連線,檔案讀取,切片的使用等基本操作----01資料庫
- java連線Oracle資料庫獲取資料JavaOracle資料庫
- perl連線Oracle錯誤Oracle
- Perl 連線 SQL Server (轉)SQLServer
- Django 直接使用資料庫連線和遊標讀寫資料庫Django資料庫
- HBase資料的讀寫流程
- Laravel 通過 ODBC 連線 VerticaLaravel
- 通過跳板機連線MySQLMySql
- 1.6.5.2. 通過密碼檔案驗證連線資料庫密碼資料庫
- kettle通過命令列引數傳遞資料庫連線資訊命令列資料庫
- 通過連線的方式把資料檔案放在別的地方
- HBase的安裝配置和使用Java連線Java