【问题标题】:spark-streaming kafka kerberos火花流卡夫卡 kerberos
【发布时间】:2023-03-19 10:34:02
【问题描述】:

我正在从事从 kafka 提取的 poc spark-streaming 工作。我可以对不安全的 kafka 0.10 集群使用相同的代码,但是当我切换到针对 ssl/kerberos ( hdp 2.5 ) 设置运行时,我遇到了一个异常:

Caused by: 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 com.sun.security.auth.module.Krb5LoginModule.promptForPass(Krb5LoginModule.java:940)
at com.sun.security.auth.module.Krb5LoginModule.attemptAuthentication(Krb5LoginModule.java:760)
at com.sun.security.auth.module.Krb5LoginModule.login(Krb5LoginModule.java:617)
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 javax.security.auth.login.LoginContext.invoke(LoginContext.java:755)
at javax.security.auth.login.LoginContext.access$000(LoginContext.java:195)
at javax.security.auth.login.LoginContext$4.run(LoginContext.java:682)
at javax.security.auth.login.LoginContext$4.run(LoginContext.java:680)
at java.security.AccessController.doPrivileged(Native Method)
at javax.security.auth.login.LoginContext.invokePriv(LoginContext.java:680)
at javax.security.auth.login.LoginContext.login(LoginContext.java:587)
at org.apache.kafka.common.security.authenticator.AbstractLogin.login(AbstractLogin.java:69)
at org.apache.kafka.common.security.kerberos.KerberosLogin.login(KerberosLogin.java:110)
at org.apache.kafka.common.security.authenticator.LoginManager.<init>(LoginManager.java:46)
at org.apache.kafka.common.security.authenticator.LoginManager.acquireLoginManager(LoginManager.java:68)
at org.apache.kafka.common.network.SaslChannelBuilder.configure(SaslChannelBuilder.java:78)
... 29 more

火花会话创建良好,但是当执行器启动以使用主题中的新内容时,我得到了上述异常。

提交代码比较简单:

spark-submit \
--master yarn \
--keytab ./bilsch.keytab \
--principal bilsch@HDP.SOME.ORG \
--files kafka_client_jaas.conf,bilsch.keytab \
--packages org.apache.spark:spark-streaming-kafka-0-10_2.11:2.0.2 \
--repositories http://repo.hortonworks.com/content/repositories/releases \
--num-executors 1 \
--class producer \
--driver-java-options "-Djava.security.auth.login.config=./kafka_client_jaas.conf -Dhdp.version=2.5.3.0-37" \
--conf "spark.executor.extraJavaOptions=-Djava.security.auth.login.config=./kafka_client_jaas.conf" \
streaming_0331_2.11-1.0.jar 2>&1 | tee out

如果有帮助,我会关注 michael-nolls spark-streaming with kafka 教程

不确定需要将什么传递给我尚未通过的执行程序,或者它可能只是一个 jaas 配置问题?

【问题讨论】:

  • 实际上至少部分是我自己弄清楚的。我不得不将 jaas 配置放到所有工作人员的主目录中(对 keytab 也是如此),这感觉真的很不对。我在这里缺少什么 - 我认为 spark-submit 的文件部分会将这些文件放入分布式缓存中,并使它们在集群上可供我使用(例如使用 ./foo.keytab )
  • 不——Spark使用 HDFS 将资源传递给执行器;它只传递一个 URL,执行程序可以在 HTTP 中从驱动程序下载资源。我猜目的是使用与 YARN、Mesos 或独立 Spark 相同的代码库。
  • 并且文件没有下载到当前工作目录——参见。 stackoverflow.com/questions/37055038/…

标签: apache-kafka spark-streaming spark-streaming-kafka


【解决方案1】:

尝试按照以下提供的步骤进行操作:-

  • 从 spark-submit 命令中删除 --keytab--principal,因为此信息已存在于 JAAS 配置中。
  • 运行kinit -kt bilsch.keytab bilsch@HDP.SOME.ORG,然后尝试运行 spark-submit 命令。
猜你喜欢
  • 1970-01-01
  • 2016-08-03
  • 2018-09-15
  • 2018-08-13
  • 2018-02-24
  • 2018-08-15
  • 1970-01-01
  • 2019-04-11
  • 1970-01-01
相关资源
最近更新 更多