#file #http #apache-spark #server #authorization
#файл #http #apache-spark #сервер #авторизация
Вопрос:
Используя Spark 1.6.1, драйвер запускает файловый сервер http на случайном порту, к которому рабочие должны получить доступ для извлечения jar. В моей настройке рабочие получают 401 несанкционированный с файлового сервера при попытке извлечения jar. Есть идеи о том, как авторизация настроена на этом файловом сервере в драйвере?
Код драйвера находится в Scala, использующем SparkConf для установки jars следующим образом:
val conf = new SparkConf()
.setAppName("myApp")
.setMaster(masterUrl)
.set("spark.task.maxFailures", "1")
.set("spark.executor.memory", sparkExecutorMemory)
.set("spark.metrics.conf.driver.sink.jmx.class", "org.apache.spark.metrics.sink.JmxSink")
.set("spark.authenticate", "true")
.set("spark.authenticate.secret", secret)
.setJars(jarsInClasspath)
val sc: SparkContext = SparkContext.getOrCreate(conf)
sc.parallelize(myCollection).map (myFunc).collect
spark.authenticate настроен на всех трех: главном, драйвере и подчиненных устройствах с одним и тем же секретом
На рабочем я вижу эти две ошибки:
Fetching http://11.163.0.285:51712/jars/libSetPluginTypes.jar with timestamp 1476207005509
java.net.ProtocolException: Server redirected too many times (20)
и через некоторое время это:
java.net.ConnectException: Cannot assign requested address
Просмотр tcpdump в драйвере:
<title>Error 401 Unauthorized</title>
</head>
<body>
<h2>HTTP ERROR: 401</h2>
<p>Problem accessing /jars/libSetPluginTypes.jar. Reason:
<pre> Unauthorized</pre></p>
<hr /><i><small>Powered by Jetty://</small></i>
Пожалуйста, обратите внимание, что все это работает, если я вручную помещаю jar в classpath подчиненного устройства, а не выполняю setJars на стороне драйвера.
Любая помощь будет оценена. Спасибо!