使用sparkR.session()

时间:2018-06-13 22:58:33

标签: r performance apache-spark cluster-computing sparkr

这看起来非常简单。我有一个集群,我可以选择最大数量的执行程序,每个执行程序的内核,每个执行程序的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中的一个严重失败使得这一切变得不可能。

1 个答案:

答案 0 :(得分:0)

显然,HDP 2.6中的Spark 2.0和2.1中存在一个错误,其中用于管理Spark和SparkR API之间的消息传递的daemon.R文件未正确部署到工作节点。

尽管已废弃master=yarn-client的警告消息,但这正是应该用来防止API管理不当的参数。