使用Hadoop Map Reduce加入来加入NoSQL数据库中的数据

时间:2012-09-24 16:11:33

标签: java join solr hadoop mapreduce

我目前正在使用Solr作为NoSQL数据库。我已将各种类型的文档编入索引,这些文档有时会在它们之间建立关系。

对于新的用例,我必须执行Solr不支持的等效连接。

我想知道是否有办法向hadoop提交map-reduce作业,然后hadoop可以从Solr中提取数据并执行连接。

我正在寻找:

  1. 讨论
  2. 执行此操作的现有开源项目
  3. 示例代码
  4. 或批评告诉我,这不能轻易地或在一般情况下完成。
  5. 提前致谢。

    注意:我在这里看到了一些关于相关或类似主题的问题:hereherehere,但我没有得到我想要的内容。

1 个答案:

答案 0 :(得分:1)

您有两个基本选项。

1)使用SOLR REST API通过同时发出大量请求来手动连接记录。

此策略要求您使用SOLR记录ID或查询字词定义映射器,然后针对SOLR集群运行所有映射器。如果您发出超时的同步请求,并且具有合理的性能solr群集,则可以根据需要将记录写入您的reducer。

2)直接在地图制作工具中读取SOLR核心索引,并进行缩减边连接。

这可能稍微困难一些。由于每个核心都已编制索引并写入层次结构文件夹结构,因此您必须在mapper setup()方法中使用某些逻辑来读取给定核心的元数据。此外,您可能必须将所有内核放入HDFS中。但是,一旦您使用现有的SOLR java索引读取器API解析了SOLR输入,就可以很容易地将这些输入正确地发送到您的reducer以进行标准的reduce side join。

3)如果一个小数据集(< 1G)正在加入另一个大数据集,你可以通过发出REST查询并将其作为一个大而丑陋的静态可用对象缓存在内存中来读取它。 ,或将其数据作为文件存储在分布式缓存中。您甚至可以简单地在mapper的setup()部分发出查询,并在每个实例的本地缓存它们。

无论如何:在SOLR中加入数据并不是特别容易。你找的任何解决方案都有缺点。正确的解决方案是重做SOLR索引,使它们充分非规范化,并使用标准map / reduce,HIVE或PIG等工具进行连接。