簡體   English   中英

調整Spark,設置執行程序和內存驅動程序以讀取大型csv文件

[英]Tune Spark, set executors and memory driver for reading large csv file

我想知道如何選擇最佳設置來運行我的Spark Job 基本上,我只是將一個較大的csv文件讀入DataFrame並計算一些字符串出現的次數。

輸入文件超過500 GB。 火花作業似乎太慢了。

終端進度欄

[Stage1:=======>                      (4174 + 50) / 18500]

NumberCompletedTasks: (4174)大約需要一個小時。

NumberActiveTasks: (50),我相信可以通過設置進行控制。 --conf spark.dynamicAllocation.maxExecutors=50 (嘗試使用不同的值)。

TotalNumberOfTasks: (18500),為什么要解決此問題? 這是什么意思,它僅與文件大小有關嗎? 由於我只讀很少的邏輯即可讀取csv ,如何優化Spark Job?

我也嘗試更改:

 --executor-memory 10g 
 --driver-memory 12g 

任務數取決於源RDD的分區數,在您要從HDFS讀取的情況下,塊大小決定分區數,因此任務數就不會取決於執行程序數,如果您想要增加/減少需要更改分區的任務數,在您的情況下,您需要在讀取時覆蓋HDFS配置的min / maxSplit大小,對於現有的RDD,我們可以使用分區/合並來執行相同的操作。

分區數=任務數。 如果您有18500個分區,那么spark將運行18500個任務來處理這些任務。

您是在讀取文件並對其進行過濾嗎? 您執行任何廣泛轉換嗎? 如果執行寬轉換,則結果RDD中的分區數由屬性“ spark.sql.shuffle.partitions”控制。 如果將其設置為18500,那么您得到的RDD將具有18500分區,結果是18500任務。

其次,spark.dynamicAllocation.maxExecutors代表啟用了動態分配的執行程序數量的上限。 據我所知,您有5個節點,每個節點10個執行者[總共50個執行者],每個執行者1個核心[如果您在YARN中運行,則默認每個執行者1個核心]。

要更快地執行工作,請執行以下操作:如果可能,請通過屬性spark.sql.shuffle.partitions減少shuffle分區的數量,並增加每個執行程序的核心數[建議每個執行程序5個核心]。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM