-1
私はApache sparkをデータソースMySQLと共に使用しようとしています。私は1つのマスターと1つのスレーブノードを持つクラスタがあり、両方とも8 GBのRAMと2コアを持っています。スパークシェルを使用してスパークするSQLクエリを提出していますが、そのテーブルはです。私はそのテーブルにによってグループを実行しています。 MySQLが5.2秒であり、クエリを実行しているときにスパークを使用すると、時刻は21秒です。なぜこうなった?なぜsparkはまだmysqlよりも遅いのですか?
partitionColumn、upperBound、lowerBound、およびnumofPartitionsなどの設定を変更していますが、変更はまだありません。
1,2,4コアを使用してクエリを実行しようとしましたが、スパークがかかる時間は同じ21秒です。
この問題は、MySQLデータベースが1台のマシン上にあるために発生し、 すべてのスパークノードがその1台のマシンにデータを照会しようとしていますか?
この問題を解決する手助けがありますか?
私は、クエリにしようとしていた上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を使用してクエリのパフォーマンスを測定しています。 –