安装Thrift
安装Thrift的具体操作,请点击链接
pip install thrift
安装happybase
pip install happybase
连接(happybase.Connection)
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 = happybase.Connection(host="192.168.0.156",port=9090,timeout=None,autoconnect=True,table_prefix=None,table_prefix_separator=b‘_‘,compat=‘0.98‘, transport=‘buffered‘,protocol=‘binary‘)
使用连接池
Hbase自带有线程安全的连接池,踏允许多个线程共享和重用已经打开的连接。这对于多线程的应用是非常有用的。当一个线程申请一个连接,它将获得一个租赁凭证,在此期间,这个线程单独享有这个连接。当这个线程使用完该连接之后,它将该连接归还给连接池以便其他的线程可以使用
#创建连接,通过参数size来设置连接池中连接的个数
pool = happybase.ConnectionPool(size=3, host=‘10.1.13.111‘, table_prefix=‘myProject‘)#获取连接
with pool.connection() as connection:print connection.tables()
open():打开传输,无返回值
connection.open()
close():关闭传输,无返回值
connection.close()
compact_table(name,major=False):压缩指定表格,无返回值
name:表名
major:是否主要压缩
connection.compact_table(name,major=False)
create_table(name,families):创建表,无返回值
name:表名
families:列族
families ={"cf":dict(),"df":dict()
}
connection.create_table(name,families)#如果连接时,有传递表前缀参数时,真实表名将会是:"{}_{}".format(table_prefix,name)
connection.create_table(‘my_table‘,
{‘cf1‘: dict(max_versions=10),‘cf2‘: dict(max_versions=1, block_cache_enabled=False),‘cf3‘: dict(), #use defaults
}
)
此时,我们再通过connection.tables()查看可以使用的table,结果为[‘my_table‘]
创建的table即my_table包含3个列族:cf1、cf2、cf3
使用table的命名空间
因为一个Hbase会被多个项目共同使用,所以就会导致table的命名冲突,为了解决这个问题,可以在创建table的时候,手动加上项目的名字作为table名字的前缀,例如myproject_xyz。
但是这样做比较麻烦,happybase帮我们做好了工作,我们可以在与Hbase建立连接的时候,通过设置table_prefix参数来实现这个功能
connection = happybase.Connection(‘10.1.13.111‘, table_prefix=‘myproject‘)
此时connection.tables()只会返回包含在该命名空间里的tables,且返回的tables的名字会以简单的形式显示,即不包含前缀。
delete_table(name,disable=False):删除表,无返回值
name:表名
disable:是否先禁用表
connection.delete_table(name,disable=False)
disable_table(nam