使用SQL Alchemy查询Kerberized Hive

3
我正在尝试使用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的Airflow使用SQLAlchemy并且可以连接到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。
我注意到有人从Yahoo创建了一个pull request来提供对Kerberos的支持。该PR尚未合并/发布,因此我只是将代码从PR复制到/usr/lib/python2.7/site-packages/pyhive/hive.py中,在Superset服务器上创建了一个连接,如下所示:
engine = create_engine('hive://hadoop01:10500', connect_args={'auth': 'KERBEROS', 'kerberos_service_name': 'hive'})

希望PyHive的维护者能够合并/发布对Kerberos的支持。
1个回答

1

安装以下库:

  • sasl
  • thrift
  • thrift-sasl
  • PyHive

获取您的Kerberos票据,然后执行以下操作:

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

注:/DB_NAME是可选的。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接