Python 使用 Thrift 连接 HBASE 进行操作

2023-11-03

在工作中想要使用Python对HBASE进行操作,主要用来获取数据进行分析,HBASE提供了 Thrift 借口,通过查看API 进行了一些的尝试,下面就是使用Python的相关代码,在使用之前需要启动 HBASE的Thrift和安装python的几个模块,在代码一开始的部分已经注明。

使用的 Python 2.7

API:https://wiki.apache.org/hadoop/Hbase/ThriftApi

# encoding=utf-8

'''
该脚本用于尝试 使用 python 通过 Thrift 连接并操作 HBase 数据库
prepare:
    1. 启动 ThriftServer 于 HBASE
    > hbase-deamn.sh start thrift/thrift2
    > 在此,HBASE提供两种 thrift/thrift2 由于种种原因,语法并不兼容,其中 2 的语法封装更优雅,但部分 DDL 操作
      不完善,而且 thrift API 资料相对多一些,所以先使用thrift 尝试
    2. jps 应该有 ThriftServer 进程
    3.Python 需要安装 thrift 和 hbase 模块,有网络的直接 pip,没有网络的把相同版本的模块代码下载下来用 sys.path.append('PATH') 引用,安装后的代码一般在 $PYTHON_HOME/Lib/site-packages
    > pip install thrift
      pip install hbase-thrift
'''
from thrift import Thrift
from thrift.transport import TSocket, TTransport
from thrift.protocol import TBinaryProtocol
from hbase import Hbase

# server端地址和端口,web是HMaster也就是thriftServer主机名,9090是thriftServer默认端口
transport = TSocket.TSocket('192.168.1.92', 9090)

# 可以设置超时
transport.setTimeout(5000)
# 设置传输方式(TFramedTransport或TBufferedTransport)
trans = TTransport.TBufferedTransport(transport)
# 设置传输协议
protocol = TBinaryProtocol.TBinaryProtocol(trans)
# 确定客户端
client = Hbase.Client(protocol)
# 打开连接
transport.open()

from hbase.ttypes import ColumnDescriptor, Mutation, BatchMutation, TRegionInfo
from hbase.ttypes import IOError, AlreadyExists

tableName = "profilesSys:user_behavior_detail_his"
rowkey = "04FLHWDSwxda9a5c51a81b783915160063052050"

# 获取所有表名

tableNames = client.getTableNames()
print('tableNames:',tableNames)

# 获取列族,返回map
columnDescriptors = client.getColumnDescriptors(tableName)
print("columnName",columnDescriptors)
# 获取该表的所有Regions,包括起止key等信息,返回list
tableRegions = client.getTableRegions(tableName)

# 获取行(tableName,rowKey) return List<TRowResult>

row = client.getRow(tableName,rowkey)
print("row:",row)

# 获取 row 里的某一列
rowColumn = client.get(tableName,rowkey,"bbdi:openId")
print("rowColumn",rowColumn)
# 获取 row 里的多列时间戳最新的,None 则为所有列
rowColumns = client.getRowWithColumns(tableName,rowkey,["bbdi:openId","bbdi:tempLogId"])
print("rowColumns",rowColumns)

# client.mutateRow(tableName[1],"jason",)

# 创建表
try:
    # 创建列族,这里只传了第一个参数 name
    '''
        struct ColumnDescriptor {
          1:Text name,
          2:i32 maxVersions = 3,
          3:string compression = "NONE",
          4:bool inMemory = 0,
          5:string bloomFilterType = "NONE",
          6:i32 bloomFilterVectorSize = 0,
          7:i32 bloomFilterNbHashes = 0,
          8:bool blockCacheEnabled = 0,
          9:i32 timeToLive = -1
        }
    '''
    desc = ColumnDescriptor(name="colNameTest1")
    # 创建表 (tableMame,[列族们])
    client.createTable('our_table1', [desc])

    print client.getTableNames()
except AlreadyExists, tx:
     print "Thrift exception"
     print '%s' % (tx.message)

# 插入行
mutations = [Mutation(column="colNameTest1:Name", value="Jason"),Mutation(column="colNameTest1:age", value="5")]
client.mutateRow("our_table1","rowKey",mutations)

#插入多行
rowMutations = [BatchMutation("rowkey1",mutations),BatchMutation("rowkey2",mutations)]
client.mutateRows("our_table1",rowMutations)

# 删除一行
client.deleteAllRow("our_table1","rowkey2")

# scan
# ScannerID scannerOpen(Text tableName, Text startRow, list<Text> columns)
scanId = client.scannerOpen("our_table1","",["colNameTest1"])
scanRescult =  client.scannerGet(scanId) #从scan中取一条
scanRescult1 = client.scannerGetList(scanId,50) #从scan中取多条,同一个ScanID 上面去过一条,下面就取不到了
print(scanRescult)
print(scanRescult1)
# 关闭该扫描
client.scannerClose(scanId);


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python 使用 Thrift 连接 HBASE 进行操作 的相关文章

随机推荐

  • QT之运行exe文件时缺少xxx.dll文件

    使用QT最大的好处和方便的可能就是他的输出为exe文件 将这个文件直接复制到其他人的电脑上便可以直接运行 十分的便捷 但是我们有时候我们发现我们自己写的QT生成的exe文件没有办法直接在自己的电脑上打开 或者有时候copy别人的项目时 发现
  • java中的几种加密方式

    第一种 DES加解密 import java security Key import java security SecureRandom import javax crypto Cipher import javax crypto Key
  • React-resize窗口监听

    import React useState useEffect useCallback from react 创建自定义函数来写入方法 function UseWillSize const size setSize useState wid
  • [CVPR-21] Scale-aware Automatic Augmentation for Object Detection

    Scale aware Automatic Augmentation for Object Detection code GitHub dvlab research SA AutoAug Scale aware Automatic Augm
  • Qt概述和项目文件介绍

    注意 学习本专栏的内容需要了解C 相关知识 会涉及到C 基础语法和相关特性 可以参考我的另一个专栏 c 从零开始 小梁今天敲代码了吗的博客 CSDN博客 目录 一 什么是Qt 二 Qt的案例 三 项目文件介绍 一 什么是Qt 是一个跨平台的
  • gRPC的介绍、安装与使用

    1 gRPC是什么 在 gRPC里客户端应用可以像调用本地对象一样直接调用另一台不同的机器上服务端应用的方法 使得您能够更容易地创建分布式应用和服务 与许多 RPC系统类似 gRPC也是基于以下理念 定义一个服务 指定其能够被远程调用的方法
  • OpenCV(四)——图像特征与目标检测

    课程一览 目录 1 图像特征的理解 2 形状特征描述 2 1 HOG原理 2 2 Harris 2 3 SIFT
  • android上java.util.ConcurrentModificationException错误解决

    今天在运行Android代码 发现程序崩溃了 发现错误为 java util ConcurrentModificationException 错误栈在list里面 然后 看异常变量 为list本身错误 笔者马上想起来了 list和vecto
  • 计算机网络--IP数据报格式

    解析 1 版本 占4位 指IP协议的版本 通信双方使用的IP协议版本必须一致 目前广泛使用的IP协议版本号为4 即IPv4 2 首部长度 占4位 可表示的最大十进制数值是15 请注意 这个字段所表示数的单位是32位字长 1个32位字长是4字
  • WIN10上UG10.0安装步骤及出错解决

    UG10 0安装步骤及出错解决 准备安装包UG10 0 安装软件 安装java虚拟机 运行launch 安装授权 安装主文件 破解 准备安装包UG10 0 下载链接 提取码 s4dh 安装软件 安装java虚拟机 以管理员身份运行 运行la
  • yaml文件的数据

    com alipay function test base TestData caseName 1 查询店铺详情 queryStoreDetailV2 description normal dataItems loginid 1342708
  • 使用JPA根据实体类生成数据库表

    springboot数据库 一 springboot JPA JPA springboot jpa 数据库的一系列的定义数据持久化的标准的体系 学习的目的是 利用springboot实现对数据库的操作 第一步 添加springboot da
  • 获取JavaScript时间戳函数的方法和js时间戳转时间方法

    文章目录 一 JavasCRIPT时间转时间戳 方法一 Date now 方法三 valueOf 方法四 getTime 方法五 Number 二 js时间戳转时间 方法一 生成 yyyy MM dd 上 下 午hh mm ss 格式 方法
  • java字符串

    java字符串 java字符串 一 String类 一 特点 二 构造方法 String str abc 与 String str2 new String abc 的区别 三 常用方法 intern String类拼接 字符串转数字 字符串
  • linux qt目录查看,QT遍历目录获取文件信息

    QFileInfo获取文件信息 文件名称 路径 大小 创建时间 修改时间 权限等使用路径 UNIX home dipper file1Windows C dipper file1 构造函数 QFileInfo fileInfo path Q
  • 【翻译 + 整理】Qt样式表详解(10):伪状态

    1 active 部件处于活动的状态 2 adjoins item 当QTreeView的 branch与某个item相邻时 将设置此状态 QTreeView branch background red QTreeView branch a
  • 蓝桥杯流转呼吸灯

    include STC15F2K60S2 h include
  • Python直接使用plot()函数画图

    目录 一 plot 函数的认识 二 plot 函数基本运用 三 plot 函数数据可视化画图以及图元基本参数设置 一 plot 函数的认识 在使用Python进行数据可视化编程中matplotlib库是我们用来对数据进行画图常用的第三方库
  • 时间戳转换成字符串,返回Invalid Date(自己遇到的坑)

    今天在开发的过程中 遇到一个比较坑自己的问题 将时间戳转换成正常日期的时候 总是会返回Invalid Date 排查了好久 在想为什么是这个结果 在控制台里面测试都是ok的呀 于是乎 想到了自己再后端定义的时候 时间戳定义的是字符串格式的数
  • Python 使用 Thrift 连接 HBASE 进行操作

    在工作中想要使用Python对HBASE进行操作 主要用来获取数据进行分析 HBASE提供了 Thrift 借口 通过查看API 进行了一些的尝试 下面就是使用Python的相关代码 在使用之前需要启动 HBASE的Thrift和安装pyt