我有一個非常複雜的查詢,需要連接9個或更多的表,有一些'group by'表達式。這些表中的大多數具有幾乎相同的行數。這些表格也有一些列可以用作分區表的「關鍵」。如何讓Spark處理更大的數據集?
此前,該應用程序運行良好,但現在的數據集有3〜4倍的數據。我的測試表明,如果每個表的行數少於4,000,000,應用程序仍然可以很好地運行。但是,如果計數不止於此,應用程序將寫入數百TB的洗牌和應用程序停頓(無論我如何調整內存,分區,執行程序等)。實際數據可能只有幾十Gs。
我會認爲,如果分區工作正常,Spark不應該洗牌這麼多,並應該在每個節點上完成連接。令人費解的是,爲什麼Spark不那麼聰明呢?
我可以將數據集(使用上面提到的「關鍵字」)分成許多數據集,這些數據集可以獨立處理。但是這個負擔將會在我自己身上......它折扣了使用Spark的原因。還有哪些其他方法可以幫助?
我使用Spark 2.0 over Hadoop YARN。
你是如何調整分區的? –