我在 AWS 上有一个集群,有 2 个从站和 1 个主站。所有实例都是 m1.large 类型。我正在运行 Spark 1.4 版。我正在对来自红移的超过 400 万数据的 Spark 性能进行基准测试。我通过 pyspark shell 发起了一个查询
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() 时,上述查询在
df
时需要 30 秒df
时不缓存和 17 秒缓存在内存中。我希望这些时间更接近 1-2 秒。
这些是我的 Spark 配置:
spark.executor.memory 6154m
spark.driver.memory 3g
spark.shuffle.spill false
spark.default.parallelism 8
rest 设置为其默认值。任何人都可以看到我在这里缺少什么吗?
最佳答案
这是正常的,不要让 Spark 像 mysql 或 postgres 那样在几毫秒内运行。与 Hive、Impala 等其他大数据解决方案相比,Spark 具有低延迟……您无法将其与经典数据库进行比较,Spark 不是数据索引的数据库!
观看此视频:https://www.youtube.com/watch?v=8E0cVWKiuhk
他们清楚地把 Spark 放在这里:
你试过 Apache Drill 吗?我发现它快了一点(我将它用于小型 HDFS JSON 文件,2/3Gb,比用于 SQL 查询的 Spark 快得多)。
关于apache-spark - Spark查询运行很慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31693723/