Python使用HappyBase连接Hbase与基本操作
hbase
基本概念可以参考:https://www.cnblogs.com/swordfall/p/8737328.html
文章目录
- 安装Hbase
- Python连接Hbase
- 1.创建、删除表结构
- 2.增改表数据
- 3.查看表数据
- 4.删除表数据
- 完整代码
- 更多参考
安装Hbase
docker安装hbase:
docker pull harisekhon/hbase
docker run -d -h myhbase -p 2181:2181 -p 8080:8080 -p 8085:8085 -p 9090:9090 -p 9095:9095 -p 16000:16000 -p 16010:16010 -p 16201:16201 -p 16301:16301 --name hbase harisekhon/hbase
然后访问本机:http://localhost:16010/master-status,就可以看到基本的运行情况
Python连接Hbase
这里使用HappyBase
连接
HappyBase
文档:https://happybase.readthedocs.io/en/latest/user.html
HappyBase
github页面:https://github.com/python-happybase/happybase
连接Hbase有两种方法:
import happybase# 方法1
connection = happybase.Connection()
connection.close()# 方法2
pool = happybase.ConnectionPool(size=3)
with pool.connection() as connection:pass
1.创建、删除表结构
HappyBase
并不提供方法动态修改hbase的列族,因此当使用HappyBase
定义了一个表的时候,它的列族就已经固定了,只能进入Hbase Shell
进行修改列族的操作
import happybaseconnection = happybase.Connection()
# 创建hbase表if "my_hbase_table" not in connection.tables(): # 在所有的表中connection.create_table('my_hbase_table', # 表名{"col_family_1": dict(), # 定义列族"col_family_2": dict(), # 定义列族})
elif not connection.is_table_enabled("my_hbase_table"): # 查看是否被禁用connection.enable_table("my_hbase_table") # 取消禁用
# connection.delete_table("my_hbase_table", disable=True) # 删除表
connection.close()
2.增改表数据
import happybasepool = happybase.ConnectionPool(size=3)# 获取连接
with pool.connection() as connection:table = connection.table("my_hbase_table")# 新增数据# 格式是:put("行名称",{" '列族:列名':'值' "})table.put("row1", {"col_family_1:col_1": "a", "col_family_2:col_1": "b"})table.put("row2", {"col_family_1:col_1": "1", "col_family_1:col_2": "2", "col_family_2:col_1": "c"})
Table.put()
详细操作可以参考官网文档:https://happybase.readthedocs.io/en/latest/api.html#happybase.Table.put
3.查看表数据
import happybasepool = happybase.ConnectionPool(size=3)# 获取连接
with pool.connection() as connection:table = connection.table("my_hbase_table")# 查询数据# 方法1:one_row = table.row('row1') # 获取row1行数据for value in one_row.keys(): # 遍历当前行的每一列print(value.decode('utf-8'), one_row[value].decode('utf-8')) # 可能有中文,使用encode转码# 方法2:for row_index, col_families in table.scan(): # row_key是行index, col_families是列族for col_key, col_value in col_families.items():col_key_str = col_key.decode('utf-8')col_value_str = col_value.decode('utf-8')print("行:{} 列:{} 值:{}".format(row_index, col_key_str, col_value_str))print("=================")
4.删除表数据
import happybasepool = happybase.ConnectionPool(size=3)# 获取连接
with pool.connection() as connection:table = connection.table("my_hbase_table")# 删除数据table.delete("row1", ["col_family_1:col_1"]) # 删除单个单元格数据table.delete("row2", ["col_family_1"]) # 删除整个列族for row_index, col_families in table.scan(): # row_key是行index, col_families是列族for col_key, col_value in col_families.items():col_key_str = col_key.decode('utf-8')col_value_str = col_value.decode('utf-8')print("行:{} 列:{} 值:{}".format(row_index, col_key_str, col_value_str))
完整代码
import happybaseconnection = happybase.Connection()
# 创建hbase表if "my_hbase_table" not in connection.tables(): # 在所有的表中connection.create_table('my_hbase_table', # 表名{"col_family_1": dict(), # 定义列族"col_family_2": dict(), # 定义列族})
elif not connection.is_table_enabled("my_hbase_table"): # 查看是否被禁用connection.enable_table("my_hbase_table") # 取消禁用
connection.close()
# 开始操作
pool = happybase.ConnectionPool(size=3)# 获取连接
with pool.connection() as connection:table = connection.table("my_hbase_table")# 新增数据# put("行名称",{" '列族:列名':'值' "})table.put("row1", {"col_family_1:col_1": "a", "col_family_2:col_1": "b"})table.put("row2", {"col_family_1:col_1": "1", "col_family_1:col_2": "2", "col_family_2:col_1": "c"})# 查询数据one_row = table.row('row1') # 获取row1行数据for value in one_row.keys(): # 遍历当前行的每一列print(value.decode('utf-8'), one_row[value].decode('utf-8')) # 可能有中文,使用encode转码for row_index, col_families in table.scan(): # row_key是行index, col_families是列族for col_key, col_value in col_families.items():col_key_str = col_key.decode('utf-8')col_value_str = col_value.decode('utf-8')print("行:{} 列:{} 值:{}".format(row_index, col_key_str, col_value_str))print("=================")# 删除table.delete("row1", ["col_family_1:col_1"]) # 删除单个单元格数据table.delete("row2", ["col_family_1"]) # 删除整个列族for row_index, col_families in table.scan(): # row_key是行index, col_families是列族for col_key, col_value in col_families.items():col_key_str = col_key.decode('utf-8')col_value_str = col_value.decode('utf-8')print("行:{} 列:{} 值:{}".format(row_index, col_key_str, col_value_str))
打印结果:
col_family_1:col_1 a
col_family_2:col_1 b
行:b'row1' 列:col_family_1:col_1 值:a
行:b'row1' 列:col_family_2:col_1 值:b
行:b'row2' 列:col_family_1:col_1 值:1
行:b'row2' 列:col_family_1:col_2 值:2
行:b'row2' 列:col_family_2:col_1 值:c
=================
行:b'row1' 列:col_family_2:col_1 值:b
行:b'row2' 列:col_family_2:col_1 值:c
更多参考
HBase简介:http://47.101.37.192/%E8%AF%BE%E4%BB%B6/%E6%8E%A8%E8%8D%90%E7%B3%BB%E7%BB%9F/Hive&HBase/05_hBase%E7%AE%80%E4%BB%8B%E4%B8%8E%E7%8E%AF%E5%A2%83%E9%83%A8%E7%BD%B2.html
Python使用HappyBase连接Hbase与基本操作相关推荐
- 解决python使用happybase连接hbase报错thriftpy2.transport.base.TTransportException....TSocket read 0 bytes
完整报错: thriftpy2.transport.base.TTransportException: TTransportException(type=4, message='TSocket rea ...
- Hbase(5)——python用happybase操作Hbase
首先要在jvm上开启hbase服务 并且在jvm上的9090端口开启thrift服务:hbase thrift start-port:9090 在win上的python环境中装上happybase库: ...
- python基于happybase对hbase增删改查-thrift1
准备工作: $ apt-get install libsasl2-dev # pip install thrift # pip install thrift-sasl # pip install ha ...
- python使用happybase库操作hbase
若想深入理解Hbase的系统架构,推荐:https://www.jianshu.com/p/479bc6308381 happybase官方文档:https://happybase.readthedo ...
- java hbase创建_hadoop组件介绍及python 连接Hbase
Ambari Apache Ambari是一种基于Web的工具,支持Hadoop集群的供应.管理和监控.是Apache顶级开源项目之一,由Hortonworks公司开源. Ø 官方网站地址: http ...
- python链接hbase模块_HBase实战(1):使用Python连接Hbase数据库
来源于 https://blog.csdn.net/duan_zhihua/java/article/details/80622166 使用Python连接Hbase数据库 1,Hbase下载. 下载 ...
- Hadoop集群的基本操作(二:HBase的基本操作)
实验 目的 要求 目的: 1.HBase的基本应用 要求: 完成HBase的高可用完全分布模式的安装: HBase的相关服务进程能够正常的启动: HBase控制台能够正常使用: 表创建.数据查询等数据 ...
- hadoop组件---面向列的开源数据库(九)--python--python使用thrift连接hbase
Python使用thrift操作HBase thrift支持多种语言进行连接使用,但是没找到linux中的cli操作命令行的形式.所以如果服务器有python环境的话,可以使用python进行连接,快 ...
- java连接Hbase数据库
java连接Hbase数据库 如果是是连接机群上的Hbase服务,需要提前将相关的几个xml文件存放在本地的编程目录下,否则开发端无法获取机群信息及授权: hdfs-site.xml core-sit ...
最新文章
- memcached完全剖析系列教程《转》 memcached完全剖析系列教程–2.理解memcached的内存存储...
- boost::type_erasure::is_placeholder相关的测试程序
- practical python and opencv_Practical Python and OpenCV + Case Studies
- 《汇编语言(第三版)》pushf 和 popf 指令,以及标志寄存器在 Debug 中的表示
- excel 26进制 php,记录一次华为招聘的编程题-excel中的26进制
- 自己的路 php,生活感悟的句子:走自己的路,做自己的事
- Redis —— 常用命令一览
- MySQL获取数据库连接对象_利用JDBC连接mysql数据库,获取连接对象的通用格式
- 路由器和交换机的区别,太经典了
- Linux宝库名人轶事栏目 | 我与中国开源软件二十年(二)
- android手机ipad传照片,教你iPhone与安卓跨平台如何传照片
- redis连接异常 redis.clients.jedis.exceptions.JedisClusterException: CLUSTERDOWN The cluster is down
- 官方jdk各个版本下载地址
- 玩游戏电脑IP被封了,怎么修改电脑IP
- 经典策略之一文读懂网格交易
- 【大数据】 大数据计算系统
- 会声会影2022新版本视频图文教程介绍
- 巧学五笔打字-----1小时可学会,不用死背字根 [图片]
- 1000元购物卷买票
- 补 2019.11.11-2019.11.17 arts:
热门文章
- TCPIP协议卷2之io中断
- 微信小程序动态更改标题栏_微信小程序实现动态设置页面标题的方法【附源码下载】...
- python中的列表理解_掌握『Python列表理解』需要知道的9件事,你知道了吗?
- BZOJ 1270 雷涛的小猫 dp
- jquery easyui 多选下拉框的实现
- SQL Server 2012安装配置(Part2 )
- DNSChanger路由器DNS劫持木马 新版本正在攻击家庭及小企业路由器 企图推送广告...
- 扩展jquery scroll事件,支持 scroll start 和 scroll stop
- 简单盘点手游开发引擎
- Instant Complexity--POJ 1472