我设置了EC2
r3.8xlarge (32 cores, 244G RAM)
。
在我的Spark
应用程序中,我正在使用来自DataBrick的S3
从Spark-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核会不会更快?
答案 0 :(得分:0)
Well spark不是Windows操作系统,它从一开始就能以最大可能的容量运行,您需要根据您的使用进行调整。
现在你只是直言不讳地说要启动并在一个32核心的节点上处理我的东西。这不是Spark的好处。它是一个分布式系统,假设在多节点集群上运行,这是它最有效的地方。
原因很简单,即使您使用的是32核,IO问题又如何呢? 因为现在你使用了let,如果它运行了30个执行程序,那么就是从同一个磁盘读取32个进程。
你指定了32个核心,执行器内存怎么样? 两台机器都有相同的ram,你正在测试它。
如果数据非常小且很多开销,那么您现在已经具体指定了您需要32个分区。理想情况下,除非您明确知道自己在做什么,或者正在执行重复性任务,否则不应指定分区,并且您知道数据将始终完全相似。
如果你正确调整它,使用32核心的火花确实比基本上在一个核心上运行的“本地”工作得快。