【发布时间】: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