<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>question Unable to connect to kerberized Kafka 2.1 (0.10) from Spark 2.1 in Archives of Support Questions (Read Only)</title>
    <link>https://community.cloudera.com/t5/Archives-of-Support-Questions/Unable-to-connect-to-kerberized-Kafka-2-1-0-10-from-Spark-2/m-p/56017#M63055</link>
    <description>&lt;P&gt;Hello,&lt;BR /&gt;&lt;BR /&gt;I have CDH 5.10.1, SPARK2.1, KAFKA2.1 (0.10) - all of them kerberized.&lt;BR /&gt;I was able to connect to Kafka from kafka CLI tools, as described here:&lt;BR /&gt;&lt;A href="https://www.cloudera.com/documentation/kafka/latest/topics/kafka_security.html#concept_lcn_4mm_s5" target="_blank"&gt;https://www.cloudera.com/documentation/kafka/latest/topics/kafka_security.html#concept_lcn_4mm_s5&lt;/A&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;STRONG&gt;But I can not connect as Spark2 Consumer with Direct Stream method, because jaas.conf can't be finden, despite it is properly distributed to HDFS while loading by spark2-submit.&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;I was trying those 2 documentations:&lt;BR /&gt;&lt;A href="https://spark.apache.org/docs/latest/streaming-kafka-0-10-integration.html" target="_blank"&gt;https://spark.apache.org/docs/latest/streaming-kafka-0-10-integration.html&lt;/A&gt;&lt;BR /&gt;&lt;A href="https://www.cloudera.com/documentation/spark2/latest/topics/spark2_kafka.html" target="_blank"&gt;https://www.cloudera.com/documentation/spark2/latest/topics/spark2_kafka.html&lt;/A&gt;&lt;BR /&gt;&lt;BR /&gt;My code simply counts elements in a batch of a stream.&lt;BR /&gt;linking in build.sbt:&lt;/P&gt;&lt;PRE&gt;isegrim@sparkgw:~/kafka-spark-krb-test$ cat build.sbt
import sbt.Keys.scalaVersion

lazy val root = (project in file(".")).
        settings(
                name := "kafka-spark-krb-test",
                version := "1.0",
                scalaVersion := "2.11.8"
)

resolvers += "Cloudera" at "https://repository.cloudera.com/artifactory/cloudera-repos/"

lazy val spark = Seq(
        "spark-core",
        "spark-streaming",
        "spark-streaming-kafka-0-10"
).map("org.apache.spark" %% _ % "2.1.0.cloudera1" % "provided")
libraryDependencies ++= spark

assemblyMergeStrategy in assembly := {
        case PathList("META-INF", xs @ _*) =&amp;gt; MergeStrategy.discard
        case x =&amp;gt;
                val oldStrategy = (assemblyMergeStrategy in assembly).value
                oldStrategy(x)
}

assemblyOption in assembly := (assemblyOption in assembly).value.copy(includeScala = false)
assemblyJarName in assembly := "kafka-spark-krb-test.jar"&lt;/PRE&gt;&lt;P&gt;&lt;BR /&gt;&lt;BR /&gt;Main code&lt;BR /&gt;&lt;BR /&gt;&lt;/P&gt;&lt;PRE&gt;isegrim@sparkgw:~/kafka-spark-krb-test$ cat src/main/scala/af/spark2/tests/Main.scala&lt;BR /&gt;package af.spark2.tests

import org.apache.spark._
import org.apache.spark.streaming._
import org.apache.spark.streaming.kafka010._
import org.apache.spark.streaming.kafka010.LocationStrategies.PreferConsistent
import org.apache.spark.streaming.kafka010.ConsumerStrategies.Subscribe
import org.apache.kafka.common.serialization.StringDeserializer

object Main {
  val streamingBatchInterval = Seconds(60)
  val streamingTimeout = 432000000

  def main(args: Array[String]): Unit = {
    val conf = new SparkConf()
    val ssc = new StreamingContext(conf, streamingBatchInterval)
    ssc.checkpoint("spark/checkpoint/kafka-spark-krb-test")
    val kafkaParams = Map[String,Object](
      "bootstrap.servers" -&amp;gt; "broker1:9092,broker2:9092",
      "security.protocol" -&amp;gt; "SASL_PLAINTEXT",
      "sasl.kerberos.service.name" -&amp;gt; "kafka",
      "key.deserializer" -&amp;gt; classOf[StringDeserializer],
      "value.deserializer" -&amp;gt; classOf[StringDeserializer],
      "group.id" -&amp;gt; "kafka-spark-krb-test",
      "auto.offset.reset" -&amp;gt; "latest",
      "enable.auto.commit" -&amp;gt; (false: java.lang.Boolean)
    )
    val topics = Array("mytopic")
    val messages = KafkaUtils.createDirectStream[String, String](ssc, PreferConsistent, Subscribe[String, String](topics, kafkaParams))
    messages.count().print()

    ssc.start()
    ssc.awaitTerminationOrTimeout(streamingTimeout)
    ssc.stop(true, true)
  }
}&lt;/PRE&gt;&lt;P&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;I start the app like this:&lt;/P&gt;&lt;PRE&gt;isegrim@sparkgw:~/kafka-spark-krb-test$ SPARK_KAFKA_VERSION=0.10 spark2-submit \&lt;BR /&gt;--master yarn \&lt;BR /&gt;--deploy-mode client \&lt;BR /&gt;--queue myqueue \&lt;BR /&gt;--keytab /home/isegrim/isegrim.keytab \&lt;BR /&gt;--principal isegrim@TEST.COM \&lt;BR /&gt;--files /home/isegrim/jaas.conf#jaas.conf \&lt;BR /&gt;--driver-java-options "-Djava.security.auth.login.config=./jaas.conf" \&lt;BR /&gt;--conf "spark.executor.extraJavaOptions=-Djava.security.auth.login.config=./jaas.conf" \&lt;BR /&gt;target/scala-2.11/kafka-spark-krb-test.jar&lt;/PRE&gt;&lt;P&gt;&lt;BR /&gt;&lt;BR /&gt;Some log + error I get:&lt;/P&gt;&lt;PRE&gt;...
17/06/16 17:16:38 INFO yarn.Client: Uploading resource file:/home/isegrim/.keytab/isegrim.keytab -&amp;gt; hdfs:///user/isegrim/.sparkStaging/application_1497619292421_0004/isegrim.keytab
&lt;FONT color="#339966"&gt;&lt;STRONG&gt;17/06/16 17:16:39 INFO yarn.Client: Uploading resource file:/home/isegrim/jaas.conf#jaas.conf -&amp;gt; hdfs:///user/isegrim/.sparkStaging/application_1497619292421_0004/jaas.conf&lt;/STRONG&gt;&lt;/FONT&gt;
17/06/16 17:16:39 INFO yarn.Client: Uploading resource file:/tmp/spark-f1a0e9a4-0c13-495a-a904-2dd1ca1303c1/__spark_conf__1583085251581943316.zip -&amp;gt; hdfs:///user/isegrim/.sparkStaging/application_1497619292421_0004/__spark_conf__.zip
17/06/16 17:16:39 INFO spark.SecurityManager: Changing view acls to: isegrim
17/06/16 17:16:39 INFO spark.SecurityManager: Changing modify acls to: isegrim
...
17/06/16 17:16:49 INFO dstream.ForEachDStream: Slide time = 60000 ms
17/06/16 17:16:49 INFO dstream.ForEachDStream: Storage level = Serialized 1x Replicated
17/06/16 17:16:49 INFO dstream.ForEachDStream: Checkpoint interval = null
17/06/16 17:16:49 INFO dstream.ForEachDStream: Remember interval = 60000 ms
17/06/16 17:16:49 INFO dstream.ForEachDStream: Initialized and validated org.apache.spark.streaming.dstream.ForEachDStream@1b485c8b
17/06/16 17:16:49 INFO consumer.ConsumerConfig: ConsumerConfig values:
        metric.reporters = []
        metadata.max.age.ms = 300000
        partition.assignment.strategy = [org.apache.kafka.clients.consumer.RangeAssignor]
        reconnect.backoff.ms = 50
        sasl.kerberos.ticket.renew.window.factor = 0.8
        max.partition.fetch.bytes = 1048576
        bootstrap.servers = [broker1:9092, broker2:9092]
        ssl.keystore.type = JKS
        enable.auto.commit = false
        sasl.mechanism = GSSAPI
        interceptor.classes = null
        exclude.internal.topics = true
        ssl.truststore.password = null
        client.id =
        ssl.endpoint.identification.algorithm = null
        max.poll.records = 2147483647
        check.crcs = true
        request.timeout.ms = 40000
        heartbeat.interval.ms = 3000
        auto.commit.interval.ms = 5000
        receive.buffer.bytes = 65536
        ssl.truststore.type = JKS
        ssl.truststore.location = null
        ssl.keystore.password = null
        fetch.min.bytes = 1
        send.buffer.bytes = 131072
        value.deserializer = class org.apache.kafka.common.serialization.StringDeserializer
        group.id = kafka-spark-krb-test
        retry.backoff.ms = 100
        ssl.secure.random.implementation = null
        sasl.kerberos.kinit.cmd = /usr/bin/kinit
        sasl.kerberos.service.name = kafka
        sasl.kerberos.ticket.renew.jitter = 0.05
        ssl.trustmanager.algorithm = PKIX
        ssl.key.password = null
        fetch.max.wait.ms = 500
        sasl.kerberos.min.time.before.relogin = 60000
        connections.max.idle.ms = 540000
        session.timeout.ms = 30000
        metrics.num.samples = 2
        key.deserializer = class org.apache.kafka.common.serialization.StringDeserializer
        ssl.protocol = TLS
        ssl.provider = null
        ssl.enabled.protocols = [TLSv1.2, TLSv1.1, TLSv1]
        ssl.keystore.location = null
        ssl.cipher.suites = null
        security.protocol = SASL_PLAINTEXT
        ssl.keymanager.algorithm = SunX509
        metrics.sample.window.ms = 30000
        auto.offset.reset = latest

17/06/16 17:16:49 ERROR streaming.StreamingContext: Error starting the context, marking it as stopped
org.apache.kafka.common.KafkaException: Failed to construct kafka consumer
        at org.apache.kafka.clients.consumer.KafkaConsumer.&amp;lt;init&amp;gt;(KafkaConsumer.java:702)
        at org.apache.kafka.clients.consumer.KafkaConsumer.&amp;lt;init&amp;gt;(KafkaConsumer.java:557)
        at org.apache.kafka.clients.consumer.KafkaConsumer.&amp;lt;init&amp;gt;(KafkaConsumer.java:540)
        at org.apache.spark.streaming.kafka010.Subscribe.onStart(ConsumerStrategy.scala:83)
        at org.apache.spark.streaming.kafka010.DirectKafkaInputDStream.consumer(DirectKafkaInputDStream.scala:75)
        at org.apache.spark.streaming.kafka010.DirectKafkaInputDStream.start(DirectKafkaInputDStream.scala:243)
        at org.apache.spark.streaming.DStreamGraph$$anonfun$start$5.apply(DStreamGraph.scala:49)
        at org.apache.spark.streaming.DStreamGraph$$anonfun$start$5.apply(DStreamGraph.scala:49)
        at scala.collection.parallel.mutable.ParArray$ParArrayIterator.foreach_quick(ParArray.scala:143)
        at scala.collection.parallel.mutable.ParArray$ParArrayIterator.foreach(ParArray.scala:136)
        at scala.collection.parallel.ParIterableLike$Foreach.leaf(ParIterableLike.scala:972)
        at scala.collection.parallel.Task$$anonfun$tryLeaf$1.apply$mcV$sp(Tasks.scala:49)
        at scala.collection.parallel.Task$$anonfun$tryLeaf$1.apply(Tasks.scala:48)
        at scala.collection.parallel.Task$$anonfun$tryLeaf$1.apply(Tasks.scala:48)
        at scala.collection.parallel.Task$class.tryLeaf(Tasks.scala:51)
        at scala.collection.parallel.ParIterableLike$Foreach.tryLeaf(ParIterableLike.scala:969)
        at scala.collection.parallel.AdaptiveWorkStealingTasks$WrappedTask$class.compute(Tasks.scala:152)
        at scala.collection.parallel.AdaptiveWorkStealingForkJoinTasks$WrappedTask.compute(Tasks.scala:443)
        at scala.concurrent.forkjoin.RecursiveAction.exec(RecursiveAction.java:160)
        at scala.concurrent.forkjoin.ForkJoinTask.doExec(ForkJoinTask.java:260)
        at scala.concurrent.forkjoin.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1339)
        at scala.concurrent.forkjoin.ForkJoinPool.runWorker(ForkJoinPool.java:1979)
        at scala.concurrent.forkjoin.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:107)
        at ... run in separate thread using org.apache.spark.util.ThreadUtils ... ()
        at org.apache.spark.streaming.StreamingContext.liftedTree1$1(StreamingContext.scala:578)
        at org.apache.spark.streaming.StreamingContext.start(StreamingContext.scala:572)
        at af.spark2.tests.Main$.main(Main.scala:34)
        at af.spark2.tests.Main.main(Main.scala)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:498)
        at org.apache.spark.deploy.SparkSubmit$.org$apache$spark$deploy$SparkSubmit$$runMain(SparkSubmit.scala:738)
        at org.apache.spark.deploy.SparkSubmit$.doRunMain$1(SparkSubmit.scala:187)
        at org.apache.spark.deploy.SparkSubmit$.submit(SparkSubmit.scala:212)
        at org.apache.spark.deploy.SparkSubmit$.main(SparkSubmit.scala:126)
        at org.apache.spark.deploy.SparkSubmit.main(SparkSubmit.scala)
&lt;FONT color="#FF0000"&gt;&lt;STRONG&gt;Caused by: org.apache.kafka.common.KafkaException: java.lang.SecurityException: java.io.IOException: ./jaas.conf (No such file or directory)&lt;/STRONG&gt;&lt;/FONT&gt;
        at org.apache.kafka.common.network.SaslChannelBuilder.configure(SaslChannelBuilder.java:86)
        at org.apache.kafka.common.network.ChannelBuilders.create(ChannelBuilders.java:70)
        at org.apache.kafka.clients.ClientUtils.createChannelBuilder(ClientUtils.java:83)
        at org.apache.kafka.clients.consumer.KafkaConsumer.&amp;lt;init&amp;gt;(KafkaConsumer.java:623)
        at org.apache.kafka.clients.consumer.KafkaConsumer.&amp;lt;init&amp;gt;(KafkaConsumer.java:557)
        at org.apache.kafka.clients.consumer.KafkaConsumer.&amp;lt;init&amp;gt;(KafkaConsumer.java:540)
        at org.apache.spark.streaming.kafka010.Subscribe.onStart(ConsumerStrategy.scala:83)
        at org.apache.spark.streaming.kafka010.DirectKafkaInputDStream.consumer(DirectKafkaInputDStream.scala:75)
        at org.apache.spark.streaming.kafka010.DirectKafkaInputDStream.start(DirectKafkaInputDStream.scala:243)
        at org.apache.spark.streaming.DStreamGraph$$anonfun$start$5.apply(DStreamGraph.scala:49)
        at org.apache.spark.streaming.DStreamGraph$$anonfun$start$5.apply(DStreamGraph.scala:49)
        at scala.collection.parallel.mutable.ParArray$ParArrayIterator.foreach_quick(ParArray.scala:143)
        at scala.collection.parallel.mutable.ParArray$ParArrayIterator.foreach(ParArray.scala:136)
        at scala.collection.parallel.ParIterableLike$Foreach.leaf(ParIterableLike.scala:972)
        at scala.collection.parallel.Task$$anonfun$tryLeaf$1.apply$mcV$sp(Tasks.scala:49)
        at scala.collection.parallel.Task$$anonfun$tryLeaf$1.apply(Tasks.scala:48)
        at scala.collection.parallel.Task$$anonfun$tryLeaf$1.apply(Tasks.scala:48)
                at scala.collection.parallel.Task$class.tryLeaf(Tasks.scala:51)
        at scala.collection.parallel.ParIterableLike$Foreach.tryLeaf(ParIterableLike.scala:969)
        at scala.collection.parallel.AdaptiveWorkStealingTasks$WrappedTask$class.compute(Tasks.scala:152)
        at scala.collection.parallel.AdaptiveWorkStealingForkJoinTasks$WrappedTask.compute(Tasks.scala:443)
        at scala.concurrent.forkjoin.RecursiveAction.exec(RecursiveAction.java:160)
        at scala.concurrent.forkjoin.ForkJoinTask.doExec(ForkJoinTask.java:260)
        at scala.concurrent.forkjoin.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1339)
        at scala.concurrent.forkjoin.ForkJoinPool.runWorker(ForkJoinPool.java:1979)
        at scala.concurrent.forkjoin.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:107)
Caused by: java.lang.SecurityException: java.io.IOException: ./jaas.conf (No such file or directory)
        at sun.security.provider.ConfigFile$Spi.&amp;lt;init&amp;gt;(ConfigFile.java:137)
        at sun.security.provider.ConfigFile.&amp;lt;init&amp;gt;(ConfigFile.java:102)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
        at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
        at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
        at java.lang.Class.newInstance(Class.java:442)
        at javax.security.auth.login.Configuration$2.run(Configuration.java:255)
        at javax.security.auth.login.Configuration$2.run(Configuration.java:247)
        at java.security.AccessController.doPrivileged(Native Method)
        at javax.security.auth.login.Configuration.getConfiguration(Configuration.java:246)
        at org.apache.kafka.common.security.JaasUtils.jaasConfig(JaasUtils.java:47)
        at org.apache.kafka.common.security.kerberos.KerberosLogin.getServiceName(KerberosLogin.java:297)
        at org.apache.kafka.common.security.kerberos.KerberosLogin.configure(KerberosLogin.java:103)
        at org.apache.kafka.common.security.authenticator.LoginManager.&amp;lt;init&amp;gt;(LoginManager.java:45)
        at org.apache.kafka.common.security.authenticator.LoginManager.acquireLoginManager(LoginManager.java:68)
        at org.apache.kafka.common.network.SaslChannelBuilder.configure(SaslChannelBuilder.java:78)
        ... 25 more
Caused by: java.io.IOException: ./jaas.conf (No such file or directory)
        at sun.security.provider.ConfigFile$Spi.ioException(ConfigFile.java:666)
        at sun.security.provider.ConfigFile$Spi.init(ConfigFile.java:262)
        at sun.security.provider.ConfigFile$Spi.&amp;lt;init&amp;gt;(ConfigFile.java:135)
        ... 41 more&lt;/PRE&gt;&lt;P&gt;&lt;BR /&gt;&lt;BR /&gt;Is it possible to connect to kerberized Kafka from SparkStreaming using Cloudera's CDH, KAFKA and SPARK2 or Spark1.6 from CDH?&lt;BR /&gt;&lt;BR /&gt;Best Regards&lt;BR /&gt;&lt;BR /&gt;&lt;/P&gt;</description>
    <pubDate>Fri, 16 Sep 2022 11:46:34 GMT</pubDate>
    <dc:creator>Isegrim</dc:creator>
    <dc:date>2022-09-16T11:46:34Z</dc:date>
    <item>
      <title>Unable to connect to kerberized Kafka 2.1 (0.10) from Spark 2.1</title>
      <link>https://community.cloudera.com/t5/Archives-of-Support-Questions/Unable-to-connect-to-kerberized-Kafka-2-1-0-10-from-Spark-2/m-p/56017#M63055</link>
      <description>&lt;P&gt;Hello,&lt;BR /&gt;&lt;BR /&gt;I have CDH 5.10.1, SPARK2.1, KAFKA2.1 (0.10) - all of them kerberized.&lt;BR /&gt;I was able to connect to Kafka from kafka CLI tools, as described here:&lt;BR /&gt;&lt;A href="https://www.cloudera.com/documentation/kafka/latest/topics/kafka_security.html#concept_lcn_4mm_s5" target="_blank"&gt;https://www.cloudera.com/documentation/kafka/latest/topics/kafka_security.html#concept_lcn_4mm_s5&lt;/A&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;STRONG&gt;But I can not connect as Spark2 Consumer with Direct Stream method, because jaas.conf can't be finden, despite it is properly distributed to HDFS while loading by spark2-submit.&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;I was trying those 2 documentations:&lt;BR /&gt;&lt;A href="https://spark.apache.org/docs/latest/streaming-kafka-0-10-integration.html" target="_blank"&gt;https://spark.apache.org/docs/latest/streaming-kafka-0-10-integration.html&lt;/A&gt;&lt;BR /&gt;&lt;A href="https://www.cloudera.com/documentation/spark2/latest/topics/spark2_kafka.html" target="_blank"&gt;https://www.cloudera.com/documentation/spark2/latest/topics/spark2_kafka.html&lt;/A&gt;&lt;BR /&gt;&lt;BR /&gt;My code simply counts elements in a batch of a stream.&lt;BR /&gt;linking in build.sbt:&lt;/P&gt;&lt;PRE&gt;isegrim@sparkgw:~/kafka-spark-krb-test$ cat build.sbt
import sbt.Keys.scalaVersion

lazy val root = (project in file(".")).
        settings(
                name := "kafka-spark-krb-test",
                version := "1.0",
                scalaVersion := "2.11.8"
)

resolvers += "Cloudera" at "https://repository.cloudera.com/artifactory/cloudera-repos/"

lazy val spark = Seq(
        "spark-core",
        "spark-streaming",
        "spark-streaming-kafka-0-10"
).map("org.apache.spark" %% _ % "2.1.0.cloudera1" % "provided")
libraryDependencies ++= spark

assemblyMergeStrategy in assembly := {
        case PathList("META-INF", xs @ _*) =&amp;gt; MergeStrategy.discard
        case x =&amp;gt;
                val oldStrategy = (assemblyMergeStrategy in assembly).value
                oldStrategy(x)
}

assemblyOption in assembly := (assemblyOption in assembly).value.copy(includeScala = false)
assemblyJarName in assembly := "kafka-spark-krb-test.jar"&lt;/PRE&gt;&lt;P&gt;&lt;BR /&gt;&lt;BR /&gt;Main code&lt;BR /&gt;&lt;BR /&gt;&lt;/P&gt;&lt;PRE&gt;isegrim@sparkgw:~/kafka-spark-krb-test$ cat src/main/scala/af/spark2/tests/Main.scala&lt;BR /&gt;package af.spark2.tests

import org.apache.spark._
import org.apache.spark.streaming._
import org.apache.spark.streaming.kafka010._
import org.apache.spark.streaming.kafka010.LocationStrategies.PreferConsistent
import org.apache.spark.streaming.kafka010.ConsumerStrategies.Subscribe
import org.apache.kafka.common.serialization.StringDeserializer

object Main {
  val streamingBatchInterval = Seconds(60)
  val streamingTimeout = 432000000

  def main(args: Array[String]): Unit = {
    val conf = new SparkConf()
    val ssc = new StreamingContext(conf, streamingBatchInterval)
    ssc.checkpoint("spark/checkpoint/kafka-spark-krb-test")
    val kafkaParams = Map[String,Object](
      "bootstrap.servers" -&amp;gt; "broker1:9092,broker2:9092",
      "security.protocol" -&amp;gt; "SASL_PLAINTEXT",
      "sasl.kerberos.service.name" -&amp;gt; "kafka",
      "key.deserializer" -&amp;gt; classOf[StringDeserializer],
      "value.deserializer" -&amp;gt; classOf[StringDeserializer],
      "group.id" -&amp;gt; "kafka-spark-krb-test",
      "auto.offset.reset" -&amp;gt; "latest",
      "enable.auto.commit" -&amp;gt; (false: java.lang.Boolean)
    )
    val topics = Array("mytopic")
    val messages = KafkaUtils.createDirectStream[String, String](ssc, PreferConsistent, Subscribe[String, String](topics, kafkaParams))
    messages.count().print()

    ssc.start()
    ssc.awaitTerminationOrTimeout(streamingTimeout)
    ssc.stop(true, true)
  }
}&lt;/PRE&gt;&lt;P&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;I start the app like this:&lt;/P&gt;&lt;PRE&gt;isegrim@sparkgw:~/kafka-spark-krb-test$ SPARK_KAFKA_VERSION=0.10 spark2-submit \&lt;BR /&gt;--master yarn \&lt;BR /&gt;--deploy-mode client \&lt;BR /&gt;--queue myqueue \&lt;BR /&gt;--keytab /home/isegrim/isegrim.keytab \&lt;BR /&gt;--principal isegrim@TEST.COM \&lt;BR /&gt;--files /home/isegrim/jaas.conf#jaas.conf \&lt;BR /&gt;--driver-java-options "-Djava.security.auth.login.config=./jaas.conf" \&lt;BR /&gt;--conf "spark.executor.extraJavaOptions=-Djava.security.auth.login.config=./jaas.conf" \&lt;BR /&gt;target/scala-2.11/kafka-spark-krb-test.jar&lt;/PRE&gt;&lt;P&gt;&lt;BR /&gt;&lt;BR /&gt;Some log + error I get:&lt;/P&gt;&lt;PRE&gt;...
17/06/16 17:16:38 INFO yarn.Client: Uploading resource file:/home/isegrim/.keytab/isegrim.keytab -&amp;gt; hdfs:///user/isegrim/.sparkStaging/application_1497619292421_0004/isegrim.keytab
&lt;FONT color="#339966"&gt;&lt;STRONG&gt;17/06/16 17:16:39 INFO yarn.Client: Uploading resource file:/home/isegrim/jaas.conf#jaas.conf -&amp;gt; hdfs:///user/isegrim/.sparkStaging/application_1497619292421_0004/jaas.conf&lt;/STRONG&gt;&lt;/FONT&gt;
17/06/16 17:16:39 INFO yarn.Client: Uploading resource file:/tmp/spark-f1a0e9a4-0c13-495a-a904-2dd1ca1303c1/__spark_conf__1583085251581943316.zip -&amp;gt; hdfs:///user/isegrim/.sparkStaging/application_1497619292421_0004/__spark_conf__.zip
17/06/16 17:16:39 INFO spark.SecurityManager: Changing view acls to: isegrim
17/06/16 17:16:39 INFO spark.SecurityManager: Changing modify acls to: isegrim
...
17/06/16 17:16:49 INFO dstream.ForEachDStream: Slide time = 60000 ms
17/06/16 17:16:49 INFO dstream.ForEachDStream: Storage level = Serialized 1x Replicated
17/06/16 17:16:49 INFO dstream.ForEachDStream: Checkpoint interval = null
17/06/16 17:16:49 INFO dstream.ForEachDStream: Remember interval = 60000 ms
17/06/16 17:16:49 INFO dstream.ForEachDStream: Initialized and validated org.apache.spark.streaming.dstream.ForEachDStream@1b485c8b
17/06/16 17:16:49 INFO consumer.ConsumerConfig: ConsumerConfig values:
        metric.reporters = []
        metadata.max.age.ms = 300000
        partition.assignment.strategy = [org.apache.kafka.clients.consumer.RangeAssignor]
        reconnect.backoff.ms = 50
        sasl.kerberos.ticket.renew.window.factor = 0.8
        max.partition.fetch.bytes = 1048576
        bootstrap.servers = [broker1:9092, broker2:9092]
        ssl.keystore.type = JKS
        enable.auto.commit = false
        sasl.mechanism = GSSAPI
        interceptor.classes = null
        exclude.internal.topics = true
        ssl.truststore.password = null
        client.id =
        ssl.endpoint.identification.algorithm = null
        max.poll.records = 2147483647
        check.crcs = true
        request.timeout.ms = 40000
        heartbeat.interval.ms = 3000
        auto.commit.interval.ms = 5000
        receive.buffer.bytes = 65536
        ssl.truststore.type = JKS
        ssl.truststore.location = null
        ssl.keystore.password = null
        fetch.min.bytes = 1
        send.buffer.bytes = 131072
        value.deserializer = class org.apache.kafka.common.serialization.StringDeserializer
        group.id = kafka-spark-krb-test
        retry.backoff.ms = 100
        ssl.secure.random.implementation = null
        sasl.kerberos.kinit.cmd = /usr/bin/kinit
        sasl.kerberos.service.name = kafka
        sasl.kerberos.ticket.renew.jitter = 0.05
        ssl.trustmanager.algorithm = PKIX
        ssl.key.password = null
        fetch.max.wait.ms = 500
        sasl.kerberos.min.time.before.relogin = 60000
        connections.max.idle.ms = 540000
        session.timeout.ms = 30000
        metrics.num.samples = 2
        key.deserializer = class org.apache.kafka.common.serialization.StringDeserializer
        ssl.protocol = TLS
        ssl.provider = null
        ssl.enabled.protocols = [TLSv1.2, TLSv1.1, TLSv1]
        ssl.keystore.location = null
        ssl.cipher.suites = null
        security.protocol = SASL_PLAINTEXT
        ssl.keymanager.algorithm = SunX509
        metrics.sample.window.ms = 30000
        auto.offset.reset = latest

17/06/16 17:16:49 ERROR streaming.StreamingContext: Error starting the context, marking it as stopped
org.apache.kafka.common.KafkaException: Failed to construct kafka consumer
        at org.apache.kafka.clients.consumer.KafkaConsumer.&amp;lt;init&amp;gt;(KafkaConsumer.java:702)
        at org.apache.kafka.clients.consumer.KafkaConsumer.&amp;lt;init&amp;gt;(KafkaConsumer.java:557)
        at org.apache.kafka.clients.consumer.KafkaConsumer.&amp;lt;init&amp;gt;(KafkaConsumer.java:540)
        at org.apache.spark.streaming.kafka010.Subscribe.onStart(ConsumerStrategy.scala:83)
        at org.apache.spark.streaming.kafka010.DirectKafkaInputDStream.consumer(DirectKafkaInputDStream.scala:75)
        at org.apache.spark.streaming.kafka010.DirectKafkaInputDStream.start(DirectKafkaInputDStream.scala:243)
        at org.apache.spark.streaming.DStreamGraph$$anonfun$start$5.apply(DStreamGraph.scala:49)
        at org.apache.spark.streaming.DStreamGraph$$anonfun$start$5.apply(DStreamGraph.scala:49)
        at scala.collection.parallel.mutable.ParArray$ParArrayIterator.foreach_quick(ParArray.scala:143)
        at scala.collection.parallel.mutable.ParArray$ParArrayIterator.foreach(ParArray.scala:136)
        at scala.collection.parallel.ParIterableLike$Foreach.leaf(ParIterableLike.scala:972)
        at scala.collection.parallel.Task$$anonfun$tryLeaf$1.apply$mcV$sp(Tasks.scala:49)
        at scala.collection.parallel.Task$$anonfun$tryLeaf$1.apply(Tasks.scala:48)
        at scala.collection.parallel.Task$$anonfun$tryLeaf$1.apply(Tasks.scala:48)
        at scala.collection.parallel.Task$class.tryLeaf(Tasks.scala:51)
        at scala.collection.parallel.ParIterableLike$Foreach.tryLeaf(ParIterableLike.scala:969)
        at scala.collection.parallel.AdaptiveWorkStealingTasks$WrappedTask$class.compute(Tasks.scala:152)
        at scala.collection.parallel.AdaptiveWorkStealingForkJoinTasks$WrappedTask.compute(Tasks.scala:443)
        at scala.concurrent.forkjoin.RecursiveAction.exec(RecursiveAction.java:160)
        at scala.concurrent.forkjoin.ForkJoinTask.doExec(ForkJoinTask.java:260)
        at scala.concurrent.forkjoin.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1339)
        at scala.concurrent.forkjoin.ForkJoinPool.runWorker(ForkJoinPool.java:1979)
        at scala.concurrent.forkjoin.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:107)
        at ... run in separate thread using org.apache.spark.util.ThreadUtils ... ()
        at org.apache.spark.streaming.StreamingContext.liftedTree1$1(StreamingContext.scala:578)
        at org.apache.spark.streaming.StreamingContext.start(StreamingContext.scala:572)
        at af.spark2.tests.Main$.main(Main.scala:34)
        at af.spark2.tests.Main.main(Main.scala)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:498)
        at org.apache.spark.deploy.SparkSubmit$.org$apache$spark$deploy$SparkSubmit$$runMain(SparkSubmit.scala:738)
        at org.apache.spark.deploy.SparkSubmit$.doRunMain$1(SparkSubmit.scala:187)
        at org.apache.spark.deploy.SparkSubmit$.submit(SparkSubmit.scala:212)
        at org.apache.spark.deploy.SparkSubmit$.main(SparkSubmit.scala:126)
        at org.apache.spark.deploy.SparkSubmit.main(SparkSubmit.scala)
&lt;FONT color="#FF0000"&gt;&lt;STRONG&gt;Caused by: org.apache.kafka.common.KafkaException: java.lang.SecurityException: java.io.IOException: ./jaas.conf (No such file or directory)&lt;/STRONG&gt;&lt;/FONT&gt;
        at org.apache.kafka.common.network.SaslChannelBuilder.configure(SaslChannelBuilder.java:86)
        at org.apache.kafka.common.network.ChannelBuilders.create(ChannelBuilders.java:70)
        at org.apache.kafka.clients.ClientUtils.createChannelBuilder(ClientUtils.java:83)
        at org.apache.kafka.clients.consumer.KafkaConsumer.&amp;lt;init&amp;gt;(KafkaConsumer.java:623)
        at org.apache.kafka.clients.consumer.KafkaConsumer.&amp;lt;init&amp;gt;(KafkaConsumer.java:557)
        at org.apache.kafka.clients.consumer.KafkaConsumer.&amp;lt;init&amp;gt;(KafkaConsumer.java:540)
        at org.apache.spark.streaming.kafka010.Subscribe.onStart(ConsumerStrategy.scala:83)
        at org.apache.spark.streaming.kafka010.DirectKafkaInputDStream.consumer(DirectKafkaInputDStream.scala:75)
        at org.apache.spark.streaming.kafka010.DirectKafkaInputDStream.start(DirectKafkaInputDStream.scala:243)
        at org.apache.spark.streaming.DStreamGraph$$anonfun$start$5.apply(DStreamGraph.scala:49)
        at org.apache.spark.streaming.DStreamGraph$$anonfun$start$5.apply(DStreamGraph.scala:49)
        at scala.collection.parallel.mutable.ParArray$ParArrayIterator.foreach_quick(ParArray.scala:143)
        at scala.collection.parallel.mutable.ParArray$ParArrayIterator.foreach(ParArray.scala:136)
        at scala.collection.parallel.ParIterableLike$Foreach.leaf(ParIterableLike.scala:972)
        at scala.collection.parallel.Task$$anonfun$tryLeaf$1.apply$mcV$sp(Tasks.scala:49)
        at scala.collection.parallel.Task$$anonfun$tryLeaf$1.apply(Tasks.scala:48)
        at scala.collection.parallel.Task$$anonfun$tryLeaf$1.apply(Tasks.scala:48)
                at scala.collection.parallel.Task$class.tryLeaf(Tasks.scala:51)
        at scala.collection.parallel.ParIterableLike$Foreach.tryLeaf(ParIterableLike.scala:969)
        at scala.collection.parallel.AdaptiveWorkStealingTasks$WrappedTask$class.compute(Tasks.scala:152)
        at scala.collection.parallel.AdaptiveWorkStealingForkJoinTasks$WrappedTask.compute(Tasks.scala:443)
        at scala.concurrent.forkjoin.RecursiveAction.exec(RecursiveAction.java:160)
        at scala.concurrent.forkjoin.ForkJoinTask.doExec(ForkJoinTask.java:260)
        at scala.concurrent.forkjoin.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1339)
        at scala.concurrent.forkjoin.ForkJoinPool.runWorker(ForkJoinPool.java:1979)
        at scala.concurrent.forkjoin.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:107)
Caused by: java.lang.SecurityException: java.io.IOException: ./jaas.conf (No such file or directory)
        at sun.security.provider.ConfigFile$Spi.&amp;lt;init&amp;gt;(ConfigFile.java:137)
        at sun.security.provider.ConfigFile.&amp;lt;init&amp;gt;(ConfigFile.java:102)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
        at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
        at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
        at java.lang.Class.newInstance(Class.java:442)
        at javax.security.auth.login.Configuration$2.run(Configuration.java:255)
        at javax.security.auth.login.Configuration$2.run(Configuration.java:247)
        at java.security.AccessController.doPrivileged(Native Method)
        at javax.security.auth.login.Configuration.getConfiguration(Configuration.java:246)
        at org.apache.kafka.common.security.JaasUtils.jaasConfig(JaasUtils.java:47)
        at org.apache.kafka.common.security.kerberos.KerberosLogin.getServiceName(KerberosLogin.java:297)
        at org.apache.kafka.common.security.kerberos.KerberosLogin.configure(KerberosLogin.java:103)
        at org.apache.kafka.common.security.authenticator.LoginManager.&amp;lt;init&amp;gt;(LoginManager.java:45)
        at org.apache.kafka.common.security.authenticator.LoginManager.acquireLoginManager(LoginManager.java:68)
        at org.apache.kafka.common.network.SaslChannelBuilder.configure(SaslChannelBuilder.java:78)
        ... 25 more
Caused by: java.io.IOException: ./jaas.conf (No such file or directory)
        at sun.security.provider.ConfigFile$Spi.ioException(ConfigFile.java:666)
        at sun.security.provider.ConfigFile$Spi.init(ConfigFile.java:262)
        at sun.security.provider.ConfigFile$Spi.&amp;lt;init&amp;gt;(ConfigFile.java:135)
        ... 41 more&lt;/PRE&gt;&lt;P&gt;&lt;BR /&gt;&lt;BR /&gt;Is it possible to connect to kerberized Kafka from SparkStreaming using Cloudera's CDH, KAFKA and SPARK2 or Spark1.6 from CDH?&lt;BR /&gt;&lt;BR /&gt;Best Regards&lt;BR /&gt;&lt;BR /&gt;&lt;/P&gt;</description>
      <pubDate>Fri, 16 Sep 2022 11:46:34 GMT</pubDate>
      <guid>https://community.cloudera.com/t5/Archives-of-Support-Questions/Unable-to-connect-to-kerberized-Kafka-2-1-0-10-from-Spark-2/m-p/56017#M63055</guid>
      <dc:creator>Isegrim</dc:creator>
      <dc:date>2022-09-16T11:46:34Z</dc:date>
    </item>
    <item>
      <title>Re: Unable to connect to kerberized Kafka 2.1 (0.10) from Spark 2.1</title>
      <link>https://community.cloudera.com/t5/Archives-of-Support-Questions/Unable-to-connect-to-kerberized-Kafka-2-1-0-10-from-Spark-2/m-p/56026#M63056</link>
      <description>Try taking off the './'. Distributing to the executors will place it in the working directory of each one and can be referenced as such.&lt;BR /&gt;&lt;BR /&gt;The annotation of './' means to run a file not read a file.</description>
      <pubDate>Fri, 16 Jun 2017 18:06:51 GMT</pubDate>
      <guid>https://community.cloudera.com/t5/Archives-of-Support-Questions/Unable-to-connect-to-kerberized-Kafka-2-1-0-10-from-Spark-2/m-p/56026#M63056</guid>
      <dc:creator>mbigelow</dc:creator>
      <dc:date>2017-06-16T18:06:51Z</dc:date>
    </item>
    <item>
      <title>Re: Unable to connect to kerberized Kafka 2.1 (0.10) from Spark 2.1</title>
      <link>https://community.cloudera.com/t5/Archives-of-Support-Questions/Unable-to-connect-to-kerberized-Kafka-2-1-0-10-from-Spark-2/m-p/56044#M63057</link>
      <description>&lt;P&gt;Hi,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Thanks for your hint mbigelow.&lt;/P&gt;&lt;P&gt;As far as I know Unix PATH is just a PATH, and starting it by ./ or without has the same meaning - in this case current working directory, which is application hdfs directory.&lt;/P&gt;&lt;P&gt;But I've tried your sugestion, and it inspired me for furter investigation:&lt;/P&gt;&lt;PRE&gt;isegrim@sparkgw:~/kafka-spark-krb-test$ SPARK_KAFKA_VERSION=0.10 spark2-submit \
--master yarn \
--deploy-mode client \
--queue myqueue \
--keytab /home/isegrim/isegrim.keytab \
--principal isegrim@TEST.COM \
--files /home/isegrim/jaas.conf#jaas.conf \
--driver-java-options "-Djava.security.auth.login.config=jaas.conf" \
--conf "spark.driver.extraJavaOptions=-Djava.security.auth.login.config=jaas.conf" \
--conf "spark.executor.extraJavaOptions=-Djava.security.auth.login.config=jaas.conf" \
target/scala-2.11/kafka-spark-krb-test.jar&lt;/PRE&gt;&lt;P&gt;But it gave me the same log+error (without './' in error message) &lt;span class="lia-unicode-emoji" title=":confused_face:"&gt;😕&lt;/span&gt;&lt;/P&gt;&lt;PRE&gt;Caused by: java.io.IOException: jaas.conf (No such file or directory)&lt;/PRE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I've tried hdfs path to jaas.conf but it also failed:&lt;/P&gt;&lt;PRE&gt;hdfs dfs -put jaas.conf

SPARK_KAFKA_VERSION=0.10 spark2-submit \
--master yarn \
--deploy-mode client \
--queue myqueue \
--keytab /home/isegrim/isegrim.keytab \
--principal isegrim@TEST.COM \
--files /home/isegrim/jaas.conf#jaas.conf \
--driver-java-options "-Djava.security.auth.login.config=hdfs:///user/isegrim/jaas.conf" \
--conf "spark.driver.extraJavaOptions=-Djava.security.auth.login.config=hdfs:///user/isegrim/jaas.conf" \
--conf "spark.executor.extraJavaOptions=-Djava.security.auth.login.config=hdfs:///user/isegrim/jaas.conf" \
target/scala-2.11/kafka-spark-krb-test.jar&lt;/PRE&gt;&lt;P&gt;Error:&lt;/P&gt;&lt;PRE&gt;Caused by: java.io.IOException: hdfs:///user/isegrim/jaas.conf (No such file or directory)&lt;/PRE&gt;&lt;P&gt;But I've put the file into each worker's temp and now it looks like executors read it from local operating system storage, rather then from hdfs application CWD (--files flag):&lt;/P&gt;&lt;PRE&gt;for i in {1..4}; do
    scp jaas.conf worker${i}:/tmp/jaas.conf
done

SPARK_KAFKA_VERSION=0.10 spark2-submit \
--master yarn \
--deploy-mode client \
--queue myqueue \
--keytab /home/isegrim/isegrim.keytab \
--principal isegrim@TEST.COM \
--files /home/isegrim/jaas.conf#jaas.conf \
--driver-java-options "-Djava.security.auth.login.config=/tmp/jaas.conf" \
--conf "spark.driver.extraJavaOptions=-Djava.security.auth.login.config=/tmp/jaas.conf" \
--conf "spark.executor.extraJavaOptions=-Djava.security.auth.login.config=/tmp/jaas.conf" \
target/scala-2.11/kafka-spark-krb-test.jar&lt;/PRE&gt;&lt;P&gt;This is the new error:&lt;/P&gt;&lt;PRE&gt;...
17/06/17 00:06:28 ERROR streaming.StreamingContext: Error starting the context, marking it as stopped
org.apache.kafka.common.KafkaException: Failed to construct kafka consumer
        at org.apache.kafka.clients.consumer.KafkaConsumer.&amp;lt;init&amp;gt;(KafkaConsumer.java:702)
...
        at org.apache.spark.deploy.SparkSubmit.main(SparkSubmit.scala)
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
        at org.apache.kafka.common.network.SaslChannelBuilder.configure(SaslChannelBuilder.java:86)
...&lt;/PRE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;FONT size="4" color="#339966"&gt;&lt;STRONG&gt;So I've distributed the keytab to every worker node's operating system's local filesystem and I've change the path from app HDFS CWD to OS local filesystem and it works!&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;PRE&gt;$ cat jaas.conf
KafkaClient {
com.sun.security.auth.module.Krb5LoginModule required
useKeyTab=true
keyTab="/home/isegrim/isegrim.keytab"
principal="isegrim@TEST.COM";
};&lt;/PRE&gt;&lt;P&gt;Distribute new jaas.conf and keytab:&lt;/P&gt;&lt;PRE&gt;$ for i in {1..4}; do
    scp isegrim.keytab worker${i}:/home/isegrim/isegrim.keytab
done
$ for i in {1..4}; do
    scp jaas.conf worker${i}:/tmp/jaas.conf
done&lt;/PRE&gt;&lt;P&gt;Run the app and check logs:&lt;/P&gt;&lt;PRE&gt;SPARK_KAFKA_VERSION=0.10 spark2-submit \
--master yarn \
--deploy-mode client \
--queue myqueue \
--keytab /home/isegrim/isegrim.keytab \
--principal isegrim@TEST.COM \
--files /home/isegrim/jaas.conf#jaas.conf \
--driver-java-options "-Djava.security.auth.login.config=/tmp/jaas.conf" \
--conf "spark.driver.extraJavaOptions=-Djava.security.auth.login.config=/tmp/jaas.conf" \
--conf "spark.executor.extraJavaOptions=-Djava.security.auth.login.config=/tmp/jaas.conf" \
target/scala-2.11/kafka-spark-krb-test.jar

...
&lt;STRONG&gt;17/06/17 00:23:17 INFO streaming.StreamingContext: StreamingContext started&lt;/STRONG&gt;
...
-------------------------------------------
Time: 1497651840000 ms
-------------------------------------------
58&lt;/PRE&gt;&lt;P&gt;Thank you mbigelow for inspiration!&lt;/P&gt;</description>
      <pubDate>Fri, 16 Jun 2017 22:52:45 GMT</pubDate>
      <guid>https://community.cloudera.com/t5/Archives-of-Support-Questions/Unable-to-connect-to-kerberized-Kafka-2-1-0-10-from-Spark-2/m-p/56044#M63057</guid>
      <dc:creator>Isegrim</dc:creator>
      <dc:date>2017-06-16T22:52:45Z</dc:date>
    </item>
    <item>
      <title>Re: Unable to connect to kerberized Kafka 2.1 (0.10) from Spark 2.1</title>
      <link>https://community.cloudera.com/t5/Archives-of-Support-Questions/Unable-to-connect-to-kerberized-Kafka-2-1-0-10-from-Spark-2/m-p/56046#M63058</link>
      <description>I'll be... it doesn't care about './'. I have only ever seen that used to launch scripts/executables without specifying the interpreter.&lt;BR /&gt;&lt;BR /&gt;Anyway, I am glad you got it worked out but something is not working as it should.&lt;BR /&gt;&lt;BR /&gt;The --files option should upload any files listed, also files in the working directory when spark-submit was ran, and any --jars should all be distributed across the cluster, either local or hdfs. You should not have to distributed files manually beforehand. Especially the keytab file as a compromise to it can be devastating.&lt;BR /&gt;&lt;BR /&gt;The keytab file should have been copied to the AM containers working directory. I think the issue there was that you listed the original full path in the jaas.conf.&lt;BR /&gt;&lt;BR /&gt;From the Cloudera Spark docs:&lt;BR /&gt;&lt;BR /&gt;"The full path to the file that contains the keytab for the principal. This keytab is copied to the node running the ApplicationMaster using the Secure Distributed Cache, for periodically renewing the login tickets and the delegation tokens. For information on setting up the principal and keytab, see Configuring a Cluster with Custom Kerberos Principalsand Spark Authentication."&lt;BR /&gt;&lt;BR /&gt;&lt;A href="https://www.cloudera.com/documentation/enterprise/5-5-x/topics/sg_spark_auth.html" target="_blank"&gt;https://www.cloudera.com/documentation/enterprise/5-5-x/topics/sg_spark_auth.html&lt;/A&gt;</description>
      <pubDate>Fri, 16 Jun 2017 23:15:40 GMT</pubDate>
      <guid>https://community.cloudera.com/t5/Archives-of-Support-Questions/Unable-to-connect-to-kerberized-Kafka-2-1-0-10-from-Spark-2/m-p/56046#M63058</guid>
      <dc:creator>mbigelow</dc:creator>
      <dc:date>2017-06-16T23:15:40Z</dc:date>
    </item>
    <item>
      <title>Re: Unable to connect to kerberized Kafka 2.1 (0.10) from Spark 2.1</title>
      <link>https://community.cloudera.com/t5/Archives-of-Support-Questions/Unable-to-connect-to-kerberized-Kafka-2-1-0-10-from-Spark-2/m-p/56063#M63059</link>
      <description>&lt;P&gt;No, no, jaas.conf before distributing it to worker nodes was:&lt;/P&gt;&lt;PRE&gt;KafkaClient {
com.sun.security.auth.module.Krb5LoginModule required
useKeyTab=true
keyTab="./isegrim.keytab"
principal="isegrim@TEST.COM";
};&lt;/PRE&gt;&lt;P&gt;And after I have figured out, that KafkaConsumer constructor looks for jaas.conf and keytab in executor container's local machine's filesystem instead HDFS application CWD, then I've distributed keytab to linux FS and I've changed path to keytab from ./isegrim.keytab (I thought it will be local to Spark application HDFS CWD) to /home/isegrim/isegrim.keytab.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I agree that this should not work like this. Now I have to take care of distributing and securing keytab and jaas.conf files.&lt;BR /&gt;&lt;BR /&gt;I think it must be something with the Kafka Consumer constructor, which don't know that those files are distributed with the application in it's CWD on HDFS and tries to look for them in local machine's filesystem.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;If I will have more time I'll try to check the code of those constructors to figure it out.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Sat, 17 Jun 2017 09:42:44 GMT</pubDate>
      <guid>https://community.cloudera.com/t5/Archives-of-Support-Questions/Unable-to-connect-to-kerberized-Kafka-2-1-0-10-from-Spark-2/m-p/56063#M63059</guid>
      <dc:creator>Isegrim</dc:creator>
      <dc:date>2017-06-17T09:42:44Z</dc:date>
    </item>
    <item>
      <title>Re: Unable to connect to kerberized Kafka 2.1 (0.10) from Spark 2.1</title>
      <link>https://community.cloudera.com/t5/Archives-of-Support-Questions/Unable-to-connect-to-kerberized-Kafka-2-1-0-10-from-Spark-2/m-p/56549#M63060</link>
      <description>&lt;P&gt;&lt;SPAN&gt;The &amp;nbsp;problem is, with "--deploy-mode client" it looks for jaas.conf in current directory by default. When you use the &amp;nbsp;"--deploy-mode cluster" it works, but you have to pass keytab (and rename it with #) in "--files" too.&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;</description>
      <pubDate>Tue, 27 Jun 2017 09:48:37 GMT</pubDate>
      <guid>https://community.cloudera.com/t5/Archives-of-Support-Questions/Unable-to-connect-to-kerberized-Kafka-2-1-0-10-from-Spark-2/m-p/56549#M63060</guid>
      <dc:creator>Araths</dc:creator>
      <dc:date>2017-06-27T09:48:37Z</dc:date>
    </item>
    <item>
      <title>Re: Unable to connect to kerberized Kafka 2.1 (0.10) from Spark 2.1</title>
      <link>https://community.cloudera.com/t5/Archives-of-Support-Questions/Unable-to-connect-to-kerberized-Kafka-2-1-0-10-from-Spark-2/m-p/58742#M63061</link>
      <description>&lt;P&gt;So, summarizing:&lt;/P&gt;&lt;P&gt;When starting Spark with --deploy-mode client one must distribute Jaas file and keytab to every machine.&lt;/P&gt;&lt;P&gt;When starting Spark with&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;--deploy-mode cluster one must distribute Jaas file and keytab with --files and/or --keytab.&lt;/P&gt;</description>
      <pubDate>Fri, 11 Aug 2017 10:16:34 GMT</pubDate>
      <guid>https://community.cloudera.com/t5/Archives-of-Support-Questions/Unable-to-connect-to-kerberized-Kafka-2-1-0-10-from-Spark-2/m-p/58742#M63061</guid>
      <dc:creator>Isegrim</dc:creator>
      <dc:date>2017-08-11T10:16:34Z</dc:date>
    </item>
  </channel>
</rss>

