我最近使用spark 2.2查询具有3个节点和1万亿行数据的巨大的Elasticsearch集群。我使用org.elasticsearch:elasticsearch-spark-20_2.11:5.5.0进行spark-es集成。
但是,结果集太大(包含1000亿行数据),spark作业将花费2个小时来完成它。
我确认所有字段都是简单的String类型,并且我的程序是正确的(未设置一些优化选项),并且spark确实进行了pushDown来帮助最小化输出,但是仍然太大。以下是我在使用Spark时的配置,是否有优化建议?
es.scroll.size="10000"
pushdown="true"
es.scroll.keepalive="10m"
我的spark sql代码:
val conf = new SparkConf()
.setAppName("Simple Example")
.set("es.resource", "myIndex/info")
.set("es.read.field","field1, field2, field3")
.set("es.scroll.size","10000")
.set("es.scroll.keepalive","10m")
.set("es.nodes","192.168.12.12")
.set("es.port","9200")
.set("pushdown","true");
val sc = new SparkContext(conf);
val df = sc.sql("select * from myIndex where name = 'exampleName'")
然后我检查spark UI,事件时间轴暗示Executor compute time
太长。