2016-09-20 75 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部分)。這是不平凡的。