我正在尝试使用Logstash从MySQL导入32m行到Elasticsearch,它可以正常工作,但在达到3,5m时会中断。检查过MySQL,Logstash正常运行,Elasticsearch中的问题请查看日志:
[2018-08-14T23:06:44,299][WARN ][o.e.x.s.a.s.m.NativeRoleMappingStore] [4OtmyM2] Failed to clear cache for realms [[]]
[2018-08-14T23:06:44,345][INFO ][o.e.l.LicenseService ] [4OtmyM2] license [23fbbbff-0ba9-44f5-be52-7f5a6498dbd1] mode [basic] - valid
[2018-08-14T23:06:44,368][INFO ][o.e.g.GatewayService ] [4OtmyM2] recovered [1] indices into cluster_state
[2018-08-14T23:06:46,120][INFO ][o.e.c.r.a.AllocationService] [4OtmyM2] Cluster health status changed from [RED] to [YELLOW] (reason: [shards started [[clustername][2]] ...]).
[2018-08-14T23:55:55,780][INFO ][o.e.m.j.JvmGcMonitorService] [4OtmyM2] [gc][2953] overhead, spent [378ms] collecting in the last [1s]
我已将堆大小增加到2GB,但仍然无法处理。用于迁移的配置文件如下:
input {
jdbc {
jdbc_connection_string => "jdbc:mysql://localhost:3306/clustername?useCursorFetch=true"
jdbc_user => "USER"
jdbc_password => "PSWD"
jdbc_validate_connection => true
jdbc_driver_library => "/usr/share/java/mysql-connector-java-5.1.42.jar"
jdbc_driver_class => "com.mysql.jdbc.Driver"
jdbc_paging_enabled => "true"
#jdbc_fetch_size => "50000"
jdbc_page_size => 100000
statement => "SELECT * FROM `video` ORDER by `id` ASC LIMIT 100000 OFFSET 3552984"
}
}
谢谢您的任何建议。
答案 0 :(得分:2)
您没有提供足够的数据来帮助诊断问题。要正确索引大量数据,您必须真正了解数据是什么,将要占用多少存储空间以及将要使用多少内存。
Elasticsearch不是魔术。如果您要超越简单的概念证明,就必须了解一些事情。当您看到诸如gc开销之类的事情花费大量时间时,您必须假设您没有正确调整Elasticsearch集群的大小。
您需要考虑的事情:
elasticsearch需要多少内存?
您需要多少个节点
您还需要考虑很多其他事情,但是作为一般规则,请尝试找出错误所在的位置,即通过生成一些看起来像您的随机数据来从混合中删除SQL Server / logstash真实数据,以便您收集适当调整集群大小所需的指标。