elasticsearch 弹性搜索+;apachespark性能,elasticsearch,apache-spark,apache-spark-sql,elasticsearch,Apache Spark,Apache Spark Sql" /> elasticsearch 弹性搜索+;apachespark性能,elasticsearch,apache-spark,apache-spark-sql,elasticsearch,Apache Spark,Apache Spark Sql" />

elasticsearch 弹性搜索+;apachespark性能

elasticsearch 弹性搜索+;apachespark性能,elasticsearch,apache-spark,apache-spark-sql,elasticsearch,Apache Spark,Apache Spark Sql,我正在尝试使用ApacheSpark在Elasticsearch中查询我的数据,但我的spark工作花费了大约20个小时进行聚合,并且仍在运行。ES中的相同查询大约需要6秒 我知道数据必须从Elasticsearch集群移动到我的spark集群,一些数据在spark中洗牌 my ES索引中的数据约为3亿个文档,每个文档约有400个字段(1.4Terrabyte) 我有一个3节点的spark集群(1个主集群,2个工作集群),共有60GB内存和8个内核 运行所需的时间是不可接受的,有没有办法让我的s

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

我知道数据必须从Elasticsearch集群移动到我的spark集群,一些数据在spark中洗牌

my ES索引中的数据约为3亿个文档,每个文档约有400个字段(1.4Terrabyte)

我有一个3节点的spark集群(1个主集群,2个工作集群),共有60GB内存和8个内核

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

以下是我的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);
    }

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

我知道了发生了什么,基本上,我是在尝试操作dataframe模式,因为我有一些带点的字段,例如user.firstname。
这似乎导致火花收集阶段出现问题。为了解决这个问题,我必须重新索引我的数据,这样我的字段就不再有点,而是有一个下划线,例如user_firstname。

为什么在这里标记了datastax?如果您使用的是DSE,您将获得的最佳性能是从嵌入式DSE Spark查询的DSE搜索。能否在Spark中包含您查询的代码位?@phat,已编辑。谢谢谢谢:)fwiw,我猜你没有在ES层进行过滤。我不是ES Spark连接器方面的专家。是的,它可以将sql语法转换为ES查询!啊,你正在使用2.1 RC。。。您是否启用了参数pushdown->true?