2009-11-07 7 views
2

Рассматривая комбинацию MapReduce и HBase с точки зрения потока данных, моя проблема кажется подходящей. У меня есть большой набор документов, которые я хочу отображать, объединять и уменьшать. Моя предыдущая реализация SQL заключалась в том, чтобы разделить задачу на пакетные операции, кумулятивно сохранить то, что было бы результатом Карты в таблицу, а затем выполнить эквивалент сокращения. Это имело то преимущество, что в любой момент во время исполнения (или между казнями) у меня были результаты Карты в тот момент.Кэширование приложений карты в Hadoop MapReduce?

Как я понимаю, выполнение этой работы в MapReduce потребует выполнения всех функций Map каждый раз.

Мои функции карты (и действительно любая функция) всегда дают одинаковый выход для данного входа. Просто нет смысла перечитывать вывод, если мне это не нужно. Мой ввод (набор документов) будет постоянно расти, и я буду периодически запускать свою операцию MapReduce по данным. Между казнями мне действительно нужно только вычислить функции Карты для вновь добавленных документов.

Мои данные, вероятно, будут HBase -> MapReduce -> HBase. Учитывая, что Hadoop представляет собой целую экосистему, он может знать, что данная функция применяется к строке с данным идентификатором. Я принимаю неизменные записи в таблице HBase. Может ли Hadoop учитывать это?

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

Любые комментарии/ответы?

ответ

1

Если вы хотите, чтобы избежать запуска карты шага каждый раза, разбить его, как его (либо с помощью IdentityReducer, либо с установкой количества редукторов для задания на 0), и выполните последующие шаги, используя вывод вашего шага карты.

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

Обратите внимание, что для запуска ваших mapper на новых наборах данных не будет добавляться к предыдущим запускам, но вы можете обойти это, используя устаревшую папку вывода. Это означает, что вы можете сохранить результат сопоставления первой партии файлов в my_mapper_output/20091101 и партии следующей недели в my_mapper_output/20091108 и т. Д. Если вы хотите уменьшить по всему набору, вы должны пройти в my_mapper_output в качестве входную папку и уловить все наборы выходных данных.

1

Почему бы не применить рабочий процесс SQL в другой среде? Смысл, добавьте «обработанный» столбец в таблицу ввода. Когда придет время для запуска сводки, запустите конвейер, который выглядит примерно так:

map (map_function) on (входная таблица отфильтрована по!); храните в map_outputs либо в hbase, либо просто в hdf.

карта (функция уменьшения) on (map_outputs); хранить в hbase.

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

Вот интересная презентация, которая показывает, как одна компании архитектуру своего рабочего процесса (хотя они не используют Hbase): http://www.scribd.com/doc/20971412/Hadoop-World-Production-Deep-Dive-with-High-Availability

+0

Я не совсем уверен, какие схемы вы можете иметь с HBase, но я думал, что это всегда Key => Значение, где Key уникален. Получают ли промежуточные выходы (из функций карты) эту структуру, учитывая, что у меня может быть много выходов с одним и тем же ключом? Кроме того, я думаю, что ваше предложение будет означать слияние вывода из одного запуска с предыдущим. Это возможно? Я предположил, что результат выполнения MR опустошил пункт назначения (каталог FS или таблица BigTable)? – Joe

+0

HBase поддерживает строки и столбцы; разница в РСУБД (кратко) заключается в том, что транзакции недоступны по строкам (но у вас могут быть кислотные гарантии при обновлении разных столбцов в одной строке), а столбцы разрежены - у вас может быть много столбцов, а разные строки могут имеют разные столбцы. В регулярном MR добавление невозможно (проблема HDFS), но с HBase вы можете просто вставить больше строк в таблицу, поэтому я думаю, что она должна работать. – SquareCog