我有一个配置了Kerberos的Hadoop 3.0群集。一切正常,YARN也开始了。
现在我希望在它上面添加Spark并充分利用Hadoop和安全性。为此,我使用binary distribution of Spark 2.3并修改了以下内容。
在spark-env.sh
:
YARN_CONF_DIR
,设置为我的Hadoop配置文件core-site.xml
,hdfs-site.xml
和yarn-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的安全性,但对我来说并不是很清楚。
我的问题是:
YARN_CONF_DIR
spark.yarn.access.hadoopFileSystems
LOCAL_DIRS
设置为HDFS,如果是,则语法是什么HADOOP_CONF_DIR
和YARN_CONF_DIR
?修改/添加:
查看源代码后,异常来自SASL,但没有为Spark启用,所以我不明白。
我的Hadoop已启用SSL(Data Confidentiality),因为我给Spark我的服务器配置,如果Hadoop的配置已启用,它可能需要Spark for Spark。
到目前为止,我对所有事情感到困惑。
spark.yarn.appMasterEnv
表示environment variables need to be set。但是哪一个?所有这些?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)