2016-08-08 4 views
3

Я пытаюсь использовать kafka (0.9.1) в безопасном режиме. Я бы прочитал данные с помощью Spark, поэтому я должен передать файл conf JAAS в JVM. Я использую эту ЦМД, чтобы начать свою работу: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.executor.extraJavaOptions» в '$ SPARK_HOME/conf/spark-defaults.conf'? –

+0

И BTW, вы пытались запустить код в локальном режиме с помощью только 'spark.driver.extraJavaOptions'? –

+0

Я начал с spark.driver.extraJavaOptions, так что это правильный вариант. Я думаю, что аутентификация kafka находится в драйвере не у исполнителей. –

ответ

1

Основная причина этой проблемы заключается в том, что вы упомянули неправильное имя свойства. он должен быть java.security.auth.login.config, а не -Djava.security.auth.login.conf. Более того, если вы используете файл keytab. не забудьте сделать его доступным для всех исполнителей, используя аргумент --files в spark-submit. если вы используете билет kerberos, обязательно установите KRB5CCNAME на всех исполнителях, используя свойство SPARK_YARN_USER_ENV.

если вы используете более старую версию искры 1.6.x или ранее. то есть некоторые известные проблемы с искрами, что эта интеграция не будет работать, тогда вам придется писать пользовательский ресивер.

Для искры 1.8 и более поздних версиях вы можете увидеть конфигурацию here

Incase вам нужно создать пользовательский приемник можно увидеть this

Смежные вопросы