![](/img/trans.png)
[英]Optimal value of spark.sql.shuffle.partitions for a Spark batch Job reading from Kafka
[英]What should be the optimal value for spark.sql.shuffle.partitions or how do we increase partitions when using Spark SQL?
我正在使用 Spark SQL 實際上hiveContext.sql()
它使用 group by 查詢,我hiveContext.sql()
了 OOM 問題。 因此,考慮將spark.sql.shuffle.partitions
值從默認值 200 增加到 1000,但這spark.sql.shuffle.partitions
。
我相信這個分區將共享數據 shuffle 負載,所以更多的分區可以容納更少的數據。 我是 Spark 的新手。 我正在使用 Spark 1.4.0 並且我有大約 1TB 的未壓縮數據可以使用hiveContext.sql()
group by查詢進行處理。
如果您的 shuffle 內存spark.sql.shuffle.partitions
,請嘗試將spark.sql.shuffle.partitions
設置為 2001。
當分區數大於 2000 時,Spark 使用不同的數據結構進行 shuffle 記賬:
private[spark] object MapStatus {
def apply(loc: BlockManagerId, uncompressedSizes: Array[Long]): MapStatus = {
if (uncompressedSizes.length > 2000) {
HighlyCompressedMapStatus(loc, uncompressedSizes)
} else {
new CompressedMapStatus(loc, uncompressedSizes)
}
}
...
我真的希望他們能讓你獨立配置它。
順便說一下,我在 Cloudera 幻燈片中找到了這些信息。
好的,所以我認為您的問題更普遍。 它不是 Spark SQL 特有的,它是 Spark 的一個普遍問題,它會忽略您在文件很少時告訴它的分區數。 Spark 的分區數似乎與 HDFS 上的文件數相同,除非您調用repartition
。 所以調用repartition
應該可以工作,但需要注意的是會引起一些不必要的洗牌。
不久前我提出了這個問題,但仍然沒有得到很好的答案:(
這實際上取決於您的數據和查詢,如果 Spark 必須加載 1Tb,那么您的設計就有問題。
使用超級 Web UI 查看 DAG,這意味着 Spark 如何將您的 SQL 查詢轉換為作業/階段和任務。
有用的指標是“輸入”和“隨機播放”。
CLUSTER BY
功能,按數據分區工作另外,OOM 可能會發生在您的驅動程序上嗎?
-> 這是另一個問題,驅動程序會在最后收集您想要的數據。 如果您詢問太多數據,驅動程序將 OOM,嘗試限制您的查詢,或編寫另一個表(Spark 語法CREATE TABLE ...AS
)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.