Spark 查询 运行 很慢

Spark query running very slow

我在 AWS 上有一个集群,有 2 个从节点和 1 个主节点。所有实例都是 m1.large 类型。我是 运行 spark 1.4 版。我正在对来自红移的超过 4m 数据的火花性能进行基准测试。我通过 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 设置为其默认值。任何人都可以看到我在这里缺少什么吗?

  1. default.parallelism 设置为 2
  2. 使用 --num-executor-cores 8
  3. 启动 spark
  4. 修改这部分

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

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

这很正常,除了 Spark 到 运行 在一些 milli-secondes 像 mysql 或 postgres 做。与 Hive 等其他大数据解决方案相比,Spark 具有低延迟,Impala...您无法将其与经典数据库进行比较,Spark 不是索引数据的数据库!

观看此视频:https://www.youtube.com/watch?v=8E0cVWKiuhk

他们显然把 Spark 放在这里:

您尝试过 Apache Drill 吗?我发现它快一点(我将它用于小型 HDFS JSON 文件,2/3Gb,比 Spark 用于 SQL 查询快得多)。