join使用hadoopmapreduce连接nosql数据库中的数据

bqjvbblv  于 2021-06-03  发布在  Hadoop
关注(0)|答案(1)|浏览(408)

我目前正在使用solr作为nosql数据库。我已经索引了各种类型的文档,它们之间有时有关系。
对于新的用例,我必须执行solr不支持的join。
我想知道是否有一种方法可以向hadoop提交map reduce作业,hadoop可以从solr中提取数据并执行连接。
我正在寻找:
讨论
现有的开源项目
示例代码
或者一个批评告诉我这不是容易做到的,或者在一般情况下。
提前谢谢。
注意:我在这里看到一些关于相关或类似主题的问题:这里,这里和这里,但我没有得到我想要的。

disho6za

disho6za1#

你有两个基本的选择。
1) 使用solr restapi通过同时发出大量请求来手动连接记录。
此策略要求您使用solr记录id或查询项定义Map器,然后针对solr集群运行所有Map器。如果您发送带有超时的同步请求,并且拥有一个性能合理的solr集群,那么可以根据需要将记录写入您的reducer。
2) 直接在Map器中读取solr核心索引,并执行reduce-side连接。
这可能会稍微困难一些。因为每个核心都被编入索引并写入一个层次文件夹结构,所以在mapper setup()方法中必须有一些逻辑,这些逻辑可能从给定的核心读取元数据。当然,您可能还需要将所有内核都放入hdfs中。但是,一旦您使用现有的solrjava索引读取器api解析了solr输入,就可以很容易地将它们正确地发送到您的reducer中,以实现标准的reduce-side连接。
3) 如果一个小数据集(<1g)正在连接到另一个大数据集,您可以通过发出rest查询将其读入,并将其作为一个大的、丑陋的、静态可用的对象缓存在内存中,或者将其数据作为文件存储在分布式缓存中。您甚至可以在Map器的setup()部分发出查询,并在每个示例本地缓存它们。
无论如何:在solr中连接数据并不是特别容易。你选择的任何解决方案都有缺点。正确的解决方案是重做solr索引,使它们充分非规范化,并使用标准map/reduce、hive或pig等工具进行连接。

相关问题