我和r3.8xlarge (32 cores, 244G RAM)建立了一个EC2。
在我的Spark应用程序中,我使用Spark-CSV从DataBrick读取了两个csv文件,每个csv文件大约有500万行。我正在unionAll两个DataFrames,并在组合的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个内核不是更快吗?
发布于 2016-11-09 12:51:26
spark不是Windows操作系统,它从一开始就会以最大可能的容量工作,你需要根据自己的使用情况对其进行调整。
现在,您只是直截了当地说要在一个具有32个内核的节点上启动和处理我的东西。这不是Spark的优势所在。它是一个分布式系统,应该在多节点集群上运行,这是它工作得最好的地方。
原因很简单,即使你使用的是32核,IO问题又如何呢?因为你现在使用的是let's,如果它运行了30个执行器,那么就是32个进程从同一磁盘读取数据。
你指定了32核,那么执行器内存呢?两台机器有没有相同的内存,你测试的地方。
你现在已经明确指定你想要32个分区,如果数据非常小,这是很大的开销。理想情况下,你不应该指定分区,直到你明确知道你在做什么,或者你正在做重复性的任务,并且你知道数据总是完全相似的。
如果你调整正确,32核的spark确实会比基本上在一个核上运行的"local“运行得更快。
https://stackoverflow.com/questions/40496626
复制相似问题