2016-08-08 50 views
3

我尝试在安全模式下使用kafka(0.9.1)。我会用Spark读取数据,所以我必须将JAAS conf文件传递给JVM。我用这个CMD开始我的工作:spark kafka security kerberos

/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) 

我觉得火花不喷射参数Djava.security.auth.login.conf在jvm中!

+0

从个人的经验,命令行选项可能会或可能不取决于工作方式Spark被编译。您是否尝试在'$ SPARK_HOME/conf/spark-defaults.conf'中设置'spark.executor.extraJavaOptions'? –

+0

顺便说一句,你是否尝试以本地模式运行代码,只有'spark.driver.extraJavaOptions'? –

+0

我从spark.driver.extraJavaOptions开始,所以它是正确的选项。我认为卡夫卡的身份验证不在执行者身上,而是在驱动程序中。 –

回答

1

此问题的主要原因是您提到了错误的属性名称。它应该是java.security.auth.login.config而不是-Djava.security.auth.login.conf。此外,如果你使用keytab文件。请务必使用​​中的--files参数使其在所有执行程序中可用。如果您使用kerberos票务,请务必使用属性SPARK_YARN_USER_ENV对所有执行人员设置KRB5CCNAME

如果您使用的是旧版本的spark 1.6.x或更早版本。那么有一些已知的问题与火花,这种集成将无法正常工作,那么你必须编写一个自定义接收器。

火花1.8及更高版本,可以看到配置here

柜面你需要创建自定义接收器,你可以看到this

相关问题