Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache spark 添加更多工作节点时引发性能问题_Apache Spark_Amazon Emr - Fatal编程技术网

Apache spark 添加更多工作节点时引发性能问题

Apache spark 添加更多工作节点时引发性能问题,apache-spark,amazon-emr,Apache Spark,Amazon Emr,我对Spark是新手。当工作节点的数量增加时,我面临性能问题。为了研究这个问题,我在spark shell上尝试了一些示例代码 我创建了一个带有2个工作节点(m3.xlarge)的AmazonAWSEMR。我在主节点上的spark shell上使用了以下代码 var df = sqlContext.range(0,6000000000L).withColumn("col1",rand(10)).withColumn("col2",rand(20)) df.selectExpr("id","col

我对Spark是新手。当工作节点的数量增加时,我面临性能问题。为了研究这个问题,我在spark shell上尝试了一些示例代码

我创建了一个带有2个工作节点(m3.xlarge)的AmazonAWSEMR。我在主节点上的spark shell上使用了以下代码

var df = sqlContext.range(0,6000000000L).withColumn("col1",rand(10)).withColumn("col2",rand(20))
df.selectExpr("id","col1","col2","if(id%2=0,1,0) as key").groupBy("key").agg(avg("col1"),avg("col2")).show()
这段代码执行时没有任何问题,大约需要8分钟。但是,当我又添加了2个工作节点(m3.xlarge)并在主节点上使用spark shell执行相同的代码时,时间增加到了10分钟


问题是,我认为时间应该减少,不是一半,但我应该减少。我不知道为什么在增加工作节点时,同样的spark工作会花费更多的时间。知道为什么会这样吗?我遗漏了什么吗?

这不应该发生,但算法在分发时可能运行得较慢。 基本上,如果同步部分很重,那么使用2个节点进行同步比使用1个节点进行同步需要更多的时间。
我会先比较一些更简单的转换,运行一个更异步的代码,比如没有任何同步点(比如按键分组),然后看看是否会遇到同样的问题。

@z-star,是的,算法在分发时可能会变慢。我通过使用找到了解决方案。这使得spark只能使用所需的执行器。当静态分配在所有执行器上运行作业时,这增加了更多节点的执行时间。

您是在Thread模式还是独立模式下运行?@GlennieHellesSindholt我正在使用YARNHave您在capacity-scheduler.xml中设置了
Thread.scheduler.capacity.resource calculator=org.apache.hadoop.Thread.util.resource.DominantResourceCalculator
?否则,无论您使用
--num executors
标志指定什么,纱线将只使用两个执行器。这可以解释为什么执行时间大致相同。