python2 hbase集群-python 操作Hbase 详解

博文参考:https://www.cnblogs.com/tashanzhishi/p/10917956.html

如果你们学习过Python,可以用Python来对Hbase进行操作。

一、Linux下安装Thrift(一般CDH集群上都会安装,如未安装,请参考下面步骤)

执行如下命令安装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)

《记录一下》

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值