python通过thrift方式连接hive

hive安装完成后,如果只是本地使用,启用

nohup hive --service metastore &

[hadoop@master1 usr]$ hive

Logging initialized using configuration in file:/data/usr/hive/conf/hive-log4j.properties
hive> use fmcm;
OK
Time taken: 0.874 seconds

如果是要脚本调用,则需要启用HiveServer2,确保10000端口已经被监听(可在hive-site.xml中修改端口)

 nohup hive --service hiveserver2 &

[hadoop@master1 usr]$ netstat -an|grep 10000            
tcp        0      0 0.0.0.0:10000           0.0.0.0:*               LISTEN    

 

HiveServer2为客户端在远程执行hive查询提供了接口,通过Thrift RPC来实现,还提供了多用户并发和认证功能。目前python可以通过pyhs2这个模块来连接HiveServer2,实现查询和取回结果的操作。

不过pyhs2已经不在维护,追新的可以参考另外2个很好的python package(已经被证明pyhs2存在性能瓶颈,最好尽快切换到pyhive)

https://github.com/dropbox/PyHive

https://github.com/cloudera/impyla

 

安装sasl失败的话,先安装:
yum install gcc-c++ python-devel.x86_64 cyrus-sasl-devel.x86_64

pyhs2的项目托管在github之上,地址为https://github.com/BradRuderman/pyhs2或在https://pypi.python.org/pypi/pyhs2/0.2直接下载

 

如果安装不成功,可以尝试先安装以下的组件:

yum install cyrus-sasl-plain
yum install cyrus-sasl-devel

安装时如果遇到报错: 

error: sasl/sasl.h: No such file or directory 

可以尝试先安装sasl , ubantu可以用sudo apt-get install libsasl2-dev, CentOS可以使用anaconda的pip安装, 或者按照以下步骤安装:

 

curl -O -L ftp://ftp.cyrusimap.org/cyrus-sasl/cyrus-sasl-2.1.26.tar.gz
tar xzf cyrus-sasl-2.1.2.26.tar.gz
cd cyrus-sasl-2.1.26.tar.gz
./configure && make install


最后附上测试代码:
# -*- coding:utf-8 -*-
'''
采用Hive和thrift方式连接数据库
'''
import pyhs2
import sys
reload(sys)
sys.setdefaultencoding('utf8')

class HiveClient:
    def __init__(self, db_host, user, password, database, port=10000, authMechanism="PLAIN"):
      
        self.conn = pyhs2.connect(host=db_host,
                                  port=port,
                                  authMechanism=authMechanism,
                                  user=user,
                                  password=password,
                                  database=database,
                                  )

    def query(self, sql):
        with self.conn.cursor() as cursor:
            cursor.execute(sql)
            return cursor.fetch()

    def close(self):
        self.conn.close()


def main():
    """
    main process
    @rtype:
    @return:
    @note:

    """
    hive_client = HiveClient(db_host='10.24.33.3', port=10000, user='hadoop', password='hadoop',
                             database='fmcm', authMechanism='PLAIN')
    result = hive_client.query('select * from fm_news_newsaction limit 10')
    print result
    hive_client.close()


if __name__ == '__main__':
    main()

 

转载于:https://my.oschina.net/aibati2008/blog/668148

### 配置 HiveThrift 服务 HiveThrift 服务(也称为 HiveServer2 或 HiveThrift),是一个用于支持远程客户端访问 Hive 数据库的服务组件。其主要职责是提供网络接口以便于外部程序能够通过 JDBC/ODBC 协议或者自定义 API 调用与 Hive 进行交互[^1]。 #### 启动 HiveThrift 服务 要启动 HiveThrift 服务,通常需要确保 Hadoop 和 Hive 已经正确安装并运行正常。以下是启动命令的一个典型例子: ```bash $ hive --service hiveserver2 ``` 此命令会在默认端口 `10000` 上启动 HiveServer2 服务。如果需要更改端口号或其他参数,则可以在 `$HIVE_HOME/conf/hive-site.xml` 文件中调整相关配置项,例如设置监听地址和端口等属性。 #### 关键配置选项 一些重要的配置选项可能包括但不限于以下几个方面: - **hive.server2.thrift.port**: 指定 HiveServer2 监听的 TCP 端口,默认为 10000。 - **hive.server2.authentication**: 设置身份验证方式,比如 NONE、LDAP 或者 KERBEROS 等模式。 - **hive.metastore.uris**: 如果启用了独立元数据存储服务,则需指定 URI 地址。 完成上述步骤之后即可成功部署好一个可用状态下的 HiveThrift Server 实例[^2]。 --- ### 使用 Python 连接Hive 客户端 对于 Python 用户来说,有多种方法可以实现同 Hive 的通信连接。其中较为推荐的方式之一就是借助第三方开源项目 PyHive ,这是一个专门为简化 PythonHive 访问而设计的库[^3]。 下面给出一段基于 PyHive 库的具体代码实例演示如何建立到 Hive 数据库上的链接关系,并执行简单查询语句返回结果集: ```python from pyhive import hive def connect_to_hive(): try: connection = hive.Connection( host='your_host_ip', # 替换为目标服务器 IP 地址 port=10000, # 默认端口通常是 10000 username='your_username', # 登录用户名 database='default', # 初始使用的数据库名称 auth='NOSASL' # 不启用 SASL 加密传输协议 ) cursor = connection.cursor() query_sql = "SHOW TABLES" cursor.execute(query_sql) result_set = cursor.fetchall() for row in result_set: print(row) except Exception as e: print(f"Error occurred while connecting to Hive: {e}") if __name__ == "__main__": connect_to_hive() ``` 以上脚本展示了怎样构建起一条安全可靠的通道直达远端机器上正在运转着的那个 HiveServer2 实例之上;与此同时还给出了关于错误处理机制方面的考虑[^4]。 另外需要注意的是,在某些特定场景下可能会遇到因缺少必要依赖而导致无法正常使用该功能的情况发生——此时就需要按照官方文档指引手动复制相应 jar 包至 python 解析路径当中去解决此类问题了[^5]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值