Hadoop to create an Index and Add() it to distributed SOLR… is this possible? Should I use Nutch? ..Cloudera?

StackOverflow https://stackoverflow.com/questions/4235892

Question

Can I use a MapReduce framework to create an index and somehow add it to a distributed Solr?

I have a burst of information (logfiles and documents) that will be transported over the internet and stored in my datacenter (or Amazon). It needs to be parsed, indexed, and finally searchable by our replicated Solr installation.

Here is my proposed architecture:

  • Use a MapReduce framework (Cloudera, Hadoop, Nutch, even DryadLinq) to prepare those documents for indexing
  • Index those documents into a Lucene.NET / Lucene (java) compatible file format
  • Deploy that file to all my Solr instances
  • Activate that replicated index

If that above is possible, I need to choose a MapReduce framework. Since Cloudera is vendor supported and has a ton of patches not included in the Hadoop install, I think it may be worth looking at.

Once I choose the MatpReduce framework, I need to tokenize the documents (PDF, DOCx, DOC, OLE, etc...), index them, copy the index to my Solr instances, and somehow "activate" them so they are searchable in the running instance. I believe this methodolgy is better that submitting documents via the REST interface to Solr.

The reason I bring .NET into the picture is because we are mostly a .NET shop. The only Unix / Java we will have is Solr and have a front end that leverages the REST interface via Solrnet.

Based on your experience, how does this architecture look? Do you see any issues/problems? What advice can you give?

What should I not do to lose faceting search? After reading the Nutch documentation, I believe it said that it does not do faceting, but I may not have enough background in this software to understand what it's saying.

Was it helpful?

Solution

Generally, you what you've described is almost exactly how Nutch works. Nutch is an crawling, indexing, index merging and query answering toolkit that's based on Hadoop core.

You shouldn't mix Cloudera, Hadoop, Nutch and Lucene. You'll most likely end up using all of them:

  • Nutch is the name of indexing / answering (like Solr) machinery.
  • Nutch itself runs using a Hadoop cluster (which heavily uses it's own distributed file system, HDFS)
  • Nutch uses Lucene format of indexes
  • Nutch includes a query answering frontend, which you can use, or you can attach a Solr frontend and use Lucene indexes from there.
  • Finally, Cloudera Hadoop Distribution (or CDH) is just a Hadoop distribution with several dozens of patches applied to it, to make it more stable and backport some useful features from development branches. Yeah, you'd most likely want to use it, unless you have a reason not to (for example, if you want a bleeding edge Hadoop 0.22 trunk).

Generally, if you're just looking into a ready-made crawling / search engine solution, then Nutch is a way to go. Nutch already includes a lot of plugins to parse and index various crazy types of documents, include MS Word documents, PDFs, etc, etc.

I personally don't see much point in using .NET technologies here, but if you feel comfortable with it, you can do front-ends in .NET. However, working with Unix technologies might feel fairly awkward for Windows-centric team, so if I'd managed such a project, I'd considered alternatives, especially if your task of crawling & indexing is limited (i.e. you don't want to crawl the whole internet for some purpose).

OTHER TIPS

Have you looked at Lucandra https://github.com/tjake/Lucandra a Cassandra based back end for Lucense/Solr which you can use Hadoop to populate the Cassandra store with the index of your data.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top