Apache spark Spark查询运行非常慢
我在AWS上有一个集群,有两个从机和一个主机。所有实例都是m1.large类型。我正在运行spark 1.4版。我正在对来自红移的超过400万数据的spark的性能进行基准测试。我通过pysparkshell启动了一个查询Apache spark Spark查询运行非常慢,apache-spark,apache-spark-sql,pyspark,Apache Spark,Apache Spark Sql,Pyspark,我在AWS上有一个集群,有两个从机和一个主机。所有实例都是m1.large类型。我正在运行spark 1.4版。我正在对来自红移的超过400万数据的spark的性能进行基准测试。我通过pysparkshell启动了一个查询 df = sqlContext.load(source="jdbc", url="connection_string", dbtable="table_name", user='user', password="pass") df.registerTempTa
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设置为其默认值。有人能看到我在这里遗漏了什么吗
default.parallelism
设置为2--num executor cores 8启动spark
df.RegisterEmptable('test'))
d=sqlContext.sql(“”…
到
df.RegisterEmptable('test'))
sqlContext.cacheTable(“测试”)
d=sqlContext.sql(“…
这是正常的,除了Spark,不要像mysql或postgres那样在几毫秒内运行。与Hive、Impala等其他大数据解决方案相比,Spark的延迟较低……您无法将其与经典数据库进行比较,Spark不是一个索引数据的数据库
观看此视频:
他们显然在这里点燃了火花:
你试过Apache Drill吗?我发现它快一点(我用它来处理小型HDFS JSON文件,2/3Gb,比Spark用于SQL查询快得多)。仅内部查询的性能如何?@Geek i1用了13秒(没有缓存)。
.cache()
仅在spark操作要求时告诉spark缓存它。第一次总是很慢。后续访问应该会更快。此外,我注意到EC2上的spark没有激活c3-8XL上的所有内核,因为没有设置执行器内核。我在缓存方面没有任何问题,但问题是查询不是fas即使在缓存后也不够。缓存数据帧后需要17秒才能完成。如果我是你,我会检查此类查询的物理计划(使用.explain()
打印)并查看Spark Web UI以检查哪些部分花费的时间最多。您使用的表是否有其他列?仅缓存查询所需的列可能会有所帮助。