2017-07-28 53 views
-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() 

すべてのヘルプは、最も理解されるであろう。

おかげ

+1

データがRAMにない場合、Sparkは計算を実行する前にそれをプルする必要があります。したがって、ネットワークIOがボトルネックになる可能性があります。また、どのようにクエリのパフォーマンスを測定しているのか、クエリに関すること、データの分布についてもわからないので、ここではあまりお手伝いできません。 – eliasah

+0

あなたのデータに関するいくつかのコードと情報を共有することを検討してください!あなたは具体的な解決策を得られないかもしれませんが、おそらく私はいくつかの指針であなたを助けることができます。 – eliasah

+0

@eliasah私はスパークWeb UIを使用してクエリのパフォーマンスを測定しています。 –

答えて

関連する問題