使用SQL Alchemy

时间:2016-12-26 08:51:35

标签: python hive sqlalchemy kerberos

我尝试使用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的支持。

1 个答案:

答案 0 :(得分:0)

安装这些库

  • sasl
  • 节俭
  • thrift-sasl
  • PyHive

获取您的kerberos票,然后;

  

engine = create_engine('hive:// HOST:10500 / DB_NAME',
  connect_args = {'auth':'KERBEROS','kerberos_service_name':'hive'})

ps:/ DB_NAME是可选的