spark submit-keytab选项不会将文件复制到执行器

qni6mghb  于 2021-06-08  发布在  Kafka
关注(0)|答案(1)|浏览(808)

在我的例子中,我使用的是spark(2.1.1),对于处理,我需要连接到kafka(使用kerberos,因此是keytab)。
提交作业时,我可以传递带有--keytab和--principal选项的keytab。主要缺点是keytab不会被发送到分布式缓存(或者至少对执行者可用),因此它将失败。

Caused by: org.apache.kafka.common.KafkaException: Failed to construct kafka consumer
...
Caused by: org.apache.kafka.common.KafkaException: javax.security.auth.login.LoginException: Could not login: the client is being asked for a password, but the Kafka client code does not currently support obtaining a password from the user. not available to garner`  authentication information from the user

如果我尝试同时在--files中传递它,它可以工作(版本2.1.0),但在最新版本(2.1.1)中它是不允许的,因为它失败的原因是:

Exception in thread "main" java.lang.IllegalArgumentException: Attempt to add (file:keytab.keytab) multiple times to the distributed cache.

有什么建议吗?

jecbmhm3

jecbmhm31#

我通过复制我的keytab文件(例如,原始文件是 osboo.keytab 以及它的副本 osboo-copy-for-kafka.keytab )并通过 --files 选项。


# Call

spark2-submit --keytab osboo.keytab \
 --principal osboo \
--files osboo-copy-for-kafka.keytab#osboo-copy-for-kafka.keytab,kafka.jaas#kafka.jaas

# kafka.jaas

KafkaClient {
com.sun.security.auth.module.Krb5LoginModule required
useKeyTab=true
keyTab="osboo-copy-for-kafka.keytab"
principal="osboo@REALM.COM"
serviceName="kafka";
};

Client {
com.sun.security.auth.module.Krb5LoginModule required
useKeyTab=true
keyTab="osboo-copy-for-kafka.keytab"
serviceName="zookeeper"
principal="osboo@REALM.COM";
};

也许这个解决方案需要较少的努力来记住文件之间的符号链接,所以我希望它能有所帮助。

相关问题