python 操作hbase(phoenix)

本文介绍如何使用Python通过Phoenix连接HBase数据库,包括JayDeBeApi和jpype1的安装配置,以及常见错误的解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

python 操作hbase 可以通过多种两种方式来操作,一种是使用库happybase直接连接数据库,另外一种是通过Phoenix连接。Phoenix是构建在HBase上的一个SQL层,能让我们用标准的JDBC APIs而不是HBase客户端APIs来创建表,插入数据和对HBase数据进行查询。由于我们的业务是根据phoenix连接的,所以最终我们选择的是第二种。相对应的安装包是jpype1 以及jaydebeapi。

JayDeBeApi是一个允许用户使用Python用过Java JDBC驱动连接数据库的开源工具。理论上可以兼容所有的JDBC驱动,主要有:SQLite、Hypersonic SQL (HSQLDB)、IBM DB2、IBM DB2 for mainframes、Oracle、Teradata DB、Netezza、Mimer DB、Microsoft SQL Server、MySQL、PostgreSQL、Phoenix。
在这里插入图片描述

安装

首先要确认自己系统的java版本以及python版本是32位还是64位的,使用了python的jpype库需要保持两个版本是一致的。这里我们选择的都是64位。如果没有java包就自己手动安装java,此处就不介绍了。

安装jpype1 

我们通过以下url下载包,也可pip 安装改包,但需要会提示安装vc++, 单独下载该包则不需要安装其他依赖。
https://www.lfd.uci.edu/~gohlke/pythonlibs/
在这个网站下载两个安装包:jpype1 的运行依赖于下一个包numpy
在这里插入图片描述
在这里插入图片描述
pip install numpy-1.16.5+mkl-cp27-cp27m-win_amd64.whl
pip install JPype1-0.6.3-cp27-cp27m-win_amd64.whl

安装jaydebeapi

此包可以正常的pip安装即可。

代码
#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
# @Time        : 2019/11/16
# @Author      : lanny8588
# @File        : hbase_contact.py
# @Software    : PyCharm
# @version     : python 2.7
"""

import sys
reload(sys)
sys.setdefaultencoding('utf-8')
import jaydebeapi
import time
t=time.time()
url = 'jdbc:phoenix:192.168.xx.6,192.168.xx.7,192.168.xx.8:2181;'
dirver = 'org.apache.phoenix.jdbc.PhoenixDriver'
params={'phoenix.schema.isNamespaceMappingEnabled': 'true'}  ##如果不加这一句的话就会报错
jarFile = "D:\hbase-conf\phoenix-4.13.2-cdh5.11.2-client.jar"
sqlStr = 'select * from "xxxx"'
conn = jaydebeapi.connect(dirver, url,params,jarFile)
curs = conn.cursor()
curs.execute(sqlStr)
result = curs.fetchall()
错误解决

出现这种错误
错误1
JayDeBeApi throws AttributeError: ‘_jpype.PyJPField’ object has no attribute 'getStaticAttribute

This error is returned when JayDeBeApi is used with the latest version of JPype (0.7.0).With the previous version of JPype (0.6.3) no problem .一般是版本引起的,降低下版本即可。

错误2
java.sql.SQLExceptionPyRaisable: java.sql.SQLException: ERROR 726 (43M10): Inconsistent namespace mapping properties… Cannot initiate connection as SYSTEM:CATALOG is found but client does not have phoenix.schema.isNamespaceMappingEnabled enabled
环境变量设置问题,就是上面的params参数。

### PythonPhoenix框架或数据库的集成 #### 集成背景 Apache Phoenix是一个构建于HBase之上的SQL中间件,允许通过标准JDBC接口执行SQL查询。为了使Python能够与Phoenix交互,通常采用两种主要方式:一是利用`pyodbc`库连接Phoenix服务器;二是使用专门为Phoenix设计的Python客户端。 #### 使用PyODBC连接Phoenix 对于希望保持灵活性并能处理多种数据源的应用程序开发者来说,`pyodbc`提供了一种通用的方法来访问支持ODBC的数据存储,包括Phoenix。下面展示了如何配置环境以及编写简单的查询语句: ```python import pyodbc conn_str = ( 'DRIVER={};' 'HOST=phoenix_host;' 'PORT=port_number;' ).format('org.apache.phoenix.jdbc.PhoenixDriver') connection = pyodbc.connect(conn_str) cursor = connection.cursor() sql_query = "SELECT * FROM sample_table LIMIT 10" for row in cursor.execute(sql_query): print(row) cursor.close() connection.close() ``` 此代码片段说明了怎样建立到Phoenix实例的连接,并执行基本的选择操作[^1]。 #### 利用Phoenix-Python Client 另一种更为直接的方式是借助专门针对Phoenix开发的Python包——`phoenixdb`。这个库简化了许多设置过程中的复杂度,使得安装和维护更加简便。以下是创建表及插入记录的例子: ```python from phoenixdb import connect database_url = 'http://localhost:8765/' connection = connect(database_url, autocommit=True) with connection.cursor() as cursor: cursor.execute(""" CREATE TABLE IF NOT EXISTS test ( id INTEGER PRIMARY KEY, value VARCHAR ) """) cursor.execute("UPSERT INTO test VALUES (?, ?)", (1, 'hello')) ``` 上述脚本不仅实现了表格定义的功能,还示范了向其中添加新条目的方法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值