【发布时间】:2016-09-25 20:32:15
【问题描述】:
我尝试在安全模式下使用 kafka(0.9.1)。我会用 Spark 读取数据,所以我必须将 JAAS conf 文件传递给 JVM。我使用这个 cmd 开始我的工作:
/opt/spark/bin/spark-submit -v --master spark://master1:7077 \
--conf "spark.executor.extraJavaOptions=-Djava.security.auth.login.conf=kafka_client_jaas.conf" \
--files "./conf/kafka_client_jaas.conf,./conf/kafka.client.1.keytab" \
--class kafka.ConsumerSasl ./kafka.jar --topics test
我仍然有同样的错误:
Caused by: java.lang.IllegalArgumentException: You must pass java.security.auth.login.config in secure mode.
at org.apache.kafka.common.security.kerberos.Login.login(Login.java:289)
at org.apache.kafka.common.security.kerberos.Login.<init>(Login.java:104)
at org.apache.kafka.common.security.kerberos.LoginManager.<init>(LoginManager.java:44)
at org.apache.kafka.common.security.kerberos.LoginManager.acquireLoginManager(LoginManager.java:85)
at org.apache.kafka.common.network.SaslChannelBuilder.configure(SaslChannelBuilder.java:55)
我认为spark不会在jvm中注入参数Djava.security.auth.login.conf!!
【问题讨论】:
-
根据个人经验,命令行选项可能有效也可能无效,具体取决于 Spark 的编译方式。您是否尝试将
spark.executor.extraJavaOptions硬设置为$SPARK_HOME/conf/spark-defaults.conf? -
顺便说一句,您是否尝试在本地模式下运行代码,只使用
spark.driver.extraJavaOptions? -
我从 spark.driver.extraJavaOptions 开始,所以它是正确的选择。我认为kafka的身份验证是在Driver中而不是在executors中。
-
这取决于 - 在
local模式下,执行程序与驱动程序在同一进程中运行,因此它们继承了 JAAS 配置和 Kerberos 票证(我猜某些“执行程序”选项并没有得到一致的尊重)。另一方面,在 YARN / MESOS 模式下,执行程序在不同的机器上运行,并且需要他们自己的配置(以及他们自己的 scala/python 代码来引导对 Kafka 的身份验证等) -
我在使用 yarn-client 进行测试时遇到了同样的问题。我认为 spark.executor.extraJavaOptions 是在我们从 yarn cluster 开始时使用的?
标签: security apache-spark apache-kafka