我使用 Spark 提供的脚本设置了一个包含两个 m1.large(应该都有 2 个核心,对吧?)实例的 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 的区别在哪里?
您好, 丹尼尔
最佳答案
--master local[2]
意味着您将拥有 1 个 Spark 进程,使用 2 个线程,其中包含驱动程序/执行程序 (PROCESS_LOCAL
)。这也意味着只有 1 个执行程序,因为每个执行程序都被设计为一个单独的进程。
使用--master local[2]
时,不使用这些参数:
--num-executors 2 and --executor-cores 2;
如果您有多个节点 - 您可以设置 Spark 独立集群 - cluster-launch-scripts
关于java - 在EC2上运行Spark,只使用了一个Executor(应该更多),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40802261/