我有大量数据需要编制索引,完成这项工作需要 10 多个小时。有没有办法在hadoop上做到这一点?以前有人做过吗?非常感谢!
3 回答
你还没有解释10小时在哪里?需要提取数据吗?还是只需要索引数据。
如果您需要很长时间进行提取,那么您可以使用 hadoop。Solr 有一个称为批量插入的功能。因此,在您的地图功能中,您可以一次性累积 1000 条记录并提交索引以获取大量记录。这将大大优化你的表现。
还有你的数据有多大?
您可以在 map/reduce 作业的 reduce 功能中收集大量记录。您必须在地图中生成正确的键,以便大量记录进入单个 reduce 函数。在您的自定义reduce类中,根据您的hadoop版本在setup/configure方法中初始化solr对象,然后在cleanup方法中关闭它。您必须创建一个文档集合对象(在solrNet或solrj中)并将它们全部提交到一个单发。
如果您使用 hadoop,还有其他选项称为katta。你也可以看看它。
您可以在您的 hadoop 集群上编写一个 map reduce 作业,该作业只需获取每条记录并通过 http 将其发送到 solr 以进行索引。Afaik solr 目前没有对机器集群的索引,因此如果您想将索引也分布在多个节点上,那么研究弹性搜索是值得的。
有一种 SOLR hadoop 输出格式,它在每个 reducer 中创建一个新索引,因此您可以根据所需的索引分配密钥,然后在事后将 hdfs 文件复制到您的 SOLR 实例中。
http://www.datasalt.com/2011/10/front-end-view-generation-with-hadoop/