Рекомендации по структуре обработки данных (MapReduce / DHT?) - PullRequest
0 голосов
/ 30 ноября 2009

Мне нужно выполнить распределенный поиск по большому набору небольших файлов (~ 10M), каждый из которых представляет собой набор key: value пар. Для этого у меня есть набор серверов с 56 ядрами ЦП - в основном это двухъядерные и четырехъядерные процессоры, а также большой DL785 с 16 ядрами.

Система должна быть разработана для онлайн-запросов, в идеале я хочу реализовать веб-сервис, который возвращает вывод JSON по требованию из внешнего интерфейса.

Чтобы еще больше усложнить ситуацию, для любого конкретного поиска иногда я захочу посмотреть только последнюю версию каждого файла, но другие поиски могут относиться только к тем версиям файлов, которые существовали в определенном дата.

Я смотрел на Hadoop, но администрирование довольно ужасное, и методы отправки заданий по умолчанию медленные. Похоже, что он предназначен для очень крупномасштабной обработки в автономном режиме, а не для оперативной обработки данных.

CouchDB прекрасно выглядит как хранилище документов и знает о документах в стиле key: value, а также о версиях и MapReduce, но я не могу ничего найти о том, как его можно использовать в качестве распределенной системы MapReduce. Вся документация по кластеризации рассказывает об использовании кластеризации и репликации базы данных whole для балансировки нагрузки , тогда как мне нужно распределение нагрузки .

Я также исследовал различные DHT, и, хотя они хороши для фактического хранения и извлечения отдельных записей, они, как правило, плохо справляются с частью MapReduce по «карте». Итерации по всему набору документов имеют решающее значение.

Следовательно, моя идеальная система должна включать распределенную файловую систему, такую ​​как HDFS Hadoop, с возможностями веб-сервиса CouchDB.

Может ли кто-нибудь указать мне, что может помочь? Язык реализации не слишком важен, за исключением того, что он должен работать в Linux.

Ответы [ 2 ]

1 голос
/ 30 ноября 2009

Кажется, что проблемная область лучше подходит для решения, подобного Solr. Solr предлагает http-интерфейсы для других приложений, даже JSON . Вы можете распределить поиск по нескольким машинам или распределить одну копию по машинам для балансировки нагрузки (главный / подчиненный). Это будет зависеть от того, что лучше всего подойдет для ваших данных. Но по моему опыту в результатах поиска в реальном времени, Lucene / Solr собирается превзойти любую систему, основанную на системе карт / редукции.

Очень просто интегрировать Solr в приложение и выполнять постепенные обновления. Хотя на самом деле он не имеет ни малейшего представления о версии. Если это действительно необходимо, вам, возможно, придется найти другой способ его закрепить.

0 голосов
/ 01 декабря 2009

Я могу быть немного озадачен тем, что нужно вашему приложению, вы упомянули о необходимости поиска по парам ключ / значение, где Solr будет отличным приложением. Но вы также упомянули о необходимости использовать часть карты map / Reduce и о том, что вам нужно отсканировать 10M документов. Я не уверен, что вы найдете решение, которое будет сканировать документы 10M и возвращать результаты в режиме онлайн (в диапазоне миллисекунд). Но другое решение слишком посмотреть на HBase . Это основано на HDFS и позволяет вам запускать карту сокращений заданий нужного вам типа, миллионы мелких элементов. Но работа не будет подана и закончится где-то рядом с тем временем, которое вы ищете.

В настоящее время у меня есть тестовая база данных HBase с элементами RSS (2 млн. Элементов, несколько КБ на элемент). Общий размер БД ~ 5 Гб. Есть несколько заданий, которые работают с этой БД, сканируя все элементы и затем выводя результаты. Кластер будет сканировать элементы со скоростью ~ 5000 в секунду, но для выполнения задания все равно требуется около 10 минут.

...