Spark обеспечивает безопасность с помощью защищенного кластера YARN Hadoop - PullRequest
0 голосов
/ 26 апреля 2018

У меня есть кластер Hadoop 3.0, настроенный с использованием Kerberos. Все отлично работает и 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?

Редактировать / Добавить:

После просмотра исходного кода исключение составляет SASL, который не включен для Spark, поэтому я не понимаю.

В моем Hadoop включен SSL ( Конфиденциальность данных ), и, поскольку я предоставляю Spark конфигурацию моего сервера, возможно, для SSL требуется SSL для Spark, если в конфигурации для Hadoop он включен.

Пока я действительно запутался во всем.

  • В нем говорится, что переменные окружения должны быть установлены с использованием spark.yarn.appMasterEnv. Но какой? Все они?
  • Также говорится, что это файл Hadoop CLIENT, который мне нужно иметь на пути к классам, но какие свойства должны присутствовать в файле CLIENT? Я предполагаю, что могу заменить файлы XML, используя spark.hadoop.* свойства, но какие свойства необходимы 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)
...