在EC2上运行Spark,只使用一个Executor(应该更多)

时间:2016-11-25 10:03:22

标签: java amazon-web-services apache-spark amazon-ec2

我使用Spark提供的脚本设置了一个带有两个m1.large(应该有两个核心,对吧?)实例的Spark集群。 经过几天解决多个问题后,我终于设法在EC2上运行了我的第一个Spark算法。

可悲的是,我很快意识到,我的算法的运行时没有按照我在spark提交脚本中配置的执行程序的数量进行扩展。运行时保持不变,即使我将--master [1]更改为--master [2]。如果我在本地机器上执行此操作,运行时会发生显着变化,因此问题不应该与算法有关,我猜...

在查看Spark UI之后,我的怀疑被证明是正确的,即使我告诉脚本使用更多,但整个时间只使用了一个执行程序。

我从S3读取数据如下:JavaRDD logData = sc.textFile(“s3n:// id:secret@danielssparkbucket/testFolder/file.csv”)。cache();“

我的spark-submit脚本调用如下所示:sudo / root / spark / bin / spark-submit --class“SimpleApp”--verbose --master local [2] --num-executors 2 --executor-核心2 /home/ec2-user/simple-project-1.0.jar

我将RDD手动拆分为4个分区。

有人知道出了什么问题吗?并且有人可以告诉我,--master local [2]设置了什么,与--num-executors 2和--executor-cores 2的区别在哪里?

问候, 丹尼尔

1 个答案:

答案 0 :(得分:1)

--master local[2]表示你将使用2个带有驱动程序/执行程序的线程(PROCESS_LOCAL)进行1个Spark进程。此外,它意味着只有一个执行者,因为每个执行者都被设计为一个单独的过程。

使用--master local[2]时,不使用这些参数:

  

- num-executors 2和--executor-cores 2;

如果您有多个节点 - 您可以设置Spark Standalone Cluster - cluster-launch-scripts