内向基金完成首轮募资
06-17
腾讯云EMR&Elasticsearch使用ES-Hadoop MR&Hive文章 腾讯云EMR&Elasticsearch使用ES-Hadoop Spark文章通过前面几篇文章的介绍,相信大家已经有了基本的了解。数据组件与ES结合使用。
本系列文章发表后,后端收到大量私信询问很多性能调优问题。比如很多开发者测试发现从Hive、Spark等导出的数据写入ES的性能非常慢,导出百万条数据需要好几个小时。
在帮助一些开发人员调优的过程中,我们发现少数情况下的问题是使用的集群规模较小,不能很好地处理大数据场景下的高压高吞吐量写入。但更多的案例问题是由于我们没有对ES-Hadoop的参数进行详细的了解和调优而导致的。
默认参数设置太小,与我们的集群大小和写入吞吐量不匹配,导致写入性能较低。 。
ES-Hadoop的参数很多,包括索引设置、映射、网络、读写等,其中一些Advanced高级参数非常重要,与我们的读写性能密切相关。此类参数的默认值假设用户使用的集群是日常应用中常见的比较小的集群。
然而,在国内的大数据场景中,往往有数以亿计的用户剖析人群数据。如果这些不正确,参数调整将很难达到所需的写入性能。
我们以Spark RDD写入ES为: 代码语言:txt复制 import org.apache.spark.SparkConf;import org.apache.spark.api.java.JavaRDD;import org.apache.spark.api.java.JavaSparkContext;导入 org.spark_project.guava.collect.ImmutableList;导入 org.spark_project.guava.collect.ImmutableMap;导入 org.elasticsearch.spark.rdd.api.java.JavaEsSpark;导入 java.util.Map;导入 java.util.List ;public class WriteToESUseRDD { public static void main(String[] args) { SparkConf conf = new SparkConf().setAppName("my-app").clone() .set("es.nodes", "10.0.4.17" ) .set("es.port", "") .set("es.nodes.wan.only", "true") .set("es.batch.size.bytes", "30MB") .set( "es.batch.size.entries", "0") .set("es.batch.write.refresh", "false") .set("es.batch.write.retry.count", "50") .set("es.batch.write.retry.wait", "s") .set("es.http.timeout", "5m") .set("es.http .retries", "50") set("es.action.heart.beat.lead", "50s"); JavaSparkContext sc = new JavaSparkContext(conf); Map
节点嗅探不允许检测真实节点IP。适用于类似于腾讯云或AWS的ES云服务。
es.batch.size.bytes/es.batch.size.entries:这两个参数可以控制单批次写入数据的大小和数量。数据累计量先达到哪个参数设置就会触发批量写入。
。我们知道,增加单批次写入的数据可以提高写入ES的整体吞吐量。
因为ES写入一般都是顺序写入,在批量写入中,可以合并很多数据的写入处理逻辑,也可以合并大量的IO操作。默认值设置得比较小。
您可以根据集群的规模适当调整这两个值。建议20MB、2w。
当然,批量大小不能无限增加,这会导致写入任务积压。 es.batch.write.refresh:ES是准实时搜索引擎,也就是说写入数据后,只有触发刷新操作后才能搜索到写入的数据。
这里的参数是控制每次批量操作后是否刷新。每次刷新后,ES都会根据当前内存中的数据生成一个新的段。
如果刷新速度太快,就会产生大量的小段。当大量Segment合并时,会消耗磁盘IO。
默认值是开启的,我们建议在这里将其设置为 false。通过索引设置中的refresh_interval配置项控制,根据业务需要可以设置为30s或者更长。
es.batch.write.retry.count/es.batch.write.retry.wait:这两个参数将控制单个批量写入请求的重试次数和重试间隔。当超过重试次数时,Yarn任务管理会将任务标记为失败,导致整个数据写入任务失败。
默认值为3。为了防止集群因偶尔网络抖动或压力过大而暂时关闭,建议增大该值,设置为50。
es.http.timeout/es.http.retries :这两个参数控制http接口层面的超时和重试,涵盖读请求和写请求。和上面一样,默认值比较小。
默认超时时间为1分钟,重试次数为3次。建议将超时时间调整为5分钟,重试次数调整为50次。
es.action.heart.beat.lead:该参数控制任务超时后,需要多长时间通知Yarn调度模块重试整个任务。在大多数写作场景中,我们不会设置写作任务的重试次数。
版权声明:本文内容由互联网用户自发贡献,本站不拥有所有权,不承担相关法律责任。如果发现本站有涉嫌抄袭的内容,欢迎发送邮件 举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。
标签:
相关文章
06-17
06-17
06-17
06-17
最新文章
【玩转GPU】ControlNet初学者生存指南
【实战】获取小程序中用户的城市信息(附源码)
包雪雪简单介绍Vue.js:开学
Go进阶:使用Gin框架简单实现服务端渲染
线程池介绍及实际案例分享
JMeter 注释 18 - JMeter 常用配置组件介绍
基于Sentry的大数据权限解决方案
【云+社区年度征文集】GPE监控介绍及使用