apache-spark - 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.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 安全性的文档,但对我来说不是很清楚。
我的问题是:
- 我如何确定 Spark 正在使用 YARN
spark.yarn.access.hadoopFileSystems
如果我只使用设置的服务器,是否需要设置YARN_CONF_DIR
LOCAL_DIRS
最好设置为HDFS,如果是,语法是什么- 我需要两个
HADOOP_CONF_DIR
和YARN_CONF_DIR
吗?
编辑/添加:
查看源代码后,异常来自未为 Spark 启用的 SASL,所以我不明白。
我的 Hadoop 启用了 SSL(数据机密性),并且由于我给 Spark 我的服务器配置,如果 Hadoop 的配置启用了它,它可能需要用于 Spark 的 SSL。
到目前为止,我对一切都很困惑。
- 它说环境变量需要使用
spark.yarn.appMasterEnv
. 但是哪一个?他们全部? - 它还说它是我需要在类路径上具有的 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)
解决方案
推荐阅读
- scala - Spark,字符串到时间戳
- python - 有人可以请绘制此代码的所有递归调用。这是一棵树的前序遍历。由于这两个递归调用变得混乱
- c++ - MIDI 通道消息之间是否有优先级?
- wordpress - 为什么我的 .htaccess 重定向在测试期间返回 200 而不是 301?
- python - 如何解决 OSError [Errno2] no such file or directory
- php - 在 2 个不同页面中发送的表单数据
- python - pymssql - 从ini文件到带有反斜杠问题的变量的服务器名称
- ruby-on-rails - Rails ActiveStorage 夹具附件 - 没有这样的文件或目录 @ rb_sysopen
- cassandra - Cassandra:如何自动删除旧记录以避免磁盘空间不足?
- javascript - 有没有办法向具有特定类的所有 html 元素添加函数