【发布时间】:2016-11-29 16:32:11
【问题描述】:
我有一些性能问题,我有几个问题要问你:) 我创建了一个 Scala 应用程序。该应用程序实时计算一些统计数据,例如会话......来自 cassandra 数据库。我使用 spray 作为 http 框架来创建我的 API。 我使用 spark 计算和映射来自 cassandra 的减少结果。 我使用 spark-submit 将我的应用程序放入 spark 中。
您认为这是直接在 spark 中开发应用程序的最佳方式吗?或者我应该在 spark 之外创建一个应用程序 (http),然后调用另一个应用程序仅用于使用 spark 计算来自 cassandra 的数据?
我有 3 台服务器(1 台 32G 8 核,1 台 64G,8 核,最后一台 64G 12 核)用于我的测试(我知道如果我的集群中有相同的服务器会更好,但我暂时不能)。 我使用独立模式。 我在 spark_default.sh 中的配置:
spark.deploy.defaultCores=28
spark.executor.memory=30G
目前它很慢,需要 9 秒 3 火花特质:
- 一个地图,一个排序和1个收集(需要4秒)
- 求和运算(耗时3s)
- 求和运算(耗时 2s)
只是为了这样的结果:
{"result":"success","list":[{"item":"1474236000","value":6},{"item":"1474239600","value":3},{ "item":"1474243200","value":3},{"item":"1474246800","value":3},{"item":"1474250400","value":3},{"item ":"1474254000","value":8},{"item":"1474257600","value":4},{"item":"1474261200","value":11},{"item": "1474264800","value":1},{"item":"1474268400","value":3},{"item":"1474272000","value":18},{"item":"1474275600 ","value":6},{"item":"1474279200","value":4},{"item":"1474282800","value":2},{"item":"1474286400", “价值”:2},{“项目”:“1474293600”,“价值”:4},{“项目”:“1474297200”,“价值”:10},{“项目”:“1474300800”,“价值” ":10},{"item":"1474304400","value":8},{"item":"1474308000","value":6},{"item":"1474311600","value": 8},{"item":"1474315200","value":4},{"item":"1474318800","value":4},{"item":"1474322400","value":6} ],"nb_session":137.0,"old_nb_session":161}
你对我有什么建议吗?我不明白为什么这么慢:(
非常感谢
【问题讨论】:
-
我认为您应该将 Spark 与应用程序分开。 Spark 应该像服务一样工作。 github.com/spark-jobserver/spark-jobserver 可能会有所帮助。
-
好吧,我个人认为它并不慢。这些延迟并不令人印象深刻,但 Spark 并不是真正为低延迟工作而设计的,而且您当然不会让它变得更容易。为什么不直接对抗 Cassandra?关于分离,这当然是个好主意。
标签: scala apache-spark cassandra