elasticsearch-spark部分参数理解

es.nodes.wan.only: false
es.nodes.discovery: true
Spark会通过访问es.nodes中指定的host(可以为多个) 得到ES集群所有开启HTTP服务节点的ip和port,后续对数据的访问会直接访问分片数据所在的节点上(需要保证ES集群所有节点都能够被Spark集群访问到)

es.nodes.wan.only: true
es.nodes.discovery: false或不设置
Spark发送给ES的所有请求都需要通过这个节点进行转发,效率相对比较低

查看elasticsearch-spark-20_2.11
org.elasticsearch.hadoop.cfg.Settings 源码
public boolean getNodesDiscovery() {
        return Booleans.parseBoolean(this.getProperty("es.nodes.discovery"), !this.getNodesWANOnly());
    }


    public boolean getNodesDataOnly() {
        return Booleans.parseBoolean(this.getProperty("es.nodes.data.only"), !this.getNodesWANOnly() && !this.getNodesClientOnly() && !this.getNodesIngestOnly());
    }

spark默认写ES的时候refresh的会在每次bulk结束的时候调用
我们建议设置为false,有ES内部index的 refresh_interval来控制refresh,否则ES集群会有大量的线程在refesh会带来很大的CPU和磁盘压力

es.batch.write.refresh: false 默认是true
控制每次Bulk写入的量
es.batch.size.bytes:1mb 每次bulk写入文档的大小,默认1mbes.batch.size.entries:1000 每次bulk写入的文档数,默认是1000
用户可根据ES集群套餐合理设置


读相关设置
es.scroll.size: 50, 默认是50 这个值相对来说比较小,可以适当增大至1000-10000es.input.use.sliced.partitions: true 为了提高并发,es会进行scroll-slice进行切分es.input.max.docs.per.partition: 100000 根据这个值进行切分slice
es-spark 读取 ES集群数据的时候,会按照每个分片的总数进行切分做scroll-slice处理:

int numPartitions = (int) Math.max(1, numDocs / maxDocsPerPartition);
numDocs为单个分片的文档总数,如果文档有5千万,这时候会切分成500个sclice,会对后端的线上ES集群造成巨大的CPU压力,所以一般建议关闭scroll-slice,以避免影响在线业务

建议的参数:
es.scroll.size: 2000 //尽量根据文档的大小来选择es.input.use.sliced.partitions: false
控制需要写入的文档字段
有时候业务导入数据的时候,希望有一些字段不被写如ES,可以设置:

es.mapping.exclude:默认是none// 多个字段用逗号进行分割,直接 . * 表达es.mapping.exclude = *.descriptiones.mapping.include = u*, foo.*

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

码者人生

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值