在Solr中插入大量数据的最佳方法

问题描述:

我有一些数据,我必须每天摄入Solr,每天的数据大概是10-12 GB,而且我必须为最后一个数据库运行追赶工作年,每天大约10-12 GB的数据。在Solr中插入大量数据的最佳方法

我正在使用Java,我需要在我的数据中进行部分更新评分,如果同一个唯一关键字再次到达,我使用带有TextField的docValues。

https://github.com/grossws/solr-dvtf

最初,我使用哪个花了很多的时间(从S3读取和在60K分批加入到Solr)顺序方法。

我发现这个回购协议:

https://github.com/lucidworks/spark-solr

,但我不明白的执行情况,我需要修改字段数据;一些得分逻辑,所以写了自定义的火花代码。

然后,我在Solr中创建了4个节点(在同一个IP上),并使用Spark插入数据,最初由Spark创建的分区比Solr节点多,而且指定的'executors'不仅仅是节点,所以它花了更多的时间。

然后,我将RDD重新分区为4个(Solr节点数量),指定了4个执行程序,然后插入花费更少的时间并且成功,但是当我运行相同的一个月时,一个或多个Solr节点继续运行在HD上我有足够的可用空间,并且很少我的RAM使用结束。

请给我一个解决这个问题的方法,我有8个核心CPU, 或者我应该为Solr上的不同节点使用不同的系统?

谢谢!

我不确定spark会是将大量数据加载到solr的最佳方法。

你可能选择将数据加载到Solr的是:

  1. 通过HBase的索引器也称为批处理索引,您的HBase的表和Solr指数之间同步数据。
  2. 你也可以实现几乎实时的hbase-lily-indexer。
  3. 你也可以使用solr的jdbc工具 - 在我看来是最好的。你可以做的是通过spark从s3读取数据到配置单元表中。然后你可以实现一个solr jdbc到你的配置单元表,并相信我这是非常快的。

让我知道你是否想要更多关于这些信息。

+0

我能否自定义添加到Solr?,因为我将对字段数据进行一些修改以提高文档评分。 –

+0

而且这也是一个很好的选择https://github.com/lucidworks/spark-solr ?,我没有正确理解它,所以使用spark编写自定义代码。 –

+1

你可以使用spark-solr,但是会遇到性能问题。 Lucidworks/spark-solr是一个很棒的api尝试,如果这适合你想要处理的数据量。 –