解决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,搜索了好久,网上其它人说的 ...
随机推荐
- orw入门报告
orw(沙箱逃逸) 现在有很多程序在运行时禁用了系统函数,均采用了沙箱技术开启了沙箱保护,我们不能正常的get shell,只能用ROP链来调用其他的函数,例如read,write来把flag打印出来 ...
- [代码审计基础 14]某cms变量覆盖到N处漏洞
PHP:5.4.5 设置调试:https://blog.csdn.net/m0_46641521/article/details/120107786 PHPCMS变量覆盖到SQL注入 0x01:路由分 ...
- ctfshow_web入门 sql注入(web171~248)
sql注入 这是算是学习+做题+记录的一个笔记吧,而且基本都是看着Y4师傅的博客做的 由于是做过sqli靶场,所以这个就记录快点了.如果靶场没遇到的,也会做笔记. union 联合注入 web171 ...
- 2020.11.30【NOIP提高A组】模拟
总结与反思 很不幸,估分 \(170\),可惜 \(T2\) 暴力 \(50pts\) 全掉了 \(T1\) 结论题,如果想到了,\(O(n)\) 过,只有十几行代码 感觉不好想,不过还是 \(A\) ...
- Avalonia 实现平滑拖动指定控件
Avalonia 实现平滑拖动指定控件 1.创建一个UserControl控件,并且添加以下代码 using System; using Avalonia; using Avalonia.Contro ...
- 09 安装虚拟机:Ubuntu Server 20.04
09 安装虚拟机:Ubuntu Server 20.04 9.1 取得安装映像档 9.2 建立虚拟机客体 请至Proxmox VE管理界面点选右上方的[建立VM],来到建立虚拟机客体的引导程序.引导程 ...
- (七) Mysql 之 binlog redolog 二阶段提交
(一)背景知识: 1 binlog binlog 我们中文一般称作归档日志, 是 MySQL Server 层的日志,而不是存储引擎自带的日志,它记录了所有的 DDL 和 DML(不包含数据查询语句) ...
- js获取浏览器宽度和高度值
<html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>请调整浏览器窗口</t ...
- BackTrader 简单BTC的SMA15回测DEMO
import time import requests import json import csv from requests.packages.urllib3 import disable_war ...
- Docker中安装Gitlab详细全教程
安装Docker: note: https://docs.docker.com/engine/install/centos/ 1 yum install -y yum-utils 2 yum-conf ...