博文参考: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)

《记录一下》

python 操作Hbase 详解的更多相关文章

  1. python 操作zookeeper详解

    ZooKeeper 简介 ZooKeeper 是一个分布式的.开放源码的分布式应用程序协调服务,是 Google 的 Chubby 一个开源的实现,是 Hadoop 和 Hbase 的重要组件.它是一 ...

  2. python 操作RabbitMq详解

    一.简介: RabbitMq 是实现了高级消息队列协议(AMQP)的开源消息代理中间件.消息队列是一种应用程序对应用程序的通行方式,应用程序通过写消息,将消息传递于队列,由另一应用程序读取 完成通信. ...

  3. python操作redis详解

    https://www.cnblogs.com/koka24/p/5841826.html

  4. Python编程之列表操作实例详解【创建、使用、更新、删除】

    Python编程之列表操作实例详解[创建.使用.更新.删除] 这篇文章主要介绍了Python编程之列表操作,结合实例形式分析了Python列表的创建.使用.更新.删除等实现方法与相关操作技巧,需要的朋 ...

  5. Python字符串切片操作知识详解

    Python字符串切片操作知识详解 这篇文章主要介绍了Python中字符串切片操作 的相关资料,需要的朋友可以参考下 一:取字符串中第几个字符 print "Hello"[0] 表 ...

  6. 图解大数据 | 海量数据库查询-Hive与HBase详解

    作者:韩信子@ShowMeAI 教程地址:http://www.showmeai.tech/tutorials/84 本文地址:http://www.showmeai.tech/article-det ...

  7. Python 字符串方法详解

    Python 字符串方法详解 本文最初发表于赖勇浩(恋花蝶)的博客(http://blog.csdn.net/lanphaday),如蒙转载,敬请保留全文完整,切勿去除本声明和作者信息.        ...

  8. Python中dict详解

    from:http://www.cnblogs.com/yangyongzhi/archive/2012/09/17/2688326.html Python中dict详解 python3.0以上,pr ...

  9. 【python进阶】详解元类及其应用2

    前言 在上一篇文章[python进阶]详解元类及其应用1中,我们提到了关于元类的一些前置知识,介绍了类对象,动态创建类,使用type创建类,这一节我们将继续接着上文来讲~~~ 5.使⽤type创建带有 ...

随机推荐

  1. 细说可空类型 nullable PropertyType

    可空类型是System.Nullable结构体的实列.一个可空类型代表了相应值类型的正确范围附加null值.这么说来,其实也不是很明子,命题嘛,一般不求易懂,但求准确. 那我就来说说这可空类型吧,上次 ...

  2. LVS负载均衡在Ubuntu环境下部署详解

    一.本地环境介绍: 负载均衡的三台机器均为Ubuntu Server 14.04 64位系统,内核中已集成ipvs模块( modprobe -l | grep ipvs 查看 ).为演示LVS负载均衡 ...

  3. (1)、JEasyUI 之 Datagrid的Combobox 显示 textField 值的问题

    (1).JEasyUI 之datagrid的Combobox显示textField值的问题 官方的datagrid Demo Row Editing in DataGrid 中field 是否如下定义 ...

  4. Homebrew介绍和使用

    一.Homebrew是什么 Homebrew是一款Mac OS平台下的软件包管理工具,拥有安装.卸载.更新.查看.搜索等很多实用的功能.简单的一条指令,就可以实现包管理,而不用你关心各种依赖和文件路径 ...

  5. 有四个数字能组成多少个互不相同的三位数 --Python

    有四个数字能组成多少个互不相同的三位数? num = 0 for i in range(1, 5): for j in range(1, 5): for k in range(1, 5): if i ...

  6. Fiddler之打断点

    1..Fiddler可以修改以下请求 --Fiddler设置断点,可以修改HTTP请求头信息,如修改Cookie,User-Agent等 --可以修改请求数据,突破表单限制,提交任意数字,如充值最小1 ...

  7. K8S从入门到放弃系列-(1)环境初始化

    一.系统规划  主机名 IP   组件  k8s-master01 10.10.0.18 etcd.kube-apiserver.kube-controller-manager.kube-schedu ...

  8. Word 分栏页码,一个页面两个不同页码的设置

    1. 前言 在一些报纸.杂志中,我们可以见到各种各样的排版风格效果,其中有一种效果是一个页面设置了两栏,并且每栏下面都有不同的页码,那么,这种效果是如何实现的呢?这种页码在Word中默认页码样式中是没 ...

  9. 剑指offer15:反转链表后,输出新链表的表头。

    1 题目描述 输入一个链表,反转链表后,输出新链表的表头. 2 思路和方法 (1)利用栈作为中间存储,进行链表的反转,将压入的数据按先进后出的顺序弹出依次赋给链表再输出表头pHead. (2)将当前节 ...

  10. python学习-26 函数作用域

    举例说明: 1. name = 'john' def foo(): name = 'xiaomming' def bar(): print(name) return bar a=foo() print ...