解决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,搜索了好久,网上其它人说的 ...
随机推荐
- Android JetPack~ ViewModel (一) 介绍与使用
Android数据绑定技术一,企业级开发 Android数据绑定技术二,企业级开发 Android JetPack~ DataBinding(数据绑定)(一) 集成与使用 Android ...
- Python常见面试题006 类方法、类实例方法、静态方法有何区别?
006. Python中类方法.类实例方法.静态方法有何区别? 全部放一个里面篇幅过大了,就拆分成1个个发布 示例代码 class Human: def __init__(self, name): s ...
- OpenLayers结合Turf实现空间运算
1. 引言 空间运算利用几何函数来接收输入的空间数据,对其进行分析,然后生成输出数据,输出数据为针对输入数据执行分析的派生结果. 可从空间运算中获得的派生数据包括: 作为输入要素周围缓冲区的面 作为对 ...
- 关于浏览器缓存造成的bug解决方法(页面跳转缓存,刷新生效)
1.在执行操作时带上一个随机数/时间戳,表示每一次的都是独一无二的
- 初识redis之性能测试
最近接触一项新技术的方法都是通过测试来入门的.对测试这件事情有了新的认识,觉得是类似做实验的一种方式.尤其对于后端,测试的性能指标是技术选型的重要参考. 好了,如果你想做一下redis的性能测试,不要 ...
- Git 提交和拉取服务器最新版本代码方法
1. 客户端提交: 方法1: git add --all 或 git add 文件1 文件2 ... git commit -m '提交备注信息' git push 方法2: git a ...
- vue的:class设置多个值
vue的:class设置多个值 :class="[{ 'labTilTemplate': item.editType == 11 }, { 'txtBold': item.bold == 1 ...
- JMeter压力测试之环境搭建、脚本调试及报错解决方法(Linux版)
一.环境部署 后续往服务器上传文件,本文中使用的是xftp,因其不是本文所要讲述的重点,这里不做详解. 第一步:安装所需要版本的JDK,本次使用的是JDK 1.8 下载地址:http://www.or ...
- 解决linux conda 命令行环境提示消失的方法
之前不知道这么搞的,一不小心改了conda的默认设置,后面再登录的时候发现环境名字看不见了,用着很难受,为了解决这个问题,后面发现,应该是我改了changeps1这个设置,他默认是开着的,可以用下面的 ...
- iOS 绘制虚线
开发中经常用到虚线 创建一个imageView,直接调用下面的代码就可以了!,imageView的高一般设置2像素就可以了 - (void)drawLineByImageView:(UIImageVi ...