身安不如心安,屋宽不如心宽 。

用es作为数据源,sparksql做count查询速度问题

Elasticsearch | 作者 appleseeds | 发布于2016年12月07日 | 阅读数:14683

用sparksql查询16G,1亿条数据的单节点es数据源。比如select count(*) from pruduct这样的语句。3台spark的集群,用了20分钟,怎么才能提高查询速度呢?spark能否集成elasticsearch-sql来提高速度
已邀请:

ancestor - 屌丝

赞同来自: easesstone

如果是单纯要拿个count数,执行下面这个DSL,然后自己取下hits.total,岂不更快


{
  "from": 0,
  "size": 1
}

y676360

赞同来自: easesstone

spark是内存计算,需要把待查询的数据放入内存中,select count(*) 应该会将es中所有的数据加载到spark executor内存,而es的吞吐很一般,因此会比较慢。建议select count(1) 或者某一个确定的窄字段试试。
我们使用过早期的es-hadoop,觉得吞吐真的问题很大,spark 与 es放一起太不协调啦。。。。

ilangge

赞同来自:

select count(*) from pruduct
简单优化下就行:
select count(1) from pruduct
 
在这个地址:http://www.nlpcn.org:9999/web/#
测试下:
select count(_id) from pruduct
转化为查询脚本为:
{
"from": 0,
"size": 0,
"_source": {
"includes": [
"COUNT"
],
"excludes": []
},
"aggregations": {
"COUNT(_id)": {
"value_count": {
"field": "_id"
}
}
}
}
肯定速度很快的。要20分钟,写法的问题,自己找找sparksql生成的es scrip是什么,找找原因。
 
查询脚本本身不难,多了解下有好处。

medcl - 今晚打老虎。

赞同来自:

最快求count要数count接口啦: https://www.elastic.co/guide/e ... .html

要回复问题请先登录注册