首页 > 解决方案 > Spark 通过安全的 YARN Hadoop 集群实现安全性

问题描述

我有一个配置了 Kerberos 的 Hadoop 3.0 集群。一切正常,YARN 也启动了。

现在我希望在它之上添加 Spark 并充分利用 Hadoop 和安全性。为此,我使用了Spark 2.3 的二进制发行版并修改了以下内容。

spark-env.sh

YARN_CONF_DIR,设置为我的 Hadoop 配置文件和所在的core-site.xml文件hdfs-site.xmlyarn-site.xml

spark-defaults.conf

spark.master                yarn
spark.submit.deployMode     cluster
spark.authenticate          true
spark.yarn.principal        mysparkprincipal
spark.yarn.keytab           mykeytabfile

如果我在使用 YARN 时理解正确,密钥会自动生成,我不需要手动设置spark.authenticate.secret.

我遇到的问题是工人抱怨钥匙:

java.lang.IllegalArgumentException: A secret key must be specified via the spark.authenticate.secret config

我在日志中也没有任何迹象表明 Spark 正在使用 YARN 或尝试对我的 hdfs 卷做任何事情。这几乎就像 Hadoop 配置文件被完全忽略了。我已经阅读了有关 YARN 和 Spark 安全性的文档,但对我来说不是很清楚。

我的问题是:

编辑/添加:

查看源代码后,异常来自未为 Spark 启用的 SASL,所以我不明白。

我的 Hadoop 启用了 SSL(数据机密性),并且由于我给 Spark 我的服务器配置,如果 Hadoop 的配置启用了它,它可能需要用于 Spark 的 SSL。

到目前为止,我对一切都很困惑。

例外是:

java.lang.IllegalArgumentException: A secret key must be specified via the spark.authenticate.secret config
    at org.apache.spark.SecurityManager$$anonfun$getSecretKey$4.apply(SecurityManager.scala:510)
    at org.apache.spark.SecurityManager$$anonfun$getSecretKey$4.apply(SecurityManager.scala:510)
    at scala.Option.getOrElse(Option.scala:121)
    at org.apache.spark.SecurityManager.getSecretKey(SecurityManager.scala:509)
    at org.apache.spark.SecurityManager.getSecretKey(SecurityManager.scala:551)
    at org.apache.spark.network.sasl.SparkSaslClient$ClientCallbackHandler.handle(SparkSaslClient.java:137)
    at com.sun.security.sasl.digest.DigestMD5Client.processChallenge(DigestMD5Client.java:337)
    at com.sun.security.sasl.digest.DigestMD5Client.evaluateChallenge(DigestMD5Client.java:220)
    at org.apache.spark.network.sasl.SparkSaslClient.response(SparkSaslClient.java:98)
    at org.apache.spark.network.sasl.SaslClientBootstrap.doBootstrap(SaslClientBootstrap.java:71)
    at org.apache.spark.network.crypto.AuthClientBootstrap.doSaslAuth(AuthClientBootstrap.java:115)
    at org.apache.spark.network.crypto.AuthClientBootstrap.doBootstrap(AuthClientBootstrap.java:74)
    at org.apache.spark.network.client.TransportClientFactory.createClient(TransportClientFactory.java:257)
    at org.apache.spark.network.client.TransportClientFactory.createClient(TransportClientFactory.java:187)
    at org.apache.spark.rpc.netty.NettyRpcEnv.createClient(NettyRpcEnv.scala:198)
    at org.apache.spark.rpc.netty.Outbox$$anon$1.call(Outbox.scala:194)
    at org.apache.spark.rpc.netty.Outbox$$anon$1.call(Outbox.scala:190)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
    at java.lang.Thread.run(Thread.java:748)

标签: apache-sparkhadoophdfshadoop-yarnkerberos

解决方案


推荐阅读