首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在分布式机器上划分一个非常大的单词列表搜索以获得更快的答案

如何在分布式机器上划分一个非常大的单词列表搜索以获得更快的答案
EN

Stack Overflow用户
提问于 2017-02-20 02:30:24
回答 4查看 80关注 0票数 0

这更多的是一个架构问题,您将如何在规模上解决这个问题。

假设您有一个数百万单词的列表,您需要搜索这数百万单词是否存在于一个数万亿单词的集合中。

例如,

代码语言:javascript
运行
复制
Word_List =
["This", "a", "test", "of", "two", "words","what","words"]  

The_corpus =
["This", "a", "test", "of", "two", "words","what","words","blah","blah2"]  

在上面的示例中,word_list中的所有单词都在the_corpus中找到,因此我们的函数将返回true。请注意,“单词”必须出现两次。

我想知道我们能否通过在集群上分发the_corpus并编写Mapper和Reducer来检查单词是否存在于语料库中来解决这个问题,但我不知道word_list将如何分布。我不能将word_list保存在主节点上,因为它太大了。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2017-02-20 09:53:03

您的任务具有与普通联接操作类似的目标。在实现它时,您可以考虑到以下几点:

  1. 可以使用基于布卢姆 Word_List的Word_List筛选器来缩小The_corpus集合中的潜在值范围。
  2. 对于次要的集合,通常使用分布式缓存来使所有任务节点上的资源可用。在您的情况下,这可能是一个很大的空间命中,因为它将被复制到每个节点的实际任务将被执行。为了改进这一点,您可以使用更大的复制因子将文件直接放入文件系统,例如10 (取决于集群中的节点数量),以提高其可用性。然后,在您的任务中,您将能够直接下载它,这将大大节省您的空间相比分布式缓存方法,但成本将是您的带宽在非本地读取。你可以玩这个来找出最佳的复制数量。
票数 1
EN

Stack Overflow用户

发布于 2017-02-20 13:40:47

word_list可以通过Hadoop's DistributedCache机制跨节点分布。本质上,文件(-s)是在初始作业配置阶段指定的,然后物理地复制到将运行映射任务的所有节点。然后,每个map任务都可以访问和使用该文件的内容。

因此,您的示例任务通过以下方式在Hadoop中得到解决: word_list和语料库被放入HDFS;在工作中,word_list被设置为在所有节点上使用DistributedCache进行扩展;在地图阶段,word_list将根据特定的语料库拆分进行检查(即每个地图任务都有完整的word_list,64/128/MB的语料库拆分,其中64/128/.由HDFS为语料库文件设置的块大小定义);在还原阶段,需要进行聚合,例如,如果应该返回True/False,那么减缩器的输入可能是word_list中所有单词出现的次数:如果所有单词至少有一次出现,则为真,否则为假。

通常,这类任务称为映射端连接.参见一些示例代码(使用DistributedCache),例如,这里

票数 1
EN

Stack Overflow用户

发布于 2017-02-20 02:48:02

您可以在hadoop中在hdfs上添加word_list和语料库,这将在所有节点上分发两个文件。现在,您可以从hdfs读取后续文件。在映射程序代码中,可以使用文件系统类访问映射代码中的word_list文件。您可以在Hadoop命令中将您的语料库文件作为输入文件路径。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42335551

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档