2016-09-20 43 views
3

我有一些性能问题,我几乎没有问题:) 我创建了一个scala应用程序。此应用程序通过实时计算一些统计数据,如来自cassandra数据库的会话...。我使用喷雾作为http框架来创建我的API。 我使用spark来计算和映射从cassandra中减少的结果。 我把我的应用程序放在火花提交的spark中。火花上的应用程序网页?

您认为这是直接在火花中开发应用程序的最佳方式吗?或者我应该在spark之外创建一个应用程序(http),并调用其他应用程序仅用于使用spark从cassandra计算数据?我的测试(我知道它应该会更好,如果我在我的集​​群中有同样的服务器,但应该会更好,但是我应该更好一些)我暂时不能)。 我使用独立模式。 我在spark_default.sh配置:

spark.deploy.defaultCores=28 
spark.executor.memory=30G 

而此时它缓慢,它采取9秒用3火花TRAITEMENT:

  • 地图,sortby和1收集(采取4S)
  • 和操作(需要3秒)
  • 和操作(需要2秒)

只是像一个结果这个:

{“result”:“success”,“list”:[{“item”:“1474236000”,“value”:6},{“item”:“1474239600”,“value” :3},{ “项”: “1474243200”, “值”:3},{ “项”: “1474246800”, “值”:3},{ “项”: “1474250400”, “值”:3 },{ “项”: “1474254000”, “值”:8},{ “项”: “1474257600”, “值”:4},{ “项”: “1474261200”, “值”:11}, { “项”: “1474264800”, “值”:1},{ “项”: “1474268400”, “值”:3},{ “项”: “1474272000”, “值”:18},{”项 “:” 1474275600" , “值”:6},{ “项”: “1474279200”, “值”:4},{ “项”: “1474282800”, “值”:2},{ “项目” : “1474286400”, “值”:2},{ “项”: “1474293600”, “值”:4},{ “项”: “1474297200”, “值”:10},{ “项”:” 1474300800" , “值”:10},{ “项”: “1474304400”, “值”:8},{ “项”: “1474308000”, “值”:6},{ “项”: “1474311600” “值”:8},{ “项”: “1474315200”, “值”:4},{ “项”: “1474318800”, “值”:4},{ “项”: “1474322400”,”值 “:6}],” nb_session” :137.0,“old_nb_session”:161}

您对我有什么建议吗?我不明白为什么它这么慢:(

非常感谢

+0

我想你应该把Spark分开到应用程序。 Spark应该像服务一样行事。 https://github.com/spark-jobserver/spark-jobserver可能会有帮助。 – giaosudau

+0

那么,我个人认为它并不慢。这些并不是令人印象深刻的延迟,但Spark并不是专为低延迟工作而设计的,而且您肯定不会轻松。为什么不直接针对Cassandra?关于分离这当然是一个好主意。 – zero323

回答

1

我会建议您直接与卡桑德拉和CQL工作。如果你不能反映一切CQL你总是可以创建一个用户自定义-function(UDF)。

https://docs.datastax.com/en/cql/3.3/cql/cql_using/useCreateUDF.html

默认情况下,卡桑德拉2.2和更高版本支持限定Java和JavaScript功能。其他脚本语言,如Python,红宝石,和Scala可通过添加被加入JAR到classpat H。将JAR文件安装到$ CASSANDRA_HOME/lib/jsr223/[language]/[jar-name]中。罐子其中语言是“JRuby的”,“Jython的”或“斯卡拉”

其中一个选项,使低延迟的Apache星火的解决办法是保持阿帕奇星火数据(跨多个请求),只是查询每个请求中的缓存数据(并跳过cassandra的loading-cassandra部分)。这是不平凡的。