Apache Superset 1.3通过Kerberos连接Presto出现未知参数报错问题
核心问题原因
你遇到的报错根本原因是PyHive的Presto驱动本身不支持直接传入auth、kerberos_principal这类字符串参数,Kerberos认证需要通过requests_kerberos库提供的认证对象实现。
解决步骤
步骤1:安装缺失依赖
首先安装Kerberos认证所需的依赖包:
pip install requests-kerberos
步骤2:修正SQLAlchemy层调用写法
你之前的create_engine参数写法错误,正确配置如下:
from sqlalchemy import create_engine from requests_kerberos import HTTPKerberosAuth, OPTIONAL engine = create_engine( 'presto://presto-coordinator:8080/hive/default', connect_args={ 'protocol': 'https', 'auth': HTTPKerberosAuth( mutual_authentication=OPTIONAL, principal='myuser@MYDOMAIN.COM', kerberos_config='/etc/krb5.conf', service='presto' ), 'verify': False } )
注:如果需要使用keytab自动认证,需要提前在系统层通过kinit完成票据缓存:
kinit -kt /opt/superset/mykeytab.keytab myuser@MYDOMAIN.COM,也可以配置系统定时任务定期更新票据,避免票据过期。
步骤3:修正Superset连接配置
在Superset的数据库连接页面,按如下方式配置:
- 连接地址填:
presto://presto-coordinator:8080/hive/default Extra字段(也就是engine_params)的配置如下:
{ "connect_args": { "protocol": "https", "auth": { "module": "requests_kerberos", "class": "HTTPKerberosAuth", "kwargs": { "mutual_authentication": 2, "principal": "myuser@MYDOMAIN.COM", "kerberos_config": "/etc/krb5.conf", "service": "presto" } }, "verify": false } }
注:mutual_authentication参数的值2对应OPTIONAL枚举值,如果你的Trino集群开启了双向认证可以改成REQUIRED(对应值1)。
额外排查点
如果配置后仍然报错,按如下顺序排查:
- 确认Superset运行用户对keytab文件、krb5.conf文件有可读权限
- 确认Superset服务所在节点和Trino coordinator节点时间差不超过5分钟
- 确认Kerberos principal在Trino集群中有访问权限,可直接在节点上用
presto-cli加Kerberos参数测试连通性
内容的提问来源于stack exchange,提问作者Shyam
相关产品推荐
相关产品推荐

