Spark通过安全的YARN Hadoop集群实现安全性

时间:2018-04-26 11:40:59

标签: apache-spark hadoop hdfs yarn kerberos

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

现在我希望在它上面添加Spark并充分利用Hadoop和安全性。为此,我使用binary distribution of Spark 2.3并修改了以下内容。

spark-env.sh

YARN_CONF_DIR,设置为我的Hadoop配置文件core-site.xmlhdfs-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正在使用YARN
  • 如果我只使用YARN_CONF_DIR
  • 中设置的服务器,是否需要设置spark.yarn.access.hadoopFileSystems
  • 最好将LOCAL_DIRS设置为HDFS,如果是,则语法是什么
  • 我是否同时需要HADOOP_CONF_DIRYARN_CONF_DIR

修改/添加:

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

我的Hadoop已启用SSL(Data Confidentiality),因为我给Spark我的服务器配置,如果Hadoop的配置已启用,它可能需要Spark for Spark。

到目前为止,我对所有事情感到困惑。

  • 它使用spark.yarn.appMasterEnv表示environment variables need to be set。但是哪一个?所有这些?
  • 它还说我需要在类路径上使用Hadoop CLIENT文件,但CLIENT文件中应该包含哪些属性? 我想我可以使用spark.hadoop.*属性替换XML文件,但Spark知道YARN群集在哪里需要哪些属性?
  • spark.authenticate.enableSaslEncryption设置为false似乎无效,因为例外仍为SparkSaslClient

例外是:

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)

0 个答案:

没有答案