博文參考:https://www.cnblogs.com/tashanzhishi/p/10917956.html
如果你們學習過Python,可以用Python來對Hbase進行操作。
happybase使用:https://happybase.readthedocs.io/en/latest/user.html#establishing-a-connection
一、Linux下安裝Thrift(一般CDH集群上都會安裝,如未安裝,請參考下面步驟)
0.11.0版本下載地址:http://mirrors.hust.edu.cn/apache/thrift/0.11.0/thrift-0.11.0.tar.gz
執行如下命令安裝Thrift依賴:
yum install automake bison flex g++ git libboost1.55 libevent-dev libssl-dev libtool make pkg-config
tar -zxvf thrift-0.11.0.tar.gz
cd thrift-0.11.0
./configure --with-cpp --with-boost --with-python --without-csharp --with-java --without-erlang --without-perl --with-php --without-php_extension --without-ruby --without-haskell --without-go
make
make install
在Master中Hbase安裝目錄下的bin目錄啟動thrift服務:
./hbase-daemon.sh start thrift
二、安裝 happybase 包
pip install happybase
三、表操作DDL
創建連接:
connection = happybase.Connection('192.168.3.45',port=9090) #鏈接,端口默認是9090 hbase thrift 啟動的默認端口也是9090
列出所有表:
table_name_list = connection.tables() # connection.tables():獲取Hbase實例中的表名列表,返回一個list
獲取表:
table = connection.table(name,user_prefix=True) # connection.table(name,user_prefix=True):獲取一個表對象,返回一個happybase.Table對象:
name:表名
user_prefix:是否使用表前綴,默認為True
禁用表:在做一些刪除操作之前必須先禁用表
connection.disable_table(name) #disable_table(name):禁用表,無返回值
name:表名
啟用表:
connection.enable_table(name) # enable_table(name):啟用表,無返回值
name:表名
創建表:
families = {
"cf":dict(),
"df":dict()
}
connection.create_table(name,families) # 如果連接時,有傳遞表前綴參數時,真實表名將會是:"{}_{}".format(table_prefix,name)
name:表名
families:列族
刪除表:
connection.delete_table(name,disable=False) #delete_table(name,disable=False):刪除表,無返回值 默認是false,若要刪除改為true
name:表名
disable:是否先禁用表
四、數據操作DML
若要對表進行數據插入等操作,需要先獲取表實例。
獲取表實例:
connection = happybase.Connection('192.168.3.45',port=9090)
connection.open()
table = connection.table('cmis:intf_trade_log_tmp')
獲取單元格cells
cells(row, column, versions=None, timestamp=None, include_timestamp=False) # 獲取單元格數據,返回一個list
row:行
column:列
versions:獲取的最大版本數量,默認None,即獲取所有
timestamp:時間戳,默認None,即獲取所有時間戳版本的數據。可指定一個時間戳,獲取小於此時間戳版本的所有數據
include_timestamp:是否返回時間戳,默認False
content = table.cells('00033015017DC6537E4ECEEB3351C183','pk_value:id_no')
print content
["'422202199108263422'"]
刪除指定行數據:
delete(row, columns=None, timestamp=None, wal=True):刪除指定行數據,無返回值
row:行
columns:列,默認為None,即刪除所有列,可傳入一個list或tuple來指定刪除列
timestamp:時間戳,默認為None,即刪除所有,可傳入一個時間戳來刪除小於等於此時間戳的所有數據
wal:是否寫入wal,默認為True
table.delete(row, columns=None, timestamp=None, wal=True)
插入數據:
put(row, data, timestamp=None, wal=True):插入數據,無返回值
row: 行
data: 數據,dict類型,{列:值}構成,列與值皆為str類型
timestamp:時間戳,默認None,即寫入當前時間戳
wal:是否寫入wal,默認為True
# 在row1行,cf:1列插入值1
table.put("row1",{"cf:1":"1"}
獲取一行數據:
row(row, columns=None, timestamp=None, include_timestamp=False):獲取一行數據,返回一個dict
row:行
columns: 列,默認為None,即獲取所有列,可傳入一個list或tuple來指定獲取列
timestamp:時間戳。默認為None,即返回最大的那個時間戳的數據。可傳入一個時間戳來獲取小於此時間戳的最大時間戳的版本數據
include_timestamp:是否返回時間戳數據,默認為False
info = table.row(row, columns=None, timestamp=None, include_timestamp=False)
獲取多行數據:
rows(rows, columns=None, timestamp=None, include_timestamp=False):獲取多行數據,返回一個list
rows:行,可傳入一個list或tuple來指定獲取
columns: 列,默認為None,即獲取所有列,可傳入一個list或tuple來指定獲取列
timestamp:時間戳。默認為None,即返回最大的那個時間戳的數據。可傳入一個時間戳來獲取小於此時間戳的最大時間戳的版本數據
include_timestamp:是否返回時間戳數據,默認為False
info = table.rows(rows, columns=None, timestamp=None, include_timestamp=False)
獲取掃描器:
scan(row_start=None, row_stop=None, row_prefix=None, columns=None, filter=None, timestamp=None, include_timestamp=False, batch_size=1000, scan_batching=None, limit=None, sorted_columns=False, reverse=False):獲取一個掃描器,返回一個generator
row_start:起始行,默認None,即第一行,可傳入行號指定從哪一行開始
row_stop:結束行,默認None,即最后一行,可傳入行號指定到哪一行結束(不獲取此行數據)
row_prefix:行號前綴,默認為None,即不指定前綴掃描,可傳入前綴來掃描符合此前綴的行
columns:列,默認為None,即獲取所有列,可傳入一個list或tuple來指定獲取列
filter:過濾字符串
timestamp:時間戳。默認為None,即返回最大的那個時間戳的數據。可傳入一個時間戳來獲取小於此時間戳的最大時間戳的版本數據
include_timestamp:是否返回時間戳數據,默認為False
batch_size:用於檢索結果的批量大小
scan_batching:服務端掃描批處理
limit:數量
sorted_columns:是否返回排序的列(根據行名稱排序)
reverse:是否執行反向掃描
scanner = table.scan(row_start=None, row_stop=None, row_prefix=None,
columns=None, filter=None, timestamp=None, include_timestamp=False, batch_size=1000, scan_batching=None, limit=None, sorted_columns=False, reverse=False)
《記錄一下》
