Spark,Kafka针对Kerberos相关配置

本文详细解释了如何在Spark任务提交中配置Kerberos认证以连接Kafka,包括principal、keytab的设置,以及在YARN-client模式下的文件上传策略。特别提到了driver和executor之间jaas.conf文件路径的区别。
摘要由CSDN通过智能技术生成

1. 提交任务的命令
spark-submit  
--class <classname> 
--master yarn 
--deploy-mode client 
--executor-memory 2g 
--executor-cores 2 
--driver-memory 2g 
--num-executors 2 
--queue default  
--principal AS-yg@ASD.COM 
--keytab /etc/security/keytabs/hdfs.headless.keytab 
--files "/usr/AS/conf/kafka_client_jaas.conf,/usr/AS/conf/AS.keytab" 
--driver-java-options "-Djava.security.auth.login.config=/usr/AS/conf/kafka_client_jaas.conf" 
--conf "spark.executor.extraJavaOptions=-Djava.security.auth.login.config=./kafka_client_jaas.conf" 
--jars <your jars>,/usr/AS/lib/spark-kafka-0-10-connector-assembly_2.10-1.0.1.jar /usr/AS/lib/AS-core_1.6-2.1.0.jar 
--principal与--keytab这两个参数为spark需要的Kerberos认证信息

--driver-java-options "-Djava.security.auth.login.config=/usr/AS/conf/kafka_client_jaas.conf"为driver连接kafka用到的认证信息
,因此使用本地绝对路径

--conf "spark.executor.extraJavaOptions=-Djava.security.auth.login.config=./kafka_client_jaas.conf"为executor连接kafka用
到的Kerberos认证信息,因此使用container中的相对路径./

jaas文件中定义了principal与keytab,由于我们使用了yarn-client模式,driver需要的文件在本地文件系统,
executor需要的文件需要我们使用--files的方式上传,即--files "/usr/AS/conf/kafka_client_jaas.conf,/usr/AS/conf/AS.keytab"

有的文档中说--files中传keytab文件会与spark本身的--keytab 冲突,其实是因为他们对spark和kafka使用了相同的principal和keytab,
在上述命令中我为了清晰起见,让spark使用了principal AS-yg@ASD.COM,keytab hdfs.headless.keytab,
让spark连接kafka时使用了principal AS/ASD.COM(principal其实是在jaas文件中指定的,3中详细讲jaas文件) keytab AS.keytab,
当spark提交任务时,yarn会将--keytab后面的keytab文件与--files里的文件先后上传,即 hdfs.headless.keytab与AS.keytab均会被上传,
spark与kafka各取所需,即可正常工作。当spark与kafka要使用相同的keytab文件时,比如都用AS.keytab,那么yarn会先后上传两次AS.keytab,
在spark正使用的时候更新了keytab,造成异常退出

因此如果spark与kafka需要使用相同的keytab文件,我们只需要在--files里不要上传keytab即可避免冲突

spark-submit 
--class <classname> 
--master yarn 
--deploy-mode client 
--executor-memory 2g 
--executor-cores 2 
--driver-memory 2g 
--num-executors 2 
--queue default 
--principal AS@ASD.COM 
--keytab /etc/security/keytabs/AS.keytab 
--files "/usr/AS/conf/kafka_client_jaas.conf" 
--driver-java-options "-Djava.security.auth.login.config=/usr/AS/conf/kafka_client_jaas.conf" 
--conf "spark.executor.extraJavaOptions=-Djava.security.auth.login.config=./kafka_client_jaas.conf" 
--jars <your jars>,/usr/AS/lib/spark-kafka-0-10-connector-assembly_2.10-1.0.1.jar /usr/AS/lib/AS-core_1.6-2.1.0.jar 
还有一个问题是本例中drvier和executor使用了相同的kafka_client_jaas.conf,这也会造成一些问题,3中会详细说明
2. 生成keytab和principal
在KDC Server上执行
kadmin -p admin/admin@ASD.COM
生成principal,principal最好使用AS的用户名+domain
addprinc -randkey AS/ASD.COM
生成keytab
ktadd -k /data/AS.keytab AS/ASD.COM
将keytab文件copy到spark driver所在的机器(因为AS默认使用yarn-client模式)
3. 创建spark读取kafka的jaas配置文件
配置文件 kafka_client_jaas.conf样例如下:
KafkaClient {
com.sun.security.auth.module.Krb5LoginModule required
  useTicketCache=false
  useKeyTab=true
  principal="AS@ASD.COM"
  keyTab="./AS.keytab"
  renewTicket=true
  storeKey=true
  serviceName="AS";
};
其中useTicketCache指从系统的cash中读取credential信息,useKeyTab指从指定的keyTab文件读取credential

principal和keytab用第二步生成的principal与keytab,注意:keytab的路径

如果这个conf文件是给driver读取,则我们要用keytab文件在本地的绝对路径
如果这个conf文件是executor读取,则我们要用keytab文件在container中的相对路径,即./AS.keytab
如果为了方便起见,drvier与executor要使用相同的jaas文件,路径配置为./AS.keytab,我们需要将keytab文件copy到运行spark-submit的当前路径
如果driver和executor要使用不同的jaas文件,则driver的jaas文件中,keytab应为本地绝对路径,executor的jaas文件中,keytab应为相对路径./
 

  • 38
    点赞
  • 39
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

jasen91

你的鼓励是我最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值