HBase的Python API(happybase)操作

一、Windows下安装Python库:happybase

pip install happybase -i https://pypi.tuna.tsinghua.edu.cn/simple

二、 开启HBase的Thrift服务

想要使用Python API连接HBase,需要开启HBase的Thrift服务。所以,在Linux服务器上,执行如下命令,开启HBase的Thrfit服务。

# 安装Thrift服务所需要的一系列依赖软件
yum install automake libtool flex bison pkgconfig gcc-c++ boost-devel libevent-devel zlib-devel python-devel ruby-devel openssl-devel
# 进入hbase安装目录下的bin目录
cd /usr/local/hbase-2.5.6/bin
#启动Thrift
hbase-daemon.sh start thrift
#jps查看进程
jps

至此启动Thrift服务并安装了HappyBase库后,即可用python代码连接HBase了。

注意:HBase Thrift的端口默认在9090 。 

三、使用python连接HBase

(1)在pycharm新建一个pythonProject项目。

(2)在pythonProject项目下新建一个python文件,编写连接Hbase的python代码。

#1.导入happybase库
import happybase
#2.建立HBase的连接
conn = happybase.Connection(
    host="192.168.25.200",   #主机名
    port=9090,      #Thrift的默认端口号
    timeout=60000   #超时时间
)
#3.通过conn对象,调用tables方法,获取hbase中的表格
print(conn.tables())
#4.关闭连接
conn.close()

注意:如果运行结果报错显示无法连接到虚拟机节点,则需要检查你的虚拟机是否已经关闭防火墙,如果防火墙为开启状态,需要关闭防火墙:systemctl stop firewalld.service 。

四、任务需求分析及HBase表格设计

(1)需求说明

某某自来水公司,需要存储大量的缴费明细数据。以下截取了缴费明细的一部分内容:

我们有如上数据集,需要将其导入到HBase中即可,具体数据集文件存放在百度网盘:

链接:https://pan.baidu.com/s/14n-2XoXyxZL7hN80cNTJMw 
提取码:qavu

(2)HBase表格设计

表名:WATER_BILL
行键(RowKey)列族:user列族:order
列限定符单元格值列限定符单元格值
4944191name登卫红pay_time2020-5-10
4944191addr贵州省铜仁市德江县7单元267室current_count308.1
4944191sexlast_count283.1
4944191usage25
4944191total_money150
4944191check_date2020-4-25
4944191latest_pay_date2020-6-9
................

 五、使用Python API创建HBase表格

'''
水表业务:
Hbase表格的创建
'''
#导入happybase库
import happybase
#构建Hbase的连接
conn = happybase.Connection(
    host = "192.168.25.200",  #主机IP
    port = 9090
)
#设置水费表格的名称为WATER_BILL(注意:在HBase API代码中,数据都是以Bytes字节数组的形式操作)
table_name = b"WATER_BILL"
#创建表格WATER_BILL(先检查表格是否存在,不存在则创建)
#通过conn连接对象的tables()可以获取全部的表格
tbs = conn.tables()
#if判断table_name是否在tbs中
if table_name in tbs:
    print(f"{table_name}已存在,无需创建")
else:
    print(f"{table_name}不存在,请创建它。")
    conn.create_table(
        table_name.decode(),     #将字节字符串转为普通字符串
        {
            'user':dict(max_versions = 5),  #列族信息
            'order':dict()                 #列族信息
        }
    )
#打印当前的表格信息
print(f"当前的表格:{conn.tables()}")
#关闭连接
conn.close()

六、使用Python API插入数据

#导入happybase库
import happybase
#构建Hbase的连接
conn = happybase.Connection(
    host = "192.168.25.200",  #主机IP
    port = 9090
)
#往"WATER_BILL"表格内插入数据(读取文件的每行数据)
water_table = conn.table("WATER_BILL")
for line in open("WATER_BILL.TSV",encoding="UTF-8"):
    line = line.replace("\n","")
    # print(line)
    arrs = line.split('\t')
    # print(arrs)
    rowkey = arrs[0].encode()#行键
    data = {
        b'user:name':arrs[1].encode(),
        b'user:addr': arrs[2].encode(),
        b'user:sex': arrs[3].encode(),
        b'order:pay_time': arrs[4].encode(),
        b'order:current_count': arrs[5].encode(),
        b'order:last_count': arrs[6].encode(),
        b'order:usage': arrs[7].encode(),
        b'order:total_money': arrs[8].encode(),
        b'order:check_date': arrs[9].encode(),
        b'order:latest_pay_time': arrs[10].encode(),
    }
    water_table.put(rowkey,data)

七、使用Python API查询数据

#1.导入happybase库
import happybase
#2.建立HBase的连接
conn = happybase.Connection(
    host="192.168.25.200",   #主机名
    port=9090,      #Thrift的默认端口号
    timeout=60000   #超时时间
)
#3.通过conn对象,调用table方法,获取WATER_BILL表格
water_table = conn.table('WATER_BILL')
#查询数据
row = water_table.row(b'9054826')
# print(row)
# print(type(row))
for key in row.keys():
    print(f"列族:列限定符:{key.decode()},value:{row[key].decode()}")
#4.关闭连接
conn.close()

八、使用Python API删除数据

#导入happybase库
import happybase
#构建Hbase的连接
conn = happybase.Connection(
    host = "192.168.25.200",  #主机IP
    port = 9090
)
#获取表格对象
water_table = conn.table('WATER_BILL')
#删除表格的指定子列数据
water_table.delete(b'9054826',columns=[b'user:sex',b'order:usage'])
#删除表格的某一行数据(一个rowkey)
water_table.delete(b'9054826')

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/495284.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

PCL 彩色点云RGB转灰度并显示

目录 一、算法原理1、原理概述2、参考文献二、代码实现三、结果展示本文由CSDN点云侠原创,原文链接。如果你不是在点云侠的博客中看到该文章,那么此处便是不要脸的爬虫与GPT。 一、算法原理 1、原理概述 不同要素之间的灰度差异较为明显。点云灰度值与RGB属性的关系为:

Mysql数据库:高级SQL语言详解

目录 前言 一、按关键字排序查询 1、单字段排序 1.1 按某一字段升序排序 1.2 按某一字段降序排序 1.3 结合where进行条件进行排序 2、多字段排序 2.1 按多字段升序排序 2.2 按多字段降序排序 2.3 案例操作 3、区间判断及查询不重复记录 3.1 区间判断 3.1.1 AND/OR…

【数据结构】链表习题之反转链表和删除链表中等于给定值 val 的所有节点

👑个人主页:啊Q闻 🎇收录专栏:《数据结构》 🎉道阻且长,行则将至 前言 今天的博客是关于链表的题目,力扣上的题目之反转链表和删除链表中等于给定值 val 的所有节点 一.反转…

PMP考试难不难,通过率怎样?

PMP考试自从新考纲调整后有几次考试难度是非常高的,那段时间我也看网上好多机构通过率都不咋地,当时也是因为官方的出题难度稍高,还组织了免费的重考,也是后来逐渐开始归于平常了吧,直到现在都是我认为比较简单的选择题…

Go通道机制与应用详解

目录 一、概述二、Go通道基础通道(Channel)简介创建和初始化通道通道与协程(Goroutine)的关联nil通道的特性 三、通道类型与操作通道类型1. 无缓冲通道 (Unbuffered Channels)2. 有缓冲通道 (Buffered Channels) 通道操作1. 发送操…

杂货铺 | 使用 Github Pages 和 Hexo 搭建自己的独立博客

文章目录 📚Step1:安装Node.js和Git📚Step2:安装并初始化配置Hexo📚Step3:本地查看效果📚Step4:将博客部署到Github Pages上🐇创建项目代码库🐇配置SSH密钥&a…

VUE 支持 超大上G,多附件上传

代码:https://gitee.com/xproer/up6-vue-cli 1.引入up6组件 2.配置接口地址 接口地址分别对应:文件初始化,文件数据上传,文件进度,文件上传完毕,文件删除,文件夹初始化,文件夹删除&…

应急 | BuleHero挖矿蠕虫最新变种分析

背 景 挖矿蠕虫病毒BuleHero擅长利用各类漏洞攻击、弱密码爆破攻击。病毒作者不断更新变种,是近期最活跃的挖矿蠕虫病毒之一。攻击者最新的BuleHero挖矿蠕虫实现入侵后,还会释放挖矿程序,使服务器的资源被消耗挖矿,极大影响正常业…

【蓝桥杯】蓝桥杯算法复习(三)

😀大家好,我是白晨,一个不是很能熬夜😫,但是也想日更的人✈。如果喜欢这篇文章,点个赞👍,关注一下👀白晨吧!你的支持就是我最大的动力!&#x1f4…

Elasticsearch:虚拟形象辅助和对话驱动的语音到 RAG 搜索

作者:来自 Elastic Sunile Manjee 搜索的演变 搜索已经从产生简单结果的简单文本查询发展成为容纳文本、图像、视频和问题等各种格式的复杂系统。 如今的搜索结果通过生成式人工智能、机器学习和交互式聊天功能得到增强,提供更丰富、更动态且与上下文相…

Linux 注入依赖环境

文章目录 配置依赖程序安装 JDK安装 Tomcat安装 mysql 配置依赖程序 下面配置依赖程序都以CentOS为例。 安装 JDK 可以直接使用 yum(CentOS) 直接进行安装。 先搜索,确定软件包的完整名称。 yum list | grep jdk再进行安装 进行安装的时候一定要先确保处在“管理…

循环神经网络之语言模型和数据集

总结重要知识点 在给定这样的文本序列时,语言模型(language model)的目标是估计序列的联合概率 语言模型是自然语言处理的关键。 元语法通过截断相关性,为处理长序列提供了一种实用的模型。 长序列存在一个问题:它们…

JS new Array.fill(new Array()) 创建二维数组 fill方法的坑

我们通常会通过如下方式来创建一个二维数据: const arr new Array(5).fill(new Array(2).fill(0))我们如果想要修改其中一个元素的值 arr[0][0] 1输出:   我们只想给arr[0][0]赋值,但是每一行数组为0的下标元素的值全部改变了&#xf…

循序渐进丨MogDB 对 Oracle DBLink兼容性增强

本特性自 MogDB 5.0.0版本开始引入,支持 Oracle DBLink语法,可以使用符号访问 Oracle 数据库中的表。 示 例 01 环境准备 MogDB 环境 已安装 MogDB 数据库。已安装oracle_fdw插件,具体安装方法参见oracle_fdw安装文档https://docs.mogdb.io/…

[Linux_IMX6ULL驱动开发]-基础驱动

驱动的含义 如何理解嵌入式的驱动呢,我个人认为,驱动就是嵌入式上层应用操控底层硬件的桥梁。因为上层应用是在用户态,是无法直接操控底层的硬件的。我们需要利用系统调用(open、read、write等),进入内核态…

好看又好用,这 10 个宝藏 App 免费拿走不谢!

目录 1. 综合AI工具箱——HuluAI 2. 文本视频生成工具——Jujilu 3.翻译软件 —— TTime 4.专业录屏和直播软件 —— OBS Studio 5.开源跨平台轻量计时软件 —— wnr 6.开源跨平台绘图 —— Drawio 7.开源三维建模动画渲染 —— Blender 8.跨平台的多功能软件 —— Pear…

小满CRM怎么样,多少外贸公司在用?

我们在20年用过小满CRM,产品很明显是围绕着外贸业务场景设计的,功能很多,但价格相对来说也算贵的了,看了其他用户的使用感受发现小满的数据安全和服务器方面可能也有点问题。 我们最后选择了零代码平台自主搭建了一个CRM系统&…

4.Python数据分析—数据分析入门知识图谱索引(知识体系下篇)

4.Python数据分析—数据分析入门知识图谱&索引-知识体系下篇 一个人简介二机器学习基础2.1 监督学习与无监督学习2.1.1 监督学习:2.1.2 无监督学习: 2.2 特征工程2.3 常用机器学习算法概述2.3.1 监督学习算法:2.3.2 无监督学习算法&#…

拿下阿里面试:揭秘JVM对象引用的奥秘!

如有疑问或者更多的技术分享,欢迎关注我的微信公众号“知其然亦知其所以然”! 大家好,我是小米!今天我要和大家一起探讨的是JVM中的对象引用,这也是阿里巴巴面试中经常被问到的热门话题哦!在Java开发中,我们经常需要管理对象的引用,了解不同类型的引用对于优化内存、避…

【一】TensorFlow神经网络模型构建之神经元函数及优化方法

TensorFlow神经网络模型构建主要涉及如下几块:神经元函数、卷积函数、池化函数、分类函数、优化方法。下面分别对这几块进行展开说明: 神经元函数及优化方法 神经网络之所以能解决非线性问题(如语音、图像识别等),本…