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

时间:2017-04-11 04:59:25

标签: java apache-spark solr

我有一些数据需要每天摄入Solr,每天的数据大约是10-12 GB,而且我必须在过去的1年内完成一项追赶工作,每天大约10-12 GB数据

我正在使用Java,如果同一个唯一密钥再次到达,我需要通过部分更新对我的数据进行评分,我将docValues与TextField一起使用。

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

最初,我使用了一种耗费大量时间的顺序方法(从S3读取并以60k的批量添加到Solr中)。

我找到了这个回购:

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

但我无法理解实现,因为我需要修改某些评分逻辑的字段数据,所以写了自定义的火花代码。

然后我在Solr中创建了4个节点(在相同的IP上),并使用Spark来插入数据,最初由Spark创建的分区比Solr节点以及执行者'更多。指定的不仅仅是节点,因此需要花费更多时间。

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

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

谢谢!

1 个答案:

答案 0 :(得分:1)

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

将数据加载到solr的可能选项包括:

  1. 通过hbase-indexer也称为批处理索引器,它可以同步hbase表和solr索引之间的数据。
  2. 您还可以实现几乎实时的hbase-lily-indexer。
  3. 您也可以使用solr的jdbc实用程序 - 我认为最好。你可以做的是通过spark从s3加载到hive表中读取数据。然后你可以在你的hive表中实现一个solr jdbc并相信我的速度非常快。
  4. 如果您想了解有关这些内容的更多信息,请与我们联系。