我在本地部署中使用{sparklyr}
搞乱,即只有一个盒子,我让sparklyr启动所有内容。似乎在本地部署中只生成一个执行器,允许使用该机器的所有核心。当我进入spark_apply()
(使用具有多个值的group_by
arg)时,我发现只有一个核心被一个Rscript --slave
使用。这只是Spark的限制,即每个执行者一个Rscript,还是有某种方法可以让{sparklyr}
将工作分散到更多的工作人员身上?我上面的任何假设是否都不正确?
答案 0 :(得分:0)
这可能会晚一点。但是无论如何:
您可以通过首先设置在一台计算机上启动多名工作人员
SPARK_WORKER_INSTANCES=2
随后运行
$SPARK_HOME/sbin/start-master.sh
$SPARK_HOME/sbin/start-slave.sh spark://hostname:7077 --cores 2
这应该给您两个本地工人,每个工人有2个核心。然后,您可以继续从R
启动您的Sparklyr驱动程序cfg <- spark_config()
sc <- spark_connect(master = "spark://hostname:7077", config = cfg)
现在在运行spark_apply()
之前,请确保可以通过调用sdf_repartition()
来拥有比核心更多的分区。对我来说,在一台4核计算机(2个工人,每个核有2个内核)和一个由4个(或更多)分区组成的SDF上,spark_apply()
产生4个R会话。
我确实意识到这与您要求的不完全相同,因为您没有使用Sparklyr安装的spark实例。但是实际上,您只需要下载spark release并将$ SPARK_HOME指向下载spark的位置即可。