内容纲要
概要描述
本文介绍如何使用 python 的 pyhive 模块,连接几种不同认证方式的 inceptor
详细说明
主要包括以下几种:
- 未开启任何认证方式的 inceptor
- 只开启 LDAP 认证方式的 inceptor
- 开启 Kerberos 认证方式的 inceptor
环境准备工作
python 版本 >= 3.5
yum install gcc
yum install gcc-c++
yum install python-devel
yum install cyrus-sasl-devel
yum install cyrus-sasl-plain cyrus-sasl-devel cyrus-sasl-gssapi
pip install pyhive==0.6.2
pip install sasl==0.2.1
pip install thrift_sasl==0.4.2
1、未开启任何认证方式的 inceptor
#!/usr/bin/python
# -*- coding: UTF-8 -*-
from pyhive import hive
# 定义连接串,连接未开启安全的,只需要传递两个参数即可
# :param host: What host HiveServer2 runs on
# :param port: What port HiveServer2 runs on. Defaults to 10000.
inceptor = hive.connect(host='172.22.22.24',port=10000)
cursor = inceptor.cursor()
2、只开启 LDAP 认证方式的 inceptor
#!/usr/bin/python
# -*- coding: UTF-8 -*-
from pyhive import hive
# 定义连接串,开启LDAP 情况下,需要传递以下参数
# :param auth: The value of hive.server2.authentication used by HiveServer2.Defaults to `NONE
`.
# :param username: username or getpass.getuser()
# :param password: Use with auth='LDAP' or auth='CUSTOM' only
inc_with_ldap = hive.connect(host='172.22.22.24',port=10000,auth='LDAP', username='hive',password='123456')
cursor = inc_with_ldap.cursor()
3、同时开启 LDAP、Kerberos 认证方式的 inceptor
#!/usr/bin/python
# -*- coding: UTF-8 -*-
from pyhive import hive
import os
# 创建连接之前,保证环境已经认证了,或者直接在 python 脚本里面认证之后再执行。kerberos 模式下使用的是当前环境下的认证信息;
os.system('kinit -kt /opt/tools/admin.keytab admin/TDH@TDH')
# 创建的连接是当前环境下有效的用户认证信息,也就是 klist 出来的
inc_with_kerberos = hive.connect(host='172.22.22.24',port=10000,auth='KERBEROS',kerberos_service_name="hive")
cursor = inc_with_kerberos.cursor()
cursor.execute("select * from eastmoney.guild_rank limit 110", async=True)
cursor.fetchall()
FAQ:
测试连接过程报错,需要安装一些依赖包
thrift.transport.TTransport.TTransportException: Could not start SASL: Error in sasl_client_start (-4) SASL(-4): no mechanism available: No worthy mechs found
yum install cyrus-sasl-plain cyrus-sasl-devel cyrus-sasl-gssapi