首页 > 编程语言 >解决python 操作 hbase报错:TTransportException(type=4,message=’TSocket read 0 bytes’)

解决python 操作 hbase报错:TTransportException(type=4,message=’TSocket read 0 bytes’)

时间:2023-02-26 14:44:41浏览次数:42  
标签:python Hbase Python 报错 客户端 message thrift hbase Thrift

```text
# 解决报错:hbase报错TTransportException(type=4,message=’TSocket read 0 bytes’)
这种情况一般协议问题和服务端没开启,如果服务端是开启的,且正常的.那么考虑协议没有一致.
在解决问题之前,需要了解一下Facebook 的thrift 是什么样的,怎么支持多种语言的.建议去官网了解一下,答主也是对他进行了解,才将这个问题解决的,网上的很多方案未能解决我的问题,尤其针对新版本的hbase.
1.去hbase 集群机器中找到,hbase-thrift.jar ,此处也可以去github 上的hbase开源项目上对应版本拿,但是答主考虑兼容问题,还是从自己的集群拿比较好
2.在hbase-thrift.jar上找到 hbase.thrift 文件,一般是有两个一个是版本是thrift1 一个是thrift2 的,一般推荐使用 2进行操作
3.将hbase.thrift 文件复制到你项目目录下
4.安装Thrift编译器
首先,安装Thrift编译器,以便生成Python客户端代码。您可以从Thrift的官方网站([https://thrift.apache.org/download)下载适用于您的操作系统的编译器。一般最新版本能够向后兼容的
5. 生成Python客户端代码
使用Thrift编译器,您可以生成Python客户端代码。在命令行中,使用以下命令:
shell 命令
`thrift -gen py Hbase.thrift`
windows 命令
下载位置/thrift.exe -gen py Hbase.thrift
在这个命令中,`-gen py`参数指示Thrift编译器生成Python客户端代码,`Hbase.thrift`是包含HBase Thrift API定义的Thrift IDL文件的路径。生成的Python客户端代码将存储在`gen-py`目录中。然后我将hbase 重命名为 hbase.注意上面最后在你想运行的python环境下运行,免得造成python版本问题
6. 使用生成的Python客户端代码
生成的Python客户端代码包含了一个名为`Hbase`的Python模块,其中包含客户端代码,以便使用HBase Thrift服务器的API。在您的Python应用程序中,您可以使用生成的客户端代码,通过HBase Thrift服务器执行对HBase表的操作。以下是案例代码
```
```python
from gen_py.Hbase import Hbase
from thrift.transport import TSocket
from thrift.transport import TTransport
# 此处需要看你集群上的协议配置的是什么呢?TCompactProtocol TBinaryProtocol,不然也会报这个错误
from thrift.protocol import TCompactProtocol

# 创建一个连接到HBase Thrift服务器的socket
socket = TSocket.TSocket('localhost', 9090)
transport = TTransport.TCompactProtocol(socket)

# 创建一个Hbase客户端,此处要看你集群的hbase 配置是什么呢
protocol = TCompactProtocol.TCompactProtocol(transport)
client = Hbase.Client(protocol)

# 打开连接
transport.open()

# 创建一个表
table_name = b'mytable'
column_family = b'cf'
client.createTable(table_name, [Hbase.ColumnDescriptor(name=column_family)])

# 在表中插入一些数据
row_key = b'row1'
mutations = [
Hbase.Mutation(column=column_family+b':col1', value=b'value1'),
Hbase.Mutation(column=column_family+b':col2', value=b'value2')
]
attributes = {
}
scanner_attributes = {
'batch_size': bytes(10)
}
client.mutateRow(table_name, row_key, mutations, attributes)
scanner_id = client.scannerOpen(table_name, b'', [column_family], scanner_attributes)
results = client.scannerGetList(scanner_id, 10)
for result in results:
print(result.row)

# 关闭连接
transport.close()

```
``

最后如果遇到什么问题,可留言

标签:python,Hbase,Python,报错,客户端,message,thrift,hbase,Thrift
From: https://www.cnblogs.com/kxming/p/17156680.html

相关文章

  • PythonGame-2 Cocos2d环境搭建
    1、安装pip3installcocos2d报错Preparingmetadata(setup.py)...errorerror:subprocess-exited-with-error×pythonsetup.pyegg_infodidnotruns......
  • 《复试项目》报错汇总【持续更新】
    我推荐大家的学习路线是,先把我的视频花1~2天的时间刷完,然后再考虑做不做项目,如果时间紧张,把我的代码看懂,然后多准备准备机器学习相关的知识。如果有时间的话,那就二刷我的视......
  • 解决nginx报错:nginx: [emerg] bind() to 0.0.0.0:8088 failed (13: Permission denied
    报错描述:nginx:[emerg]bind()to0.0.0.0:8088failed(13:Permissiondenied)通过ansible远程给主机更换端口并重新启动nginx服务,出现以上报错信息(权限被拒绝)。解......
  • python--matplotlib(3)
    前言 Matplotlib画图工具的官网地址是http://matplotlib.org/Python环境下实现Matlab制图功能的第三方库,需要numpy库的支持,支持用户方便设计出二维、三维数据的图形显示,制......
  • python(8.5)--列表习题
    目录​​一、求输出结果题 ​​​​二、计算列表元素个数 ​​​​三、查找是否存在某元素 ​​​​四、删除某元素 ​​​​五、如何在列表中插入元素​​​​六、如何......
  • python--matplotlib(1)
    目录​​前言 ​​​​正文​​​​1.arange函数​​​​ 2.绘制sin(x)曲线​​​​3.给sin()加标题,控制x,y轴​​​​4.linspace函数​​​​5.使用linspace函数画一个......
  • python--matplotlib(2)
    前言 Matplotlib画图工具的官网地址是http://matplotlib.org/Python环境下实现Matlab制图功能的第三方库,需要numpy库的支持,支持用户方便设计出二维、三维数据的图形显示,制......
  • python--matplotlib(4)
    前言 Matplotlib画图工具的官网地址是http://matplotlib.org/Python环境下实现Matlab制图功能的第三方库,需要numpy库的支持,支持用户方便设计出二维、三维数据的图形显示,制......
  • python--排序总结
    1.快速排序a.原理快速排序的基本思想是在待排序的n个元素中任取一个元素(通常取第一个元素)作为基准,把该元素放人最终位置后,整个数据序列被基准分割成两个子序列,所有小于基......
  • 有没有一个在线工具可以将Python代码转换为Java代码?
    Python和Java是软件开发行业中广泛使用的两种编程语言。两者都有自己的优点和缺点,适用于不同类型的项目。Python以其易用性和可读性而闻名,而Java以其健壮性和性能而闻名。Py......