使用Spark 1.6.1,驱动程序在随机端口上启动http文件服务器,工作人员应该访问这些服务器以获取jar。在我的设置中,当试图获取jar时,工作者从文件服务器获得401未授权。有关如何在驱动程序上的此文件服务器上配置授权的任何想法吗?
驱动程序代码在Scala中使用SparkConf来设置这样的jar:
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配置在所有三个:master,driver和slave,具有相同的秘密
在工人身上,我看到了这两个错误:
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放在slave的类路径上,而不是在驱动程序端执行setJars,那么这一切都有效。
任何帮助将不胜感激。谢谢!