0

我有一個EC2設置爲r3.8xlarge (32 cores, 244G RAM)Spark:本地主控[*]比本地主控慢很多

在我Spark的應用程序,我從S3使用Spark-CSV從DataBrick讀取兩個CSV文件,每個CSV有大約500萬行。我是unionAll這兩個DataFrame,並在組合的DataFrame上運行dropDuplicates

但是,當我有,

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

星火比.setMaster("local")

慢,那豈不是具有32個內核更快?

回答

0

好的spark不是Windows操作系統,它會從一開始就以最大可能的容量工作,您需要根據自己的使用情況對其進行調整。

現在你只是直言不諱地說,啓動和處理我的東西在一個節點與32個核心。這不是Spark的好處。這是一個假設在多節點集羣上運行的分佈式系統,也就是它最適合的地方。

原因很簡單,即使您使用的是32核,IO問題又如何? 因爲現在你使用的是,如果它已經運行了30個執行程序,那麼就是從同一個磁盤讀取32個進程。

你指定了32核,執行程序內存怎麼樣? 兩臺機器是否都有相同的內存,你在哪裏測試。

如果數據非常小,而且開銷很大,您現在已經明確指定需要32個分區。理想情況下,除非明確知道自己在做什麼,否則您不應指定分區,或者您正在執行重複性任務,並且您知道數據將始終保持完全相似。

如果你調整它正確的火花與32核心將確實工作比「本地」基本上運行在一個核心上更快。