elasticsearch,logstash,full-text-indexing,Mysql,elasticsearch,Logstash,Full Text Indexing" /> elasticsearch,logstash,full-text-indexing,Mysql,elasticsearch,Logstash,Full Text Indexing" />

ElasticSearch、Logstash、MySQL:如何加快大型导入?

ElasticSearch、Logstash、MySQL:如何加快大型导入?,mysql,elasticsearch,logstash,full-text-indexing,Mysql,elasticsearch,Logstash,Full Text Indexing,我正在尝试将一个大型(约3000万行)MySQL数据库导入ElasticSearch。很酷,有一个logstash工具,看起来它是为这类事情而构建的;它的JDBC插件可以让我直接连接到数据库,并快速地读取行 然而!当我尝试时,它会弹出java.lang.OutOfMemoryError。可以它可能是试图批量处理太多的行或其他内容。因此,我将jdbc\u fetch\u size=>1000添加到我的配置中。没有骰子,仍然没有记忆。好吧,也许那个选项不起作用,或者不符合我的想法 因此,我尝试将jd

我正在尝试将一个大型(约3000万行)MySQL数据库导入ElasticSearch。很酷,有一个
logstash
工具,看起来它是为这类事情而构建的;它的JDBC插件可以让我直接连接到数据库,并快速地读取行

然而!当我尝试时,它会弹出
java.lang.OutOfMemoryError
。可以它可能是试图批量处理太多的行或其他内容。因此,我将
jdbc\u fetch\u size=>1000
添加到我的配置中。没有骰子,仍然没有记忆。好吧,也许那个选项不起作用,或者不符合我的想法

因此,我尝试将
jdbc\u paging\u enabled=>true
jdbc\u page\u size=>10000
添加到我的配置中。成功它开始向我的索引中批量添加10k行

但是速度变慢了。起初我每分钟跑10万行;然而,当我排到200万排时,我可能已经排到了这一排的十分之一。毫不奇怪;我很确定这是在使用限制和偏移量,在查询中使用巨大的偏移量是非常慢的,所以我在这里处理的是一种O(n^2)类型的事情

我真的很想运行整个大查询,让光标在resultset上迭代,但出于某种原因,这似乎不起作用。如果我对查询有更多的控制权,我可以将限制/偏移更改为
whereid介于val1和val2之间的那种类型,但我看不出我可以在哪里做这件事


有没有关于我如何不撞车,但仍能以合理速度奔跑的建议?

好的!在logstash input jdbc github页面中搜索“内存”问题后,我发现:

似乎需要在mysql 5.x的连接字符串中添加一个额外的参数
?useCursorFetch=true

事实证明,MySQL JDBC客户端由于某些原因默认情况下不使用游标来获取行,而logstash客户端也不会警告您,即使您由于其他原因设置了
JDBC_fetch_size
,它也无法使用游标来迭代结果集

当然,要知道这一点,最明显的方法是仔细阅读其中确实提到默认情况下游标是关闭的,但不是为什么

无论如何,我在连接字符串中添加了
useCursorFetch=true
,将
jdbc\u query\u paging
踢到了路边,并在2.5小时内将2600万行导入到我的索引中,使用的是一台8G内存的老旧Macbook Pro


感谢github用户提供的有用评论

好的!在logstash input jdbc github页面中搜索“内存”问题后,我发现:

似乎需要在mysql 5.x的连接字符串中添加一个额外的参数
?useCursorFetch=true

事实证明,MySQL JDBC客户端由于某些原因默认情况下不使用游标来获取行,而logstash客户端也不会警告您,即使您由于其他原因设置了
JDBC_fetch_size
,它也无法使用游标来迭代结果集

当然,要知道这一点,最明显的方法是仔细阅读其中确实提到默认情况下游标是关闭的,但不是为什么

无论如何,我在连接字符串中添加了
useCursorFetch=true
,将
jdbc\u query\u paging
踢到了路边,并在2.5小时内将2600万行导入到我的索引中,使用的是一台8G内存的老旧Macbook Pro


感谢github用户提供的有用评论

亲爱的内特,我也面临着类似的问题。你能分享你的Logstash-conf文件吗?我试过了,但根本不起作用。谢谢Dar Nate,我也面临着类似的问题。你能分享你的Logstash-conf文件吗?我试过了,但根本不起作用。谢谢