[英]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.