自己搭建了一套完全分布式的hadoop 环境,Hbase也搭建好了。
在使用python 连接 Hbase的时候 试了很多种python 包。走到了一个步骤报错:
Bad protocol id in the message: 72
我最后修改了 conf/hbase-site.xml 这个文件中的两个配置
<property> <name>hbase.regionserver.thrift.http</name> <value>False</value> </property> <property> <name>hbase.thrift.support.proxyuser</name> <value>False</value> </property>
之前在某个搭建Hbase的教程中是要求设置为true的,改为False后直接就成功了
最终的连接代码如下
from thrift.transport import TSocket
from thrift.transport.TTransport import TFramedTransport
from thrift.protocol import TCompactProtocol
from hbase import Hbase
# thrift默认端口是9090, 我设置的是19090
socket = TSocket.TSocket('222.46.179.27', 19090)
socket.setTimeout(5000)
transport = TFramedTransport(socket)
protocol = TCompactProtocol.TCompactProtocol(transport)
client = Hbase.Client(protocol)
transport.open()
# 创建新表 'liuyu',假设只有一个列族 'cf'
table_name = 'liuyu'
column_families = {'cf': None} # 列族为 'cf'
# 尝试创建表,如果表已存在会抛出异常,需要捕获并处理
try:
client.createTable(table_name, [Hbase.ColumnDescriptor(name='cf')])
print(f"Table '{table_name}' created successfully.")
except Exception as e:
print(f"Failed to create table '{table_name}': {e}")
# 打印当前所有表名
print(client.getTableNames())
# 关闭连接
transport.close()
执行结果
同样的,使用happybase进行连接也成功了
import happybase
# HBase Thrift 服务地址和端口
host = '10.466.172.397'
port = 19090
# 连接 HBase
connection = happybase.Connection(host=host, port=port,transport='framed', protocol='compact')
# 创建新表 'liuyu',假设只有一个列族 'cf'
table_name = 'liuyu1'
column_family = 'cf' # 列族为 'cf'
# 尝试创建表,如果表已存在会抛出异常,需要捕获并处理
try:
connection.create_table(table_name, {column_family: dict()})
print(f"Table '{table_name}' created successfully.")
except Exception as e:
print(f"Failed to create table '{table_name}': {e}")
# 打印当前所有表名
print(connection.tables())
# 关闭连接
connection.close()