解决python 操作 hbase报错:TTransportException(type=4,message=’TSocket read 0 bytes’)
```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报错:TTransportException(type=4,message=’TSocket read 0 bytes’)的更多相关文章
- 解决python编码问题报错:'ascii' codec can't encode characters in position 0-15: ordinal not in range(128)
这个问题很奇怪,在服务器上执行一个写数据库的python文件,正常执行,但是使用java的ssh进行调用脚本,发现就是不执行数据库的写入,然后使用了try except的方式,打印了错误信息,发现报错 ...
- Python - celery 相关报错 - AttributeError: type object '_multiprocessing.win32' has no attribute 'WAIT_OBJECT_0'
报错场景 执行 celery worker -A tasks -l INFO 打开 worker 的时候报错无法进行 报错解决 Celery 的版本过高, 进行降级处理即可 pip instal ...
- 解决idea启动项目报错:Unable to open debugger port(127.0.0.1:60157):java.net.SocketException"socket closed
原因分析: 1.可能是端口被占用导致,其他软件占用了tomcat的端口. 2.可能是在打开Tomcat的情况下关闭了Eclipse.idea等开发工具,或是Eclipse.idea非正常关闭(如电脑. ...
- 解决:启动项目报错 java.lang.UnsatisfiedLinkError: D:\Java\apache-tomcat-8.0.17\bin\tcnative-1.dll: Can't load IA 32-bit .dll on a AMD 64-bit platform
启动项目报错如下: java.lang.UnsatisfiedLinkError: D:\Java\apache-tomcat-8.0.17\bin\tcnative-1.dll: Can't loa ...
- [Java-Idea]解决idea启动项目报错:Unable to open debugger port(127.0.0.1:53046):java.net.SocketException"socket closed
命令行窗口,执行命令:netstat -aon|findstr 9030 查找占用端口的进程 taskkill -f -pid 11331
- maven项目编译报错:Type Dynamic Web Module 3.0 requires Java 1.6 or newer.
在maven的pom.xml文件中增加: <build> <plugins> <plugin> <groupId>org.a ...
- pyhive -- thrift.transport.TTransport.TTransportException: TSocket read 0 bytes
Pyhive 远程连接hive出现问题: from pyhive import hive import pandas as pd #Create Hive connection conn = hive ...
- mac下python环境pip报错[SSL: TLSV1_ALERT_PROTOCOL_VERSION] tlsv1 alert protocol version (_ssl.c:590) 的解决方法
1.mac下python环境pip报错: issuserdeMacBook-Pro:~ issuser$ pip install pyinstallerCollecting pyinstaller ...
- python各种BUG报错解决
报错1 python学习交流群:660193417### Could not build atari-py: Command '['cmake', '..']' returned non-zero e ...
- Eclipse连接HBase 报错:org.apache.hadoop.hbase.PleaseHoldException: Master is initializing
在eclipse中连接到HBase报错org.apache.hadoop.hbase.PleaseHoldException: Master is initializing,搜索了好久,网上其它人说的 ...
随机推荐
- 上篇 | 使用 🤗 Transformers 进行概率时间序列预测
介绍 时间序列预测是一个重要的科学和商业问题,因此最近通过使用基于深度学习 而不是经典方法的模型也涌现出诸多创新.ARIMA 等经典方法与新颖的深度学习方法之间的一个重要区别如下. 概率预测 通常,经 ...
- Linux问题--docker启动mysql时提示3306端口被占用(kill不掉3306端口)
使用kill -9 杀掉mysqld服务时一直失败. mysql启动时会启动mysqld和mysqld_safe两个进程,当使用kill -9杀掉mysqld进程时,mysqld_safe会自动重新启 ...
- CSS 页面整体变灰色
body {-webkit-filter: grayscale(100%) !important;-moz-filter: grayscale(100%) !important;-ms-filter: ...
- 【博图scl语言】313-2dp
①如果 if(***) then *** := ***; end_if; ②循环 for n1:=1 to 50 by 1 do end_for; WHILE #n1 < 54 DO END_W ...
- 前端JavaScript深拷贝的三种方法,看了不后悔!!!
深拷⻉ 深拷⻉开辟⼀个新的栈,两个对象属完成相同,但是对应两个不同的地址,修改⼀个对象的属性,不会 改变另⼀个对象的属性 常⻅的深拷⻉⽅式有: _.cloneDeep() jQuery.extend( ...
- 四大组件之内容提容者ContentProvider
参考:Android开发基础之内容提容者ContentProvider Android四大组件 内容提供者是四大组件之一,还记得Android的四大组件吗? 前面我们学习了三大组件了,对吧! 其中有: ...
- Day13 字符串的常用方法
API帮助文档的使用流程 在索引的位置搜索自己要查看的类 看包 目的:是不是 Java.lang包(核心包),不需要编写导包代码(import) -------不是 java.lang包,都需要编写导 ...
- redis底层数据结构之简单动态字符串(SDS)
简单动态字符串(simple dynamic string,SDS) redis使用C语言编写的,但是redis的字符串却不是C语言中的字符串(以空字符'\0'结尾的字符数组),redis定义了一种简 ...
- 硬件IIC的7位从机地址查询方式读写参考代码
目录 本文中使用582测试,在整合先前博客中的代码的基础上,加上读写超时,加上返回值,加上16位从机寄存器地址的判断,希望读写各用一个函数就能解决硬件IIC的使用问题. #include " ...
- CH582m模拟JoyStick使用USB与电脑通信
目录 本程序改编自沁恒官网2022年1月更新的CH583EVT中的CompoundDev例程.这里只贴了main.c中的程序.能够实现:①直接接电脑,在设备管理器中能够查到被电脑识别为HID-comp ...