2016-08-08 90 views
3

Ich versuche, Kafka (0.9.1) mit Sicherheitsmodus zu verwenden. Ich würde Daten mit Spark lesen, also muss ich die JAAS Conf-Datei an die JVM übergeben. Ich benutze diese cmd meinen Job zu starten:Funke Kafka Sicherheit 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 

ich immer noch die gleichen Fehler hat:

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) 

ich der Funke denke nicht, die Parameter nicht injiziert Djava.security.auth.login.conf im jvm !!

+0

Aus persönlicher Erfahrung, Befehlszeilenoptionen können oder auch nicht auf dem Weg in Abhängigkeit sehen Spark wurde kompiliert. Haben Sie versucht, 'spark.executor.extraJavaOptions' in '$ SPARK_HOME/conf/spark-defaults.conf' zu setzen? –

+0

Und BTW, haben Sie versucht, den Code im lokalen Modus auszuführen, mit nur 'spark.driver.extraJavaOptions'? –

+0

Ich habe mit spark.driver.extraJavaOptions begonnen, also ist es die richtige Option. Ich denke, die Authentifizierung von Kafka ist im Treiber nicht in den Executoren. –

Antwort

1

Der Hauptgrund für dieses Problem ist, dass Sie den falschen Namen der Eigenschaft angegeben haben. es sollte und nicht -Djava.security.auth.login.conf sein. Außerdem, wenn Sie Keytab-Datei verwenden. Stellen Sie sicher, dass es auf allen Executoren verfügbar ist, indem Sie --files als Argument in spark-submit verwenden. Wenn Sie Kerberos-Ticket verwenden, stellen Sie sicher, dass KRB5CCNAME für alle Executoren mit der Eigenschaft SPARK_YARN_USER_ENV festgelegt ist.

Wenn Sie ältere Version von Spark 1.6.x oder früher verwenden. Dann gibt es einige bekannte Probleme mit Funken, dass diese Integration nicht funktioniert, dann müssen Sie einen benutzerdefinierten Empfänger schreiben.

Für Funken 1.8 und höher können Sie Konfiguration sehen Sie here

Incase müssen benutzerdefinierten Empfänger erstellen Sie this