【问题标题】:Best way to insert a lot of Data in Solr在 Solr 中插入大量数据的最佳方法
【发布时间】:2017-04-11 13:19:52
【问题描述】:

我有一些数据每天都必须摄取到 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,

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

然后我在 Solr 中创建了 4 个节点(在同一个 IP 上),并使用 Spark 插入数据,最初是因为 Spark 创建的分区远远超过 Solr 节点,并且指定的“执行程序”也不仅仅是节点,所以花了更多的时间。

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

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

谢谢!

【问题讨论】:

    标签: java apache-spark solr


    【解决方案1】:

    我不确定 spark 是否是将这么多数据加载到 solr 中的最佳方式。

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

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

    如果您想了解更多信息,请告诉我。

    【讨论】:

    • 我可以对 Solr 进行自定义添加吗?因为我将对字段数据进行一些修改以提高文档的分数。
    • 这也是一个不错的选择github.com/lucidworks/spark-solr 吗?我没有正确理解它,所以使用 spark 编写了自定义代码。
    • 你可以使用 spark-solr 但你会受到性能问题的影响。如果适合您希望处理的数据量,Lucidworks/spark-solr 是一个很好的 api 尝试。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-10-16
    • 2011-06-03
    • 2018-04-24
    • 1970-01-01
    • 1970-01-01
    • 2010-09-23
    • 1970-01-01
    相关资源
    最近更新 更多