Spark通过yarn、kubernetes连接kerberos 认证的Hive,需要把hive-site.xml以及hadoop的conf下的xml文件,都放到Spark 的conf目录下,官网写的设置HADOOP_CONF_DIR环境变量我自己测试在容器外是无效的,到认证时,一直报错Failed to find any Kerberos tgt,且Kerberos Server也没有收到任何验证信息。需要将HADOOP_CONF_DIR环境变量以及对于的配置文件一起打到镜像内,如
ENV HADOOP_CONF_DIR=/opt/spark/conf/
CP hdfs-site.xml core-site.xml /opt/spark/conf
其次,需要保证供kubernetes调用的spark镜像内,与KDC、Hadoop集群的网络、域名解析都是通畅的。
最后spark-submit时,传入参数
--conf spark.kerberos.keytab=<KEYTAB_FILE> \ --conf spark.kerberos.principal=<PRINCIPAL> \ --conf spark.kubernetes.kerberos.krb5.path=/etc/krb5.conf
这样在spark程序能直接enableHiveSupport,就可以连接上kerberos认证的hive
测试时不用测试spark standalone mode,截止至3.4.0版本,仅yarn 和kubernetes、mesos支持kerberos认证,其它模式均不支持。