Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/6.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
Amazon web services 使用计算优化实例在ASW上运行Spark应用程序时出现的问题_Amazon Web Services_Apache Spark_Mapreduce_Rdd_Distributed Computing - Fatal编程技术网

Amazon web services 使用计算优化实例在ASW上运行Spark应用程序时出现的问题

Amazon web services 使用计算优化实例在ASW上运行Spark应用程序时出现的问题,amazon-web-services,apache-spark,mapreduce,rdd,distributed-computing,Amazon Web Services,Apache Spark,Mapreduce,Rdd,Distributed Computing,您好,我正在比较Spark算法在两个不同集群上的性能。一个计算能力更强,一个内存效率更高 集群1有5个AWS实例节点c4.xlarge,其中有4个vCPU和 7.5GB的主存储器 集群2有5个AWS实例节点r4.xlarge,具有4个vCPU和30.5Gib的主内存 我的代码分为13个阶段,但实际上只有最后5个阶段是我需要考虑性能的阶段。以下五点: 上图显示了在集群2上运行my code的各个阶段的统计信息(内存效率)。您可以看到阶段11和13需要几分钟,因为flatMap和map分别对列表执

您好,我正在比较Spark算法在两个不同集群上的性能。一个计算能力更强,一个内存效率更高

  • 集群1有5个AWS实例节点c4.xlarge,其中有4个vCPU和 7.5GB的主存储器
  • 集群2有5个AWS实例节点r4.xlarge,具有4个vCPU和30.5Gib的主内存
  • 我的代码分为13个阶段,但实际上只有最后5个阶段是我需要考虑性能的阶段。以下五点:

    上图显示了在集群2上运行my code的各个阶段的统计信息(内存效率)。您可以看到阶段11和13需要几分钟,因为flatMapmap分别对列表执行一些繁重的顺序工作

    由于作业阶段11和13在每个分区中是顺序进行的,我希望使用集群1在这两个阶段中获得更好的性能(计算效率),但在集群1上运行时,我实际得到的是,最后3个阶段只运行32个任务(因此只有32个分区),运行时间较慢,每个阶段多2分钟

    我意识到只有3个执行器在运行,所以实际上4个实例中只有3个在处理我的问题。然后我就这样提交了应用程序:

    spark-submit --master yarn --deploy-mode cluster —-num—executors 4 --executor-cores 4 --class myclass myjar myparams
    
    因此,我认为强制执行者的数量为
    --num executors 4
    将强制第四个节点获得一个执行者,但无需执行。那也没用。只有3个执行者在3个实例上处于活动状态

    我敢肯定问题出在这个。您不认为顺序阶段应该在集群1上运行得更快吗?根据您的说法,集群1的主内存是否不足


    感谢您与我合作寻找答案。

    在EMR上优化使用资源需要对配置进行一些调整,还需要了解纱线的工作原理。我强烈建议阅读Cloudera,了解如何使用Thread优化应用程序

    无论如何,在这种特殊情况下,之所以只看到3个执行器而不是4个执行器,是因为您指定了每个执行器应该有4个核心(带有标志
    --executor cores 4
    )。由于每个辅助进程上只有4个可用核,而且纱线在其中一个辅助进程上使用1个核来运行application manager,因此实际上只有3个辅助进程(4个可用核)和1个辅助进程(3个可用核)。具有3个可用内核的辅助进程无法运行需要4个内核的执行程序,因此该辅助进程上根本没有说明执行程序。这就剩下3名遗嘱执行人

    无论如何,上面提到的博客文章详细描述了这一点:)

    哦,至于哪种类型的集群运行得更快,您必须对其进行测试。我遵循你的理论思维,但我早就放弃了预测哪种类型的集群更适合某项特定任务的尝试。事实是,除非完全理解Spark是如何创建其执行计划的,否则本质上你们只是在猜测。我建议您测试不同的实例类型,并使用Ganglia来监控集群如何利用不同的资源