用 sparksql 查询 es 集群的时候特别慢,es 集群有三个节点,总共大概有 200 亿条数据,jvm 堆内存 32G。 spark 查询时 pushdown 了之后结果集大概有 20 亿条数据,一个简单的字段匹配查询要跑一两个小时,目前连接时只用到了这些配置 es.scroll.size="10000" pushdown="true" es.scroll.keepalive="10m"
sparksql 代码:
val conf = new SparkConf().setAppName("SimpleExample").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'")
从 sparkUI 上的 metrics 看,99% 时间都浪费在了 executor compute time 上,但是我只是简单的 select 然后 save 到 hdfs 文件而已。 https://i.stack.imgur.com/IJ0oQ.jpg