最近在做es集群的海量数据写入,公司的数据量比较大,日均增量达到了5亿+,有将近150G的数据,这对es来说,如果用默认的设置和常规的写入简直无法完成,哪怕写进去了,也是大量重复,数据丢失,基本写不进去。
es的写入方式有很多种,可以通过logstach直接写入,可以通过api接口写入,也可以通过spark写入,还可以直接从kafka、filebeat、flume之类的写入。
综合考虑后,我们选择了数据先进入hive,然后做清洗和增加uuid等处理。
下面将详细介绍这次测试的效果和思路,分享给广大的es开发者们,希望可以给大伙儿有一点帮助吧。
一、Elasticsearch整理之template使用
es在开发过程中,还是建议使用模板,这样可以批量设置索引的信息,在数据写入的时候可以更方便管理,也可以在数据写入的时候再创建索引,不创建便不占内存空间。
创建模板如下,
PUT _template/template_date_test_index_mapping { "index_patterns": ["date_test_index_*"], "settings": { "number_of_shards":4, "number_of_replicas":0 }, "mappings": { "doc":{ "properties": { "appname":{ "type": "keyword", "index_options": "freqs", "norms": false, "copy_to": "full_name" }, "request_time": { "type": "date", "format":"yyyy-MM-dd HH:mm:ss" } } } } }
二、Elasticsearch整理之settings的设置
以下内容摘自:https://blog.csdn.net/Interstellar_/article/details/81355589 ,当然大家可以去官网看看,会有更详细的设置信息,我看到这篇博客的博主写的挺好的就摘下来附上了
//静态设置:只能在索引创建时或者在状态为 closed index(闭合的索引)上设置 index.number_of_shards //主分片数,默认为5.只能在创建索引时设置,不能修改 index.shard.check_on_startup //是否应在索引打开前检查分片是否损坏,当检查到分片损坏将禁止分片被打开 false //默认值 checksum //检查物理损坏 true //检查物理和逻辑损坏,这将消耗大量内存和CPU fix //检查物理和逻辑损坏。有损坏的分片将被集群自动删除,这可能导致数据丢失 index.routing_partition_size //自定义路由值可以转发的目的分片数。默认为 1,只能在索引创建时设置。此值必须小于index.number_of_shards index.codec //默认使用LZ4压缩方式存储数据,也可以设置为 best_compression,它使用 DEFLATE 方式以牺牲字段存储性能为代价来获得更高的压缩比例。
//动态设置 index.number_of_replicas //每个主分片的副本数。默认为 1。 index.auto_expand_replicas //基于可用节点的数量自动分配副本数量,默认为 false(即禁用此功能) index.refresh_interval //执行刷新操作的频率,这使得索引的最近更改可以被搜索。默认为 1s。可以设置为 -1 以禁用刷新。 index.max_result_window //用于索引搜索的 from+size 的最大值。默认为 10000 index.max_rescore_window // 在搜索此索引中 rescore 的 window_size 的最大值 index.blocks.read_only //设置为 true 使索引和索引元数据为只读,false 为允许写入和元数据更改。 index.blocks.read // 设置为 true 可禁用对索引的读取操作 index.blocks.write //设置为 true 可禁用对索引的写入操作。 index.blocks.metadata // 设置为 true 可禁用索引元数据的读取和写入。 index.max_refresh_listeners //索引的每个分片上可用的最大刷新侦听器数
三、elasticsearch整理之hive写es的http设置项
add jar ${DIR}/elasticsearch-hadoop-hive-6.5.0.jar; USE testdb; DROP TABLE IF EXISTS test_20190806; CREATE EXTERNAL TABLE test_20190806 ( cs_uri_stem STRING COMMENT ‘客户端访问的url‘ ,userid STRING COMMENT ‘客户端访问ID‘ ,requesttime STRING COMMENT ‘客户端提交请求的时间‘ ,session_id STRING COMMENT ‘会话id‘ ,server_port STRING COMMENT ‘服务器端口号‘ ,server_ip STRING COMMENT ‘服务器IP‘ ,client_ip STRING COMMENT ‘客户端IP‘ ,uuid STRING COMMENT ‘uuid‘ )COMMENT ‘ACC日志数据传入ES外部表‘ STORED BY ‘org.elasticsearch.hadoop.hive.EsStorageHandler‘ TBLPROPERTIES( ‘es.resource‘ = ‘test_index_20190806/doc‘, ‘es.index.auto.create‘ = ‘true‘, ‘es.nodes.wan.only‘ = ‘true‘, ‘es.index.translog.durability‘ = ‘async‘, ‘es.index.translog.sync_interval‘ = ‘120s‘, ‘es.index.translog.flush_threshold_size‘ = ‘1024mb‘, ‘es.index.translog.flush_threshold_period‘ = ‘120m‘, ‘es.index.refresh_interval‘=‘120s‘, ‘es.read.metadata‘ = ‘true‘, ‘es.mapping.id‘ = ‘uuid‘, ‘es.write.operation‘ = ‘upsert‘, ‘es.http.timeout‘ = ‘600s‘, ‘es.batch.size.bytes‘ = ‘10mb‘, ‘es.batch.write.retry.count‘ = ‘-1‘, ‘es.batch.write.retry.wait‘ = ‘600s‘, ‘es.batch.size.entries‘ = ‘5000‘ ) ;
具体的es配置优化可以根据自己的需求到官网找,此处附上配置的官方url:https://www.elastic.co/guide/en/elasticsearch/hadoop/master/configuration.html#cfg-multi-writes
四、elasticsearch整理之mapping字段 的相关配置
名称 枚举 作用
enable true/false 仅存储,不做搜索和聚合分析
index true/false 是否构建倒排索引,false不记录,即不可搜索
index_options docss/freqs/positions/offsets 存储倒排索引的哪些信息,text类型默认配置为positions,其他默认为docs ,记录内容越多,占用空间越大。
norms true/false 是否存储归一化的相关参数,如果字段仅用于过滤和聚合分析,可关闭
doc_values true/false 是否开启,用于排序和聚合分析
field_data true/false 是否为text类型启用,实现排序和聚合分析
store true/false 是否存储该字段值
coerce true/false 是否开启自动数据类型转换,比如字符串转数字,浮点转int(默认是true)
multifields 多字段:灵活使用多字段来解决多样的业务需求
dynamic true/false/strict 控制mapping的自动跟新
date_detection true/false 是否自动识别日期类型 (建议false,手动去设置格式)
五、_source,_all,store的关系
_source默认会存储写入es的json文档,可通过includes参数指定存储部分field,也可以通过excludes参数指定那些部分field不存储,不过查询的时候只会显示这里存储的field,不存的将无法显示。
_all是默认将所有字段合并,做一个分词,但是es6以后该字段默认禁用,好像还不能更改,但是可以通过copy_to把需要进行多字段分词查询的field指定到一个full_name的字段里,这个字段类似_all的功能
一般来说_source和store必须要存储一份数据,否则该字段在es中将没有任何存储。但是_source里没有的字段,即便设置field的store为true,该field在查询结果中也无法显示。
本段摘自:https://blog.csdn.net/qq_34646817/article/details/82585517
原文:https://www.cnblogs.com/xinyumuhe/p/11344171.html