Мне нужны хорошие рекомендации по использованию Hadoop для систем реального времени, таких как поиск с небольшим временем отклика. Я знаю, что у Hadoop есть свои накладные расходы на hdfs, но как лучше всего это сделать с помощью Hadoop.
приближение к реальному времени с помощью hadoop
Ответы (3)
Вам нужно предоставить гораздо больше информации о целях и проблемах вашей системы, чтобы получить хороший совет. Возможно, Hadoop — это не то, что вам нужно, и вам просто нужны какие-то распределенные системы foo? (О, и вы полностью уверены, что вам нужна распределенная система? Вы можете сделать очень много с реплицированной базой данных поверх пары машин с большой памятью).
Ничего не зная о вашей проблеме, я дам вам несколько попыток ответить в темноте.
- Взгляните на HBase, который предоставляет структурированное запрашиваемое хранилище данных поверх HDFS, похожее на BigTable от Google. http://hadoop.apache.org/hbase/
- Возможно, вам просто нужна помощь в управлении репликацией и сегментированием данных. Попробуйте Gizzard, промежуточное ПО для этого: http://github.com/twitter/gizzard
- Обработку всегда можно сделать заранее. Если это означает, что вы материализуете слишком много данных, может быть, что-то вроде Lucandra может помочь — Lucene работает поверх Cassandra в качестве серверной части? http://github.com/tjake/Lucandra
Если вам действительно нужно выполнять серьезную обработку во время запроса, способ сделать это — запустить выделенные процессы, которые выполняют определенные виды вычислений, которые вам нужны, и использовать что-то вроде Thrift для отправки запросов на вычисления и получения результатов обратно. Оптимизируйте их, чтобы все необходимые данные хранились в памяти. Процесс, который сам получает запрос, не может ничего сделать, кроме как разбить проблему на части, отправить части на вычислительные узлы и собрать результаты. Это похоже на Hadoop, но не потому, что он создан для решения конкретных задач с предварительно загруженными данными, а не для универсальной вычислительной модели для произвольных вычислений.
Hadoop — совершенно неподходящий инструмент для такого рода требований. Он явно оптимизирован для больших пакетных заданий, которые выполняются от нескольких минут до часов или даже дней.
FWIW, HDFS не имеет ничего общего с накладными расходами. Дело в том, что задания Hadoop развертывают jar-файл на каждом узле, настраивают рабочую область, запускают каждое задание, передают информацию через файлы между этапами вычислений, сообщают о ходе выполнения и статусе исполнителю заданий и т. д. и т. д.
Этот запрос старый, но он требует ответа. Даже если есть миллионы документов, но они не меняются в режиме реального времени, как документы часто задаваемых вопросов, Lucene + SOLR для распространения должно в значительной степени удовлетворить потребность. Hathi Trust индексирует миллиарды документов, используя одну и ту же комбинацию.
Совсем другая проблема, если индекс меняется в реальном времени. Даже у Lucene будут проблемы с обновлением индекса, и вам придется смотреть на поисковые системы в реальном времени. Были попытки переработать Lucene для реального времени, и, возможно, это должно сработать. Вы также можете ознакомиться с HSearch, распределенной поисковой системой реального времени, созданной на основе Hadoop и HBase и размещенной по адресу http://bizosyshsearch.sourceforge.net