ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

Apache superset连接带kerberos的apache hive

Apache superset连接带kerberos的apache hive

注意:这里的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_0

2.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 zzzz

3.下载依赖

注意:容器内的依赖要跟宿主机的依赖区分开来。比如cyrus-sasl-gssapi是RHEL/CentOS的包名,但在 Debian/Ubuntu 上叫libsasl2-modules-gssapi-mit。

我们要确认的是superset镜像的系统版本:

#进入容器 docker exec -it <容器名> bash #查看系统版本 cat /etc/os-release

Superset 官方镜像就是 Debian。

在项目下的docker/requirements-local.txt写入:

pyhive[hive_pure_sasl] thrift_sasl pure-sasl
docker exec <容器名> /app/.venv/bin/pip install thrift-sasl pure-sasl gssapi pykerberos
docker exec <容器名> bash -c "apt-get update && apt-get install -y krb5-user libsasl2-modules-gssapi-mit"

返回列表