Ответ 1
- Установите
default.parallelism
в 2 - Начать искру с
--num-executor-cores 8
- Изменить эту часть
df.registerTempTable('test')
d=sqlContext.sql("""...
to
df.registerTempTable('test')
sqlContext.cacheTable("test")
d=sqlContext.sql("""...
У меня есть кластер на 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 установлен в значения по умолчанию. Может ли кто-нибудь увидеть, чего я здесь не вижу?
default.parallelism
в 2--num-executor-cores 8
df.registerTempTable('test')
d=sqlContext.sql("""...
to
df.registerTempTable('test')
sqlContext.cacheTable("test")
d=sqlContext.sql("""...
Это нормально, не за исключением Spark для запуска в нескольких миллисекундах, таких как mysql или postgres. Spark является низкой латентностью по сравнению с другими крупными решениями данных, такими как Hive, Impala... вы не можете сравнивать его с классической базой данных, Spark не является базой данных, где индексируются данные!
Посмотрите это видео: https://www.youtube.com/watch?v=8E0cVWKiuhk
Они ясно указали здесь Spark:
Вы пробовали Apache Drill? Я нашел его немного быстрее (я использую его для небольших файлов HDFS JSON, 2/3Gb, намного быстрее, чем Spark для SQL-запросов).