[英]Elasticsearch spark reading slow
使用规定的 spark 连接器org.elasticsearch:elasticsearch-spark-20_2.11:6.3.2
从 Elasticsearch v6.2
读取到 spark 非常慢。 这是来自带有索引的 3 节点 ES 集群:
curl https://server/_cat/indices?v
green open db MmVwAwYfTz4eE_L-tncbwQ 5 1 199983131 9974871 105.1gb 51.8gb
在(10 个节点、1tb 内存、> 50 个 VCPU)火花集群上读取:
val query = """{
"query": {
"match_all": {}
}
}"""
val df = spark.read
.format("org.elasticsearch.spark.sql")
.option("es.nodes","server")
.option("es.port", "443")
.option("es.net.ssl","true")
.option("es.nodes.wan.only","true")
.option("es.input.use.sliced.partitions", "false")
.option("es.scroll.size", "1000")
.option("es.read.field.include", "f1,f2,f3")
.option("es.query",query)
.load("db")
df.take(1)
这是(缓慢地)它应该如何工作,还是我做错了什么?
这不是它应该有多慢,答案可以在您分享的屏幕截图中找到:
Spark UI 中的Stages: Succeeded/Total
列仅显示了一个运行读取操作的任务,我认为这不是您所期望的,否则,拥有整个集群有什么意义。
我遇到了同样的问题,我花了一段时间才弄清楚 Spark 将任务(分区)关联到 Elasticsearch 索引中的每个分片,
我们有我们的答案,为了更快,我们应该并行化这个过程,怎么做? 通过将我们的源索引分布到多个分片中。
默认情况下,Elasticsearch 创建一个带有一个分片的索引,但是,可以如下对其进行个性化:
PUT /index-name
{
"settings": {
"index": {
"number_of_shards": x,
"number_of_replicas": xx
}
}
}
分片的数量可能高于弹性节点的数量,这对 Spark 来说都是透明的。 如果索引已经存在,尝试创建一个新的 inex,然后使用 Elasticsearch Reindex API
我希望这解决了你的问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.