복붙노트

[HADOOP] 안전한 YARN Hadoop 클러스터로 스파크 지원 보안

HADOOP

안전한 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 보안에 대한 문서를 읽었지만 명확하지 않습니다.

내 질문은 :

편집 / 추가 :

소스 코드를 살펴본 후 SASL에서 예외가 발생했는데 Spark에서 사용할 수 없으므로 이해할 수 없습니다.

내 하둡에서 SSL을 사용하도록 설정하고 (데이터 기밀성) Spark에 서버 구성을 제공하므로 하둡 구성에서 사용하도록 설정 한 경우 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)

해결법

    from https://stackoverflow.com/questions/50042083/spark-enable-security-with-secure-yarn-hadoop-cluster by cc-by-sa and MIT license