当前位置: 首页 > news >正文

记录一次超大(200+G)数据量导入ES的解决办法

文章目录

    • 业务需求
    • 特点
    • 解决思路
    • 解决效果
    • 解决方案
    • 其他
    • 结语

业务需求

将12个CSV文件中的数据,共200多G,导入到ES中,要求性能好一些,速度越快越好。
此处我们不讨论需求的合理性,只对处理办法进行讨论。

特点

  1. 单索引操作,数据量很大
  2. 数据含有位置数据,可能会涉及经纬度问题
  3. 需要注意导入性能与速度问题

解决思路

为满足业务需求,该问题可以拆分为两个部分,一个是读取,如何快速读取csv格式文件数据,内存消耗要小,读取速度要快,更要稳定。另一个是写入,写入ES如何做到写入性能最大。
硬件条件:1台8C64G服务器,硬盘足够大(不过是机械的)

解决效果

读写速度可达5000条每秒 其中读 10万条每秒 写 大约5000条每秒

解决方案

横向对比
自己写:多线程非IO阻塞式文件流读取,速度达标,但实现麻烦
POI工具包: 性能不高,速度慢
easyexcel:最终方案,10万条一批,速度性能非常好

由于服务器操作受限,只能单机ES,针对ES写入性能优化,修改了如下参数
ES优化参数说明
PS:es5以上就不能通过修改es的yml文件来配置了。
kibana示例:
PUT 索引名称/_settings
{
“index” : {
“refresh_interval” : “1m”,
“translog.durability” : “async”,
“translog.flush_threshold_size” : “1024mb”,
“translog.sync_interval” : “30s”
}
}
curl 命令

curl -u elastic -XPUT -H "Content-Type: application/json" -d '{"index":{"refresh_interval" : "5m","translog.durability" : "async","translog.flush_threshold_size" : "1024mb","translog.sync_interval" : "30s"}}' localhost:9200/索引名/_settings

优化前后差别不是很大,应该还是要上集群,需要注意的是,导入完成后记得将更新时间调整回去

其他

在这个过程中,还遇到了以下问题

  1. CSV文件内容格式不正确导致抛映射错误异常,csv文件中的数据行不能出现双引号""
  2. 多表头导致类型不匹配异常
  3. 文件编码不是utf-8导致的中文乱码问题
    近20G的CSV编辑工具选择就非常重要了,我用的EverEdit,虽然收费,但有一个月的免费使用,使用非常流畅,另存为可以修改文件编码格式,批量操作等功能也非常好用,推荐~!

结语

可能这个方案还达不到你的业务需求标准,后面可以考虑ES集群写入效率会更高,如果可以,希望在评论区留下你的解决办法,可以让我学习一下。没有附源码的原因主要和编码没有什么太大的关系,主要是思路和工具的选用,选对了工具就可以了,代码都demo级的东西。

相关文章:

  • MySQL进阶第五天——存储过程与存储函数
  • 无重复字符的最长子串(力扣中等难度)
  • 热加载原理解析与实现
  • re正则表达式
  • vector模拟实现
  • 【网络安全】记一次简单渗透测试实战
  • 1200万像素通过算法无失真扩展到1.92亿像素——加权概率模型收缩模型图像像素扩展算法
  • Java高级学习篇之反射
  • Java中利用new和反射得到对象的区别(底层)
  • 基本概率论(预备知识)
  • 组成泰克示波器的五大部分
  • 打卡Google 2022 开发者大会
  • 关于fifo和ram时序验证
  • ... 是什么 ?... 有什么用处?
  • chromium中的TimeTicks和TimeDelta
  • const let
  • css的样式优先级
  • CSS选择器——伪元素选择器之处理父元素高度及外边距溢出
  • HTTP那些事
  • mysql常用命令汇总
  • python 装饰器(一)
  • Python学习笔记 字符串拼接
  • supervisor 永不挂掉的进程 安装以及使用
  • 笨办法学C 练习34:动态数组
  • 创建一种深思熟虑的文化
  • 关于Flux,Vuex,Redux的思考
  • 聊聊flink的TableFactory
  • 聊聊sentinel的DegradeSlot
  • 爬虫模拟登陆 SegmentFault
  • 入职第二天:使用koa搭建node server是种怎样的体验
  • puppet连载22:define用法
  • 如何在招聘中考核.NET架构师
  • 专访Pony.ai 楼天城:自动驾驶已经走过了“从0到1”,“规模”是行业的分水岭| 自动驾驶这十年 ...
  • ​虚拟化系列介绍(十)
  • # centos7下FFmpeg环境部署记录
  • # Java NIO(一)FileChannel
  • #NOIP 2014# day.1 T2 联合权值
  • #绘制圆心_R语言——绘制一个诚意满满的圆 祝你2021圆圆满满
  • $().each和$.each的区别
  • (1)安装hadoop之虚拟机准备(配置IP与主机名)
  • (33)STM32——485实验笔记
  • (9)目标检测_SSD的原理
  • (html转换)StringEscapeUtils类的转义与反转义方法
  • (力扣)1314.矩阵区域和
  • (四)汇编语言——简单程序
  • (学习日记)2024.04.04:UCOSIII第三十二节:计数信号量实验
  • (一)Spring Cloud 直击微服务作用、架构应用、hystrix降级
  • .net web项目 调用webService
  • .Net 代码性能 - (1)
  • .NET/ASP.NETMVC 大型站点架构设计—迁移Model元数据设置项(自定义元数据提供程序)...
  • .NET开源的一个小而快并且功能强大的 Windows 动态桌面软件 - DreamScene2
  • .NET命令行(CLI)常用命令
  • .skip() 和 .only() 的使用
  • /etc/apt/sources.list 和 /etc/apt/sources.list.d
  • ::什么意思