Elasticsearch 批量导入数据3
2023-03-31 10:28:48 时间
时百思不得其解,已经反复确认了数据格式无误,并且随机选取其中一些进行导入测试也没发现问题,但只要整体一导就出问题,而且每次都一样
[root@es-bulk tmp]# free -m
total used free shared buffers cached
Mem: 3949 3548 400 0 1 196
-/+ buffers/cache: 3349 599
Swap: 3951 237 3714
[root@es-bulk tmp]#
系统内存明明还有多余,但是再看到JAVA内存时,就隐约感觉到了原因
[root@es-bulk tmp]# ps faux | grep elas
root 14479 0.0 0.0 103252 816 pts/1 S+ 16:05 0:00 \_ grep elas
495 19045 0.2 25.6 3646816 1036220 ? Sl Mar07 25:45 /usr/bin/java -Xms256m -Xmx1g -Djava.awt.headless=true -XX:+UseParNewGC -XX:+UseConcMarkSweepGC -XX:CMSInitiatingOccupancyFraction=75 -XX:+UseCMSInitiatingOccupancyOnly -XX:+HeapDumpOnOutOfMemoryError -XX:+DisableExplicitGC -Dfile.encoding=UTF-8 -Djna.nosys=true -Des.path.home=/usr/share/elasticsearch -cp /usr/share/elasticsearch/lib/elasticsearch-2.1.1.jar:/usr/share/elasticsearch/lib/* org.elasticsearch.bootstrap.Elasticsearch start -p /var/run/elasticsearch/elasticsearch.pid -d -Des.default.path.home=/usr/share/elasticsearch -Des.default.path.logs=/var/log/elasticsearch -Des.default.path.data=/var/lib/elasticsearch -Des.default.path.conf=/etc/elasticsearch
[root@es-bulk tmp]#
ES和lucene是使用的JAVA,JAVA的内存分配大小决定了它们的发挥空间,这里的初始内存为 256M ,这也是大多数情况下的默认配置,但是应对当前的实际数据大小 265M 时就不够了,虽然官方说会尽量减小使用buffer,但实测下来,系统应该会是首先尽量使用内存,通过导入内存的方式来起到显著加速的效果,但是内存不够时,就直接报错退出了
解决内存不足有两种思路:
- 1.调整 Xms 和 Xmx 参数,使其适应业务需求,然后重启服务使之生效
- 2.将原来的数据切小,分批导入
第一种方式,要求停应用和业务,在某些情况下是不具备条件的(得统一协调时间窗口),那么就尝试使用第二种方式,好在text文档的切分也可以使用sed快速完成
[root@es-bulk tmp]# sed -rn '1,250000p' es_data.json > es_data1.json
[root@es-bulk tmp]# sed -rn '250001,500000p' es_data.json > es_data2.json
[root@es-bulk tmp]# sed -rn '500001,750000p' es_data.json > es_data3.json
[root@es-bulk tmp]# sed -rn '750001,943210p' es_data.json > es_data4.json
[root@es-bulk tmp]#
[root@es-bulk tmp]# du -sh es_data*.json
71M es_data1.json
68M es_data2.json
71M es_data3.json
58M es_data4.json
266M es_data.json
[root@es-bulk tmp]#
[root@es-bulk tmp]# tail es_data1.json
...
...
[root@es-bulk tmp]# tail es_data2.json
...
...
再依次进行导入,就发现没问题了
[root@es-bulk tmp]# time curl -XPOST 'localhost:9200/stuff_orders/_bulk?pretty' --data-binary @es_data1.json > /dev/null
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 101M 100 30.6M 100 70.3M 981k 2253k 0:00:31 0:00:31 --:--:-- 0
real 0m33.308s
user 0m0.100s
sys 0m0.390s
[root@es-bulk tmp]#
命令汇总
curl -XPOST 'localhost:9200/stuff_orders/_bulk?pretty' --data-binary @test.json
curl localhost:9200/stuff_orders/order_list/903713?pretty
sed -ir 's/[}][}][{]/}} {/' jjjj.json
less jjjj.json
time curl -XPOST 'localhost:9200/stuff_orders/_bulk?pretty' --data-binary @es_data.json > /dev/null
free -m
ps faux | grep elas
sed -rn '1,250000p' es_data.json > es_data1.json
sed -rn '250001,500000p' es_data.json > es_data2.json
sed -rn '500001,750000p' es_data.json > es_data3.json
sed -rn '750001,943210p' es_data.json > es_data4.json
du -sh es_data*.json
tail es_data1.json
time curl -XPOST 'localhost:9200/stuff_orders/_bulk?pretty' --data-binary @es_data1.json > /dev/null
原文地址
相关文章
- 从本体论开始说起——运营商关系图谱的构建及应用
- 如何成为一名数据科学家?
- 从未见过的堂兄杀了人,你的DNA是关键证据
- 20个安全可靠的免费数据源,各领域数据任你挑
- 20个安全可靠的免费数据源,各领域数据任你挑
- 阿里云李飞飞:All in Cloud时代,云原生数据库优势明显
- 基于Hadoop生态系统的一高性能数据存储格式CarbonData(性能篇)
- 大数据告诉你:10年漫威,到底有多少角色
- TigerGraph:实时图数据库助力金融风控升级
- Splunk利用Splunk Connected Experiences和Splunk Business Flow 扩大数据访问
- 大数据开发常见的9种数据分析手段
- 以免在景区看人,我爬了5W条全国景点门票数据...
- 【实战解析】基于HBase的大数据存储在京东的应用场景
- 数据科学家告诉你哪些计算机科学书籍是你应该看的
- Kafka作为大数据的核心技术,你了解多少?
- Spring Boot 整合 Redis 实现缓存操作
- 大数据学习必须掌握的五大核心技术有哪些?
- 基于Antlr在Apache Flink中实现监控规则DSL化的探索实践
- 甲骨文再次被Gartner评为分析型数据管理解决方案魔力象限领导者
- 爬取吴亦凡微博102118条转发数据,扒一扒流量的真假