Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache spark Spark查询运行非常慢_Apache Spark_Apache Spark Sql_Pyspark - Fatal编程技术网

Apache spark Spark查询运行非常慢

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

我在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.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以检查哪些部分花费的时间最多。您使用的表是否有其他列?仅缓存查询所需的列可能会有所帮助。