Spark:master local [*]比master本地慢很多

时间:2016-11-08 21:21:34

标签: scala apache-spark apache-spark-sql spark-dataframe spark-csv

我设置了EC2 r3.8xlarge (32 cores, 244G RAM)

在我的Spark应用程序中,我正在使用来自DataBrick的S3Spark-CSV读取两个csv文件,每个csv有大约5百万行。我unionAll两个DataFrame并在组合的DataFrame上运行dropDuplicates

但是当我有的时候,

 val conf = new SparkConf()
            .setMaster("local[32]")
            .setAppName("Raw Ingestion On Apache Spark")
            .set("spark.sql.shuffle.partitions", "32")

Spark比.setMaster("local")

32核会不会更快?

1 个答案:

答案 0 :(得分:0)

Well spark不是Windows操作系统,它从一开始就能以最大可能的容量运行,您需要根据您的使用进行调整。

现在你只是直言不讳地说要启动并在一个32核心的节点上处理我的东西。这不是Spark的好处。它是一个分布式系统,假设在多节点集群上运行,这是它最有效的地方。

原因很简单,即使您使用的是32核,IO问题又如何呢? 因为现在你使用了let,如果它运行了30个执行程序,那么就是从同一个磁盘读取32个进程。

你指定了32个核心,执行器内存怎么样? 两台机器都有相同的ram,你正在测试它。

如果数据非常小且很多开销,那么您现在已经具体指定了您需要32个分区。理想情况下,除非您明确知道自己在做什么,或者正在执行重复性任务,否则不应指定分区,并且您知道数据将始终完全相似。

如果你正确调整它,使用32核心的火花确实比基本上在一个核心上运行的“本地”工作得快。