Исправленный запрос Spark

У меня есть кластер на AWS с двумя подчиненными и 1 ведущим. Все экземпляры имеют тип m1.large. Я использую искру версии 1.4. Я сравниваю производительность искры с данными размером 4 м, поступающими с красного смены. Я произвел один запрос через оболочку pyspark

    df = sqlContext.load(source="jdbc", url="connection_string", dbtable="table_name", user='user', password="pass")
    df.registerTempTable('test')
    d=sqlContext.sql("""

    select user_id from (

    select -- (i1)

        sum(total),

        user_id

    from

        (select --(i2)

            avg(total) as total,

            user_id

        from

                test

        group by

            order_id,

            user_id) as a

    group by

        user_id

    having sum(total) > 0

    ) as b
"""
)

Когда я делаю d.count(), указанный выше запрос занимает 30 секунд, когда df не кэшируется и 17 секунд, когда df кэшируется в памяти.

Я ожидаю, что эти тайминги будут ближе к 1-2 м.

Это мои конфигурации искры:

spark.executor.memory 6154m
spark.driver.memory 3g
spark.shuffle.spill false
spark.default.parallelism 8

rest установлен в значения по умолчанию. Может ли кто-нибудь увидеть, чего я здесь не вижу?

Ответ 1

  • Установите default.parallelism в 2
  • Начать искру с --num-executor-cores 8
  • Изменить эту часть

df.registerTempTable('test') d=sqlContext.sql("""...

to

df.registerTempTable('test') sqlContext.cacheTable("test") d=sqlContext.sql("""...

Ответ 2

Это нормально, не за исключением Spark для запуска в нескольких миллисекундах, таких как mysql или postgres. Spark является низкой латентностью по сравнению с другими крупными решениями данных, такими как Hive, Impala... вы не можете сравнивать его с классической базой данных, Spark не является базой данных, где индексируются данные!

Посмотрите это видео: https://www.youtube.com/watch?v=8E0cVWKiuhk

Они ясно указали здесь Spark:

Искра не такая низкая латентность

Вы пробовали Apache Drill? Я нашел его немного быстрее (я использую его для небольших файлов HDFS JSON, 2/3Gb, намного быстрее, чем Spark для SQL-запросов).