【问题标题】:Elasticsearch + Apache Spark performanceElasticsearch + Apache Spark 性能
【发布时间】:2019-02-13 18:43:37
【问题描述】:

我正在尝试使用 Apache spark 在 Elasticsearch 中查询我的数据,但我的 spark 作业需要大约 20 小时来进行聚合并且仍在运行。在 ES 中相同的查询大约需要 6 秒。

我了解数据必须从 Elasticsearch 集群移动到我的 spark 集群,并且在 Spark 中进行一些数据混洗。

我的 ES 索引中的数据约为。 3亿个文档,每个文档大约有400个字段(1.4Terabyte)。

我有一个 3 节点 spark 集群(1 个 master,2 个 worker),总共有 60GB 内存和 8 个内核。

运行时间不可接受,有没有办法让我的 spark 作业运行得更快?

这是我的火花配置:

SparkConf sparkConf = new SparkConf(true).setAppName("SparkQueryApp")
                 .setMaster("spark://10.0.0.203:7077")    
                 .set("es.nodes", "10.0.0.207")
                 .set("es.cluster", "wp-es-reporting-prod")              
                .setJars(JavaSparkContext.jarOfClass(Demo.class))
                .set("spark.serializer", "org.apache.spark.serializer.KryoSerializer")
                .set("spark.default.parallelism", String.valueOf(cpus * 2))
                .set("spark.executor.memory", "8g");

已编辑

    SparkContext sparkCtx = new SparkContext(sparkConf);

    SQLContext sqlContext = new SQLContext(sparkCtx);
    DataFrame df = JavaEsSparkSQL.esDF(sqlContext, "customer-rpts01-201510/sample");

    DataFrame dfCleaned = cleanSchema(sqlContext, df);

    dfCleaned.registerTempTable("RPT");

    DataFrame sqlDFTest = sqlContext.sql("SELECT agent, count(request_type) FROM RPT group by agent");

    for (Row row : sqlDFTest.collect()) {
        System.out.println(">> " + row);
    }

【问题讨论】:

  • 你这里怎么有datastax标签?如果您使用 DSE,您将获得的最佳性能是从嵌入式 DSE Spark 中查询的 DSE Search。
  • 你能在 Spark 中包含你查询的代码吗?
  • @phat,已编辑。谢谢
  • 好的,谢谢 :) fwiw,我猜你没有在 ES 层进行过滤。不过,我不是 ES Spark 连接器方面的专家。

标签: elasticsearch apache-spark apache-spark-sql


【解决方案1】:

我知道发生了什么,基本上,我试图操纵数据框架构,因为我有一些带点的字段,例如 user.firstname。 这似乎在火花的收集阶段引起了问题。为了解决这个问题,我只需要重新索引我的数据,这样我的字段就不再有点,而是下划线,例如 user_firstname。

【讨论】:

    【解决方案2】:

    恐怕您无法在仅 120 GB 总 RAM 的情况下执行超过 1.4 TB 的组并获得良好的性能。 DF 将尝试将所有数据加载到内存/磁盘中,然后才会执行分组。我认为目前 spark/ES 连接器不会在 ES 查询语言中翻译 sql 语法。

    【讨论】:

    • 是的,它确实将 sql 语法转换为 ES 查询!
    • 啊,您使用的是 2.1 RC ...您是否启用了参数 pushdown -> true ?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-08-29
    • 1970-01-01
    • 2016-03-25
    • 2014-11-20
    • 1970-01-01
    • 2017-03-10
    • 2019-05-08
    相关资源
    最近更新 更多