[英]Spark Job stuck between stages after join
我有一個火花作業,它連接 2 個數據集,執行一些轉換並減少數據以提供 output。 現在的輸入大小非常小(每個 200MB 數據集),但是在加入之后,正如您在 DAG 中看到的那樣,該作業被卡住並且永遠不會繼續進行階段 4。 我試着等了幾個小時,它給了 OOM 並顯示了第 4 階段的失敗任務。
職位代碼:
joinedDataset.groupBy("group_field")
.agg(collect_set("name").as("names")).select("names").as[List[String]]
.rdd. //converting to rdd since I need to use reduceByKey
.flatMap(entry => generatePairs(entry)) // this line generates pairs of words out of input text, so data size increases here
.map(pair => ((pair._1, pair._2), 1))
.reduceByKey(_+_)
.sortBy(entry => entry._2, ascending = false)
.coalesce(1)
僅供參考,我的集群有 3 個 16 核和 100GB RAM 的工作節點,3 個 16 核的執行器(為簡單起見,與機器的比例為 1:1)和 64GB memory 分配。
更新:原來我工作中生成的數據非常龐大。 我做了一些優化(戰略性地減少輸入數據並從處理中刪除了一些重復的字符串),現在工作在 3 小時內完成。 第 4 階段的輸入為 200MB,output 本身為 200GB。 它正確地使用了並行性,但它在洗牌時很糟糕。 我在這項工作中的 shuffle 溢出是 1825 GB(內存)和 181 GB(磁盤)。 有人可以幫助我減少洗牌溢出和工作持續時間嗎? 謝謝。
嘗試對 executor 進行初始排序,然后對它們進行歸約 + 排序
joinedDataset.groupBy("group_field")
.agg(collect_set("name").as("names")).select("names").as[List[String]]
.rdd. //converting to rdd since I need to use reduceByKey
.flatMap(entry => generatePairs(entry)) // this line generates pairs of words out of input text, so data size increases here
.map(pair => ((pair._1, pair._2), 1))
.sortBy(entry => entry._2, ascending = false) // Do a initial sort on executors
.reduceByKey(_+_)
.sortBy(entry => entry._2, ascending = false)
.coalesce(1)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.