注意:这里的superset使用docker compose安装,很多东西需要放在容器内。如果是非docker安装,需要的东西应该是一样,但是不需要额外放到容器内。
1.准备集群的/etc/krb5.conf和/etc/security/keytabs/hive.service.keytab
将两个文件放到superset宿主机同样的路径下。
然后,在宿主机执行:
kinit -kt /etc/security/keytabs/hive.service.keytab hive@xxxx这里的xxxx是hive的服务principal,通过执行 klist -kt /etc/security/keytabs/hive.service.keytab 查看Principal列。
并且将文件复制到容器内:
<容器名>:通过执行 docker compose ps 查看 NAME 列后缀是superset-1的容器名。
docker cp /etc/krb5.conf <容器名>:/etc/krb5.conf docker cp /tmp/krb5cc_0 <容器名>:/tmp/krb5cc_0 #进入容器内,检查容器内的票据有效、设置环境变量 docker exec -it <容器名> bash klist export KRB5CCNAME=FILE:/tmp/krb5cc_02.SQLAlchemy URI格式
xxxx:hive服务所在机器的完整主机名,通过执行 hostname -f 查到。注意:不要写ip
yyyy:想要连接的hive下的某一个数据库。
hive://hive@xxxx:10000/yyyy?auth=KERBEROS&kerberos_service_name=hive并且保证容器内能解析到xxxx对应的ip、/etc/krb5.conf内[Realm]指向的ipa server对应的ip,需要写入容器内/etc/hosts:
#zzzz是ipa server的完整主机名,ip1和ip2是对应的ip ip1 xxxx ip2 zzzz #检查是否能解析 getent hosts xxxx getent hosts zzzz3.下载依赖
注意:容器内的依赖要跟宿主机的依赖区分开来。比如cyrus-sasl-gssapi是RHEL/CentOS的包名,但在 Debian/Ubuntu 上叫libsasl2-modules-gssapi-mit。
我们要确认的是superset镜像的系统版本:
#进入容器 docker exec -it <容器名> bash #查看系统版本 cat /etc/os-releaseSuperset 官方镜像就是 Debian。
在项目下的docker/requirements-local.txt写入:
pyhive[hive_pure_sasl] thrift_sasl pure-sasldocker exec <容器名> /app/.venv/bin/pip install thrift-sasl pure-sasl gssapi pykerberosdocker exec <容器名> bash -c "apt-get update && apt-get install -y krb5-user libsasl2-modules-gssapi-mit"