使用elasticsearch和hadoop map reduce

lf3rwulv  于 2021-06-03  发布在  Hadoop
关注(0)|答案(2)|浏览(429)

我有一个“大数据”文本搜索问题,我在这里的stackexchange网站上寻找一般建议-https://softwareengineering.stackexchange.com/questions/203855/text-search-big-data-problem
对于这篇文章,这里有一个特别的问题,即关于elasticsearch与hadoop的集成(但我想我应该提供一些背景知识)。
问题概述
基本上我有大量的文本,分成不同的'行',每行代表一个项目。我还有一个更小的列表,其中包含了本文中的搜索词。我想交叉引用这两个索引并进行反向索引查找,然后返回找到的索引。
注:我知道20GB不是海量数据,但这个练习的次要目标是与大数据技术合作,为我们与我们真正的大数据(TB)项目一起使用奠定基础。
方法
我继续调查lucene搜索路线,但据我所知,这将导致以下方法:
使用mapreduce删除停止词并格式化文本等
生成lucene索引(可能使用mapreduce-这是一个优化)
开发一个c#应用程序与lucene(或solr)接口并进行搜索。
但对我来说,这仍然是串行的,也就是说,我将取决于搜索服务器的可伸缩性,以真正快速,但我仍然必须从我的列表顶部开始,并通过我的方式,一个接一个。
我可以将原来的列表分割成块,然后在不同的服务器上运行我的c应用程序,这将是一种方法。
具体问题
但我想知道我是否可以使用hadoop map reduce直接与elasticsearch(我到lucene的首选路线)接触?我已经找过了(!)但是什么也找不到,除了用仙境狗和Pig。很好-但我看不到Pig自定义项和elasticsearch的例子。
感谢任何指点,代码示例非常欢迎!
邓肯

siotufzp

siotufzp1#

你也许能让这一切顺利。
一种可能的方法是让每个hadoop节点运行一个嵌入的仅路由的ElasticSearch节点。这应该会使查询更高效一些,因为节点会找出每个查询需要联系哪些节点,并利用高效的内部协议来这样做。可以通过添加更多es数据节点来水平缩放。
唯一的缺点是你的hadoop节点不会接近不同节点上的数据;所以你在网络上有点延迟。但即便如此,您应该能够以这种方式运行大量看起来应该相当便宜的查询。因为它只有20gb,所以es节点应该很少需要转到磁盘,并且可以在内存中执行所有操作,利用过滤器缓存等。
实际上,我正在使用非hadoop代码对单节点集群中的ElasticSearch进行一些消除歧义的工作,并且我正在每秒管理2000-2500个简单查询,而没有过多地强调ElasticSearch。我花了45分钟处理了700万份文件。添加要缩放的节点。当然,你的种族可能不同。
对于许多hadoop节点,您可以通过拥有大量并发请求来抵消延迟效应,而大型es集群应该可以轻松地跟上集体负载。只需增加副本的数量即可降低每个节点的负载。
您可能可以利用批量索引api以及reduce步骤的一部分。另一个想法是使用search_type=scan在ElasticSearch中迭代所有文档,而不是在hdfs中使用文件。可选,但可能效果很好。

sd2nnvve

sd2nnvve2#

有一个新的官方支持叫做elasticsearch hadoop
请看这里:http://www.elasticsearch.org/blog/elasticsearch-and-hadoop/
也:https://github.com/elasticsearch/elasticsearch-hadoop

相关问题