python操作hbase

HBase

HBase 是一个分布式的、面向列的开源数据库,该技术来源于 Fay Chang 所撰写的Google论文“Bigtable:一个结构化数据的分布式存储系统”。就像Bigtable利用了Google文件系统(File System)所提供的分布式数据存储一样,HBase在Hadoop之上提供了类似于Bigtable的能力。HBase是Apache的Hadoop项目的子项目。HBase不同于一般的关系数据库,它是一个适合于非结构化数据存储的数据库。另一个不同的是HBase基于列的而不是基于行的模式。

访问HBase

1. Native Java API,最常规和高效的访问方式,适合Hadoop MapReduce Job并行批处理HBase表数据
2. HBase Shell,HBase的命令行工具,最简单的接口,适合HBase管理使用
3. Thrift Gateway,利用Thrift序列化技术,支持C++,PHP,Python等多种语言,适合其他异构系统在线访问HBase表数据
4. REST Gateway,支持REST 风格的Http API访问HBase, 解除了语言限制
5. Pig,可以使用Pig Latin流式编程语言来操作HBase中的数据,和Hive类似,本质最终也是编译成MapReduce Job来处理HBase表数据,适合做数据统计

Shell部分命令:

具体的安装部署在这里不做阐述,如有需要,我在后续文章中进行补充。

python操作HBase

主要是通过thrift进行访问,因此需要安装thrift模块,并启动hbase的thrift服务

hbase-daemon.sh start thrift

另外,python提供了一个封装较好的第三方包 - happybase。在这里,本主使用的py版本为3.6+

pip3 install happybase

import依赖包之后即可使用:

连接Conn

#创建
happybase.Connection(host=’localhost’, port=9090, timeout=None, autoconnect=True, table_prefix=None, table_prefix_separator=b’_’, compat=’0.98’, transport=’buffered’, protocol=’binary’):获取连接实例 
# host:主机名
# port:端口
# timeout:超时时间
# autoconnect:连接是否直接打开
# table_prefix:用于构造表名的前缀
# table_prefix_separator:用于table_prefix的分隔符
# compat:兼容模式
# transport:运输模式
# protocol:协议


# 开启
connection.open()

# 关闭
connection.close()

创建表:

connection.create_table(name,families) 

# name:表名
# families:列族(dict类型)
# 如:{'cf1':dict(),'cf2':dict()}

删除表、获取表对象:

# 启用表
connection.disable_table(name)

# 删除表
connection.delete_table(name,disable=False)

# disable:是否禁用表

# 获取表对象
table = connection.table(name,user_prefix=True)

# user_prefix:是否使用表前缀,默认为True

类命令行操作:

content = table.cells(
    'rowkey','cf1:1',5,timestamp=1515061929124,include_timestamp=True
)

# row:行
# column:列
# versions:获取的最大版本数量,默认None,即获取所有
# timestamp:时间戳,默认None,即获取所有时间戳版本的数据。可指定一个时间戳,获取小于此时间戳版本的所有数据
# include_timestamp:是否返回时间戳,默认False

新增:

table.put("row1",{"cf:1":"1"})

# row: 行
# data: 数据,dict类型,{列:值}构成,列与值皆为str类型
# timestamp:时间戳,默认None,即写入当前时间戳
# wal:是否写入wal,默认为True


# 获取某指定行或多行
info = table.row(
    row, columns=None, timestamp=None, include_timestamp=False
)

# row:传入一个list 或 tuple 便可获取多行

扫描查询:

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
)

# 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:是否执行反向扫描

批量操作:

 

 

  • 5
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值