这看起来非常简单。我有一个集群,我可以选择最大数量的执行程序,每个执行程序的内核,每个执行程序的RAM,驱动程序内核,驱动程序RAM ......这些超参数应该对我的计算速度产生影响......
似乎我应该能够在嵌套循环中调整这些参数,例如
for (i in c(2L,4L)) for (j in c(2L,4L)) for (k in c('2g','4g')) {
t0<-Sys.time()
config$spark.driver.cores <- i
config$spark.executor.cores <- j
config$spark.executor.memory <- k
sparkR.session(...,config=config)
mysample<-sql('Select address1,address2,zip FROM MYDATA')
doCalc<-dapply(mysample,...,schema=myOutputSchema)
head(collect(doCalc),10)
print(Sys.time()-t0)
sparkR.stop()
}
这在循环外部没有问题。但是在循环内部,集群总是无法响应并且总是在初始阶段失败:
[Stage 0:> (0 + 4) / 205]
18/06/13 18:39:55 WARN TaskSetManager: Lost task 1.0 in stage 0.0 (TID 1, hw09.mycluster.com, executor 1):
java.net.SocketTimeoutException: Accept timed out at java.net.PlainSocketImpl.socketAccept(Native Method)
它再次尝试,并且在多个阶段失败......我们如何调整SparkR工作?似乎R API for Spark中的一个严重失败使得这一切变得不可能。
答案 0 :(得分:0)
显然,HDP 2.6中的Spark 2.0和2.1中存在一个错误,其中用于管理Spark和SparkR API之间的消息传递的daemon.R
文件未正确部署到工作节点。
尽管已废弃master=yarn-client
的警告消息,但这正是应该用来防止API管理不当的参数。