Задать вопрос
martsen
@martsen
Программист-дроновод

Помощь в проектировании распределенной архитектуры

Здравствуйте!

Сейчас стоит задача построения распределенного хранилища. Исходные данные: 1) несколько (5 и более) гетерогенно-распределенных площадок 2) каждая площадка генерирует гигабайты/терабайты контента (текст, аудио, видео, записи в разные БД) 3) пользователям для работы нужны данные со всех площадок в равной степени 4) необходимо организовать быстрый поиск по всем файлам, а в будущем построить систему для анализа данных 5) нужна высокая доступность и отказоустойчивость

Сейчас планируем собирать все эти данные в одно единое хранилище, с которым смогут все работать.

Пока понемногу изучаю эту тему и стоит выбор технологии, которую будем использовать. Склоняюсь к развертыванию hadoop, т.к. HDFS и есть возможность разработать необходимый софт.

Вопросы: 1) Оптимален ли выбор Hadoop? Может есть какие-либо другие подходящие технологии? 2) Сейчас данные лежат на разных серверах. Надо будет все это переносить в HDFS или можно как-то "натравить" hadoop на имеющиеся данные без их переноса? Что делать с данными, которые лежат в реляционных БД? Надо будет каждый раз через какой-нибудь SQOOP тянуть их в HDFS для последующей обработки? В общем, надо ли запасаться еще целой кучей жестких дисков?

Буду благодарен за ответы, критику и ссылки на полезные статьи и публикации по этой теме.

  • Вопрос задан
  • 2897 просмотров
Подписаться 2 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 3
@relgames
Java Developer

Мы используем Cassandra. Минусы: сложно поддерживать, сложно работать с ней.

Hadoop в принципе не зависит от типа хранилища. YARN (их Map/Reduce 2.0) позволяет работать на любых данных.

Ответ написан
Комментировать
joann
@joann
Посмотрите Spark (spark.incubator.apache.org) и Hadoop от MapR
Ответ написан
Комментировать
@plinyar
Вопросы делают цели проекта более мутными.
С одной стороны вы говорите, что "нужна высокая доступность и отказоустойчивость", а потом идет вопрос "Сейчас данные лежат на разных серверах. Надо будет все это переносить в HDFS или можно как-то "натравить" hadoop на имеющиеся данные без их переноса?"

Соответственно производные вопросы:
* Эти данные и сервисы доступа к данным в гетерогенных площадках сами удовлетворяют требованиям доступности и отказоустойчивости?
* Интерфейсы доступа к площадкам из Hadoop-а (или аналога) удовлетворяют требованиям доступности и отказоустойчивости? Не возникает ли тут обычная проблема надежности систем с распределенными данными (data federation)?

Если не удовлетворяют, то логично концентрироваться на централизованном хранении в hadoop и соответственно сливе туда всех данных.
Если удовлетворяют, то разумным кажется комбинированное решение, состоящее из трех подсистем:
* Индексирование - обеспечение быстрого поиска по неструктурированным данным. Посмотрите SolrCloud, например, как составная часть Hadoop от Cloudera. Индексировать можете данные прямо из источников.
* Виртуализация данных - система, предоставляющая единый вид табличных данных над совокупностью разнородных распределенных баз данных (хоть в облаках). Нужно для детального drill-down анализа без необходимости перетаскивать все в центральное хранилище (Hadoop?). По-моему, такие решения есть у SAS, у SAP BI, Red Hat JBoss Data Virtualization
* BigData analysis - система, позволяющая делать анализ очень больших объемов. Здесь может быть и Hadoop. Ключевая особенность - в эту систему вы перетаскиваете только те очень большие данные, которые вам действительно нужно анализировать. А не все подряд.

Ну и не будем забывать, что в Hadoop не очень удобно хранить video/audio данные. На HDFS слишком много файлов не положите (есть ограничение по кол-ву файлов), а если файлы не большие, то отнимать будут они все-равно блоки по 256Мб (да умножить на 3). Если наоборот будете класть большие файлы в HBase, например, то, насколько мне известно, он не поддерживает потоковой передачи данных из бинарного поля - читать придется всегда весь массив байт одного видео материала. ИМХО, для этих целей больше подходят объектные хранилища, типа Swift (OpenStack). Хотя все зависит от сценариев использования.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы