默認已裝好
- hbase,我的版本是hbase-0.98.24,并運行
- python 2.7.x
步驟:
sudo apt-get install automake bison flex g++ git libboost-all-dev libevent-dev libssl-dev libtool make pkg-config,安裝這些必要的包和庫,官網的是libboost1.55-all-dev,但是我是用的是ubuntu16.04 LTS好像沒這么低的版本,所以使用了libboost-all-dev替代
-
安裝boost_1_60_0.tar.gz,這一步要好長時間
- wget http://sourceforge.net/projects/boost/files/boost/1.60.0/boost_1_60_0.tar.gz
- tar xvf boost_1_60_0.tar.gz
- cd boost_1_60_0
- ./bootstrap.sh
- sudo ./b2 install
-
下載thrift,
- download 地址
- tar thrift-0.10.0.tar.gz
- cd thrift-0.10.0.tar.gz
- ./configure && make
- sudo make install
-
檢驗thrift安裝
root@ubuntu:/home/wasdns/thrift# thrift -version Thrift version 1.0.0-dev
如果出錯參考 http://www.cnblogs.com/qq952693358/p/6193842.html
一般我們在Linux下執行某些外部程序的時候可能會提示找不到共享庫的錯誤, 比如:
tmux: error while loading shared libraries: libevent-1.4.so.2: cannot open shared object file: No such file or directory原因一般有兩個, 一個是操作系統里確實沒有包含該共享庫(lib.so.文件)或者共享庫版本不對, 遇到這種情況那就去網上下載并安裝上即可.
另外一個原因就是已經安裝了該共享庫, 但執行需要調用該共享庫的程序的時候, 程序按照默認共享庫路徑找不到該共享庫文件.
root@ubuntu:/home/wasdns/thrift# cat /etc/ld.so.conf include /etc/ld.so.conf.d/*.conf root@ubuntu:/home/wasdns/thrift# echo "/usr/local/lib" >> /etc/ld.so.conf root@ubuntu:/home/wasdns/thrift# cat /etc/ld.so.conf include /etc/ld.so.conf.d/*.conf /usr/local/lib root@ubuntu:/home/wasdns/thrift# ldconfig root@ubuntu:/home/wasdns/thrift# thrift -version Thrift version 1.0.0-dev
-
安裝完成后到hbase的目錄下,找到Hbase.thrift,該文件一般在hbase目錄下的src/main/resources/org/apache/hadoop/hbase/thrift。如果沒有,那么下載響應的源碼安裝包,把其中的hbase-thrift目錄下的src復制到hbase目錄下。
thrift --gen python hbase.thrift 會生成gen-py文件夾,將其修改成hbase,這個是thrift生成的python庫。
sudo pip install thrift 安裝python的thrift庫
bin/hbase-daemon.sh start thrift 啟動hbase的thrift服務,默認端口是9090
-
創建hbase表,把上面的python庫放在同級目錄
from thrift import Thrift from thrift.transport import TSocket from thrift.transport import TTransport from thrift.protocol import TBinaryProtocol from hbase import Hbase from hbase.ttypes import * transport = TSocket.TSocket('localhost', 9090); transport = TTransport.TBufferedTransport(transport) protocol = TBinaryProtocol.TBinaryProtocol(transport); client = Hbase.Client(protocol) transport.open() contents = ColumnDescriptor(name='cf:', maxVersions=1) client.createTable('test', [contents]) print client.getTableNames()
執行代碼,成功后,進入hbase的shell,用命令list可以看到剛剛的test表已經創建成功。