我有一个EC2
与r3.8xlarge (32 cores, 244G RAM)
设置。
在我的Spark
应用程序中,我正在使用来自DataBrick的Spark-CSV
从S3
读取两个csv文件,每个csv有大约500万行。我是unionAll
这两个数据框,并在合并的数据框上运行dropDuplicates
。
但是当我有
val conf = new SparkConf()
.setMaster("local[32]")
.setAppName("Raw Ingestion On Apache Spark")
.set("spark.sql.shuffle.partitions", "32")
Spark比.setMaster("local")
慢
32核不是更快吗?
spark不是一个Windows操作系统,它从一开始就会以最大可能的容量工作,你需要根据你的使用情况对它进行调整。
现在你只是直截了当地说要在一个32核的节点上启动和处理我的东西。那不是星火的用处。它是一个分布式系统,应该在多节点集群上运行,这是它工作得最好的地方。
原因很简单,即使你使用32核,IO问题呢?因为现在你正在使用假设它运行了30个执行程序,那么就有32个进程从同一个磁盘读取数据。
您指定了32核,那么执行程序内存呢?在你测试的地方,两台机器有相同的ram吗?
您现在已经明确指定需要32个分区,如果数据非常小,则开销很大。理想情况下,您不应该指定分区,除非您明确知道要做什么,或者您正在执行重复的任务,并且您知道数据将始终完全相似。
如果你正确地调整它,32核的火花确实会比"本地"更快,这基本上是在一个核心上运行。