Рассматривая комбинацию MapReduce и HBase с точки зрения потока данных, моя проблема кажется подходящей. У меня есть большой набор документов, которые я хочу отображать, объединять и уменьшать. Моя предыдущая реализация SQL заключалась в том, чтобы разделить задачу на пакетные операции, кумулятивно сохранить то, что было бы результатом Карты в таблицу, а затем выполнить эквивалент сокращения. Это имело то преимущество, что в любой момент во время исполнения (или между казнями) у меня были результаты Карты в тот момент.Кэширование приложений карты в Hadoop MapReduce?
Как я понимаю, выполнение этой работы в MapReduce потребует выполнения всех функций Map каждый раз.
Мои функции карты (и действительно любая функция) всегда дают одинаковый выход для данного входа. Просто нет смысла перечитывать вывод, если мне это не нужно. Мой ввод (набор документов) будет постоянно расти, и я буду периодически запускать свою операцию MapReduce по данным. Между казнями мне действительно нужно только вычислить функции Карты для вновь добавленных документов.
Мои данные, вероятно, будут HBase -> MapReduce -> HBase. Учитывая, что Hadoop представляет собой целую экосистему, он может знать, что данная функция применяется к строке с данным идентификатором. Я принимаю неизменные записи в таблице HBase. Может ли Hadoop учитывать это?
Я получил информацию из документации (особенно видео Cloudera), что повторный расчет (потенциально избыточных данных) может быть быстрее, чем сохранение и получение класса проблем, к которому используется Hadoop.
Любые комментарии/ответы?
Я не совсем уверен, какие схемы вы можете иметь с HBase, но я думал, что это всегда Key => Значение, где Key уникален. Получают ли промежуточные выходы (из функций карты) эту структуру, учитывая, что у меня может быть много выходов с одним и тем же ключом? Кроме того, я думаю, что ваше предложение будет означать слияние вывода из одного запуска с предыдущим. Это возможно? Я предположил, что результат выполнения MR опустошил пункт назначения (каталог FS или таблица BigTable)? – Joe
HBase поддерживает строки и столбцы; разница в РСУБД (кратко) заключается в том, что транзакции недоступны по строкам (но у вас могут быть кислотные гарантии при обновлении разных столбцов в одной строке), а столбцы разрежены - у вас может быть много столбцов, а разные строки могут имеют разные столбцы. В регулярном MR добавление невозможно (проблема HDFS), но с HBase вы можете просто вставить больше строк в таблицу, поэтому я думаю, что она должна работать. – SquareCog