CDP升级,需要部署kerberos,代码脚本都要修改。
keytab生成
重中之重,感觉大部分问题都出在这里,后面测通kakfa时有大坑.
- klist (过期后需要重新kinit该用户)
- kinit sma_admin
- (假设我们的用户名是sma_admin)输入密码
- ipa-getkeytab -p sma_admin@NEWCHINALIFE.COM -k ./sma_admin.keytab --password
(最重要的一步来了,ipa-getkeytab -p sma_admin -k ./sma_admin.keytab --password我原来用的这个命令,导致我后来代码调试kakfa失败,用最上面的命令就没问题,这里具体不知道为什么,有大佬可以解释一下最好)
这个命令要输入两次密码,自己记住就行
- kinit -kt ./sma_admin.keytab sma_admin@NEWCHINALIFE.COM
(这一步也很重要,之前用的kinit -kt sma_admin.keytab sma_admin 并不好使,原因不知道)
kafka生产者消费者
用正常的kafka生产者消费者命令会报错,是因为没有配置kafka kerberos客户端验证配置,有kerberos情况下kafka客户端需要对kafka做以下配置
- 创建jaas.conf
KafkaClient {
com.sun.security.auth.module.Krb5LoginModule required
useKeyTab=true
keyTab="/home/sma_admin/allindex/structedstreaming/sma_admin.keytab"
principal="sma_admin@NEWCHINALIFE.COM";
};
如果是用keytab,内容如下
KafkaClient {
com.sun.security.auth.module.Krb5LoginModule required useKeyTab=true
keyTab="/etc/security/keytabs/kafka_server.keytab"
principal="kafka/kafka1.hostname.com@EXAMPLE.COM";
};
- 创建client.properties文件,内容如下
security.protocol=SASL_PLAINTEXT
sasl.kerberos.service.name=kafka
- 将jaas.conf导入到Kakfa验证选项
(目录不固定,放哪里改成哪里)
$ export KAFKA_OPTS="-Djava.security.auth.login.config=/home/user/jaas.conf"
- 然后进行生产或消费
kafka-console-producer --bootstrap-server 10.1.92.21x:9092,10.1.92.22x:9092,10.1.92.22x:9092 --topic dev_pas_topic2 --producer.config client.properties
kafka-console-consumer --bootstrap-server 10.1.92.21x:9092,10.1.92.22x:9092,10.1.92.22x:9092 --topic dev_pas_topic2 --consumer.config client.properties
Spark-submit的认证
- 使用keytab可以避免认证过期问题
在正常的submit提交命令中加入以下内容:
--keytab /home/sma_admin/allindex/structedstreaming/sma_admin.keytab
--principal sma_admin@NEWCHINALIFE.COM
2.1 spark structed streaming + kafka 再添加以下内容
--driver-java-options "-Djava.security.auth.login.config=/home/sma_admin/allindex/structedstreaming/kafka_client_jaas.conf"
--conf "spark.executor.extraJavaOptions=-Djava.security.auth.login.config=/home/sma_admin/allindex/structedstreaming/kafka_client_jaas.conf"
2.2 spark structed streaming + kafka创建kafka_client_jaas.conf ,kafka_client_jaas.conf 为以下内容
KafkaClient {
com.sun.security.auth.module.Krb5LoginModule required
useKeyTab=true
storeKey=true
keyTab="/home/sma_admin/allindex/structedstreaming/sma_admin.keytab"
principal="sma_admin@NEWCHINALIFE.COM";
};
Client {
com.sun.security.auth.module.Krb5LoginModule required
useKeyTab=true
storeKey=true
keyTab="/home/sma_admin/allindex/structedstreaming/sma_admin.keytab"
principal="sma_admin@NEWCHINALIFE.COM";
};
2.3 spark structed streaming + kafka 分发kafka_client_jaas.conf 和keytab文件到每一个Yarn节点,同一个目录下