Выполнение искры в первый раз занимает приблизительно 13 секунд, но второе, а каждый второй раз - 3,5 секунды. - PullRequest
2 голосов
/ 05 марта 2019

Я использую pyspark и Flask для интерактивной искры в качестве сервисного приложения. Мое приложение должно получить запрос с некоторыми параметрами и вернуть ответ обратно. Мой код здесь:

//first I make udf function
def dict_list(x, y):
        return dict((zip(map(str, x), map(str, y))))

dict_list_udf = F.udf(lambda x, y: dict_list(x, y), 
    types.MapType(types.StringType(), types.StringType()))

//then I read my table from cassandra
        df2 = spark.read \
            .format("org.apache.spark.sql.cassandra") \
            .options(table="property_change", keyspace="strat_keyspace_cassandra_raw2") \
            .load()

@app.route("/test/<serviceMatch>/<matchPattern>")
def getNodeEntries1(serviceMatch, matchPattern):

    result_df = df2.filter(df2.id.like(matchPattern + "%") & (df2.property_name == serviceMatch)) \
        .groupBy("property_name") \
        .agg(F.collect_list("time").alias('time'), F.collect_list("value").alias('value'))

    return json.dumps(result_df.withColumn('values', dict_list_udf(result_df.time, result_df.value)).select('values').take(1))

Когда я запускаю свой сервер (с использованием spark submit) и использую Postman для запроса на получение, мне сначала требуется около 13 секунд, чтобы дать мне ответ, а после этого каждый второй ответ занимает примерно 3 секунды. Обслуживать пользователей с задержкой в ​​13 секунд поначалу не допустимо. Я новый пользователь искры, и я предполагаю, что это поведение связано с природой искры, но я не знаю, что именно вызывает это. Можно что-то сказать о кешировании или компиляции плана выполнения, например SQL-запросы. Есть ли шанс, что я смогу решить эту проблему. Ps Я новый пользователь, так что извините, если мой вопрос не достаточно ясен или что-то еще.

1 Ответ

0 голосов
/ 05 марта 2019

Такая задержка полностью ожидается.Пропуск простого факта, что Spark не предназначен для использования непосредственно встроенным в интерактивное приложение (и не подходит для запросов в реальном времени), приводит к значительным затратам

  • Инициализация контекста.
  • Получение ресурсов от менеджера кластера.
  • Извлечение метаданных из Кассандры.

Вопрос в том, имеет ли смысл вообще использовать Spark здесь - если вам нужно близко к реальномувремя отклика, и вы собираете полные результаты для драйвера, используя собственный разъем Cassandra должен быть намного лучшим выбором.

Однако если вы планируете выполнять логику, которая не поддерживается самой Cassandra, тогда всеВы можете принять стоимость такой косвенной архитектуры.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...