我正在嘗試使用數據源MySQL的Apache Spark。我有一個集羣有1個主節點和1個從屬節點,都有8 GB RAM和2個核心我正在提交我的SQL查詢以使用spark-shell進行激發,並且該表有這麼多行。我正在執行組到該表上。和時間由MySQL是5.2secs和使用火花時,我正在執行查詢時間是21Secs。爲什麼發生這種情況?爲什麼spark還比mysql慢?
我還設置了一些配置,如partitionColumn,upperBound,lowerBound和numofPartitions但仍然沒有變化。
我也曾嘗試與執行使用1,2,4內核的查詢,但在火花所花費的時間是相同的21Secs。
發生這個問題是因爲我的MySQL數據庫在單臺機器上,而所有的火花節點都試圖將數據查詢到單臺機器上?
任何人都可以幫我解決這個問題嗎?
有一個名爲demo_call_stats上我試圖查詢表的數據庫是:
val jdbcDF = spark.read.format("jdbc").options(Map("url" -> "jdbc:mysql://192.168.0.31:3306/cmanalytics?user=root&password=","zeroDateTimeBehaviour"->"convertToNull", "dbtable" -> "cmanalytics.demo_call_stats", "fetchSize" -> "10000", "partitionColumn" -> "newpartition", "lowerBound" -> "0", "upperBound" -> "4", "numPartitions" -> "4")).load()
jdbcDF.createOrReplaceTempView("call_stats")
val sqlDF = sql("select Count(*), classification_id from call_stats where campaign_id = 77 group by classification_id")
sqlDF.show()
任何幫助將非常感激。
感謝
如果數據不在RAM中,Spark在執行計算之前需要將其拉出。因此,網絡IO可能是一個瓶頸。由於我不確定你是如何衡量你的查詢性能的,也不知道你的查詢是什麼,也不知道你的數據分佈,所以我們在這裏幫不了你的忙。 – eliasah
考慮共享一些代碼和一些關於你的數據的信息!你可能沒有得到一個具體的解決方案,但也許我可以幫助你一些指針。 – eliasah
@eliasah我正在測量使用火花Web UI的查詢性能。 –