我尝试使用SQL Alchemy查询Kerberized Hive群集。我可以使用pyhs2提交查询,确认在Kerberos验证时可以连接和查询Hive:
import pyhs2
with pyhs2.connect(host='hadoop01.woolford.io',
port=10500,
authMechanism='KERBEROS') as conn:
with conn.cursor() as cur:
cur.execute('SELECT * FROM default.mytable')
records = cur.fetchall()
# etc ...
我注意到Airbnb's Airflow使用SQL Alchemy并且可以连接到Kerberized Hive,所以我想它可以做这样的事情:
engine = create_engine('hive://hadoop01.woolford.io:10500/default', connect_args={'?': '?'})
connection = engine.connect()
connection.execute("SELECT * FROM default.mytable")
# etc ...
我不确定应在connect_args
字典中设置哪些参数。你能看到需要添加什么来使其工作(例如Kerberos服务名称,领域等)?
在幕后,SQL Alchemy正在使用PyHive连接到Hive。当前版本的PyHive,v0.2.1,不支持Kerberos。
我注意到雅虎的某个人创建了一个pull request来提供对Kerberos的支持。此PR尚未合并/发布,因此我只是将PR中的代码复制到Superset服务器上的/usr/lib/python2.7/site-packages/pyhive/hive.py
,创建了这样的连接:
engine = create_engine('hive://hadoop01:10500', connect_args={'auth': 'KERBEROS', 'kerberos_service_name': 'hive'})
希望PyHive的维护者能合并/释放对Kerberos的支持。
答案 0 :(得分:0)
安装这些库
获取您的kerberos票,然后;
engine = create_engine('hive:// HOST:10500 / DB_NAME',
connect_args = {'auth':'KERBEROS','kerberos_service_name':'hive'})
ps:/ DB_NAME是可选的