0
我想用一定数量的核心在纱线模式下运行spark-shell。Apache Spark:如何强制使用一定数量的内核?
我用的命令如下
spark-shell --num-executors 25 --executor-cores 4 --executor-memory 1G \
--driver-memory 1G --conf spark.yarn.executor.memoryOverhead=2048 --master yarn \
--conf spark.driver.maxResultSize=10G \
--conf spark.serializer=org.apache.spark.serializer.KyroSerializer \
-i input.scala
input.scala
看起来像这样
import java.io.ByteArrayInputStream
// Plaintext sum on 10M rows
def aggrMapPlain(iter: Iterator[Long]): Iterator[Long] = {
var res = 0L
while (iter.hasNext) {
val cur = iter.next
res = res + cur
}
List[Long](res).iterator
}
val pathin_plain = <some file>
val rdd0 = sc.sequenceFile[Int, Long](pathin_plain)
val plain_table = rdd0.map(x => x._2).cache
plain_table.count
0 to 200 foreach { i =>
println("Plain - 10M rows - Run "+i+":")
plain_table.mapPartitions(aggrMapPlain).reduce((x,y)=>x+y)
}
在执行此星火UI第一尖峰约40内核,然后稳定在26个核。
论this建议我改变了我的yarn-site.xml
<property>
<name>yarn.nodemanager.resource.cpu-vcores</name>
<value>101</value>
</property>
<property>
<name>yarn.scheduler.maximum-allocation-vcores</name>
<value>101</value>
</property>
<property>
<name>yarn.scheduler.maximum-allocation-mb</name>
<value>102400</value>
</property>
<property>
<name>yarn.nodemanager.resource.memory-mb</name>
<value>102400</value>
</property>
以下,但我还是不能强迫火花用100个内核,我需要为我做的标杆与早期测试。
我正在使用Apache Spark 1.6.1。 集群上的每个节点(包括驱动程序)都有16个内核和112GB的内存。 它们位于Azure(hdinsight群集)上。 2个驱动节点+7个工作节点。
谢谢你,我已经作出修改,以我的'能力scheduler.xml'但仍然没有改变。目前,为了解决这个问题,我将'--num-executors'设置为100,这让我在Spark UI中有101个内核。 – Sood
在做了一些修改并重写了一些我的代码之后,我设法解决了这个问题。我改变了很多东西,我不确定哪一个能够工作,但这肯定有帮助。 – Sood