Обрабатывает ли Hadoop maprecece весь набор данных? - PullRequest
2 голосов
/ 27 декабря 2011

Я хотел знать: Обрабатывает ли hadoop mapreduce весь набор данных, если одно и то же задание было отправлено дважды? Например: пример подсчета слов подсчитывает вхождение каждого слова в каждый файл во входной папке. Если бы мне нужно было добавить файл в эту папку и перезапустить задание mapreduce для подсчета слов, будут ли начальные файлы перечитаны, переназначены и повторно сокращены?

Если это так, есть ли способ настроить hadoop для обработки ТОЛЬКО новых файлов и добавить его в «сводку» из предыдущих запусков mapreduce.

Будем благодарны за любую мысль / помощь.

Ответы [ 3 ]

3 голосов
/ 27 декабря 2011

Если я добавлю файл в эту папку и перезапущу задание mapreduce для подсчета слов, будут ли начальные файлы перечитываться, сопоставляться и уменьшаться?

Hadoop обработает все данные при повторном запуске.Выходные данные сопоставителей и временные данные удаляются после успешного завершения задания.

Если это так, есть ли способ настроить hadoop для обработки ТОЛЬКО новых файлов и добавления их в "Сводка "из предыдущих запусков mapreduce.

Hadoop как есть, не поддерживает такой сценарий, но вы можете написать собственный InputFormat, который проверяет необработанные или новые файлы, и CutFormat Output, который добавитданные к сводке из предыдущего прогона.Или же после запуска задания новые обрабатываемые файлы могут быть помещены в другую входную папку, и пусть задание обрабатывает только файлы в новой папке.

Проверьте эту статью в создании пользовательских форматов ввода / вывода.

Я не уверен в точных требованиях, но вы также можете рассмотреть рамки, которые обрабатывают потоки данных, такие как HStreaming , S4 Twitter Storm и др.

0 голосов
/ 28 декабря 2011

Сам Hadoop не поддерживает частичный просмотр данных, как уже упоминалось.Вы можете получить желаемую функциональность. Если вы используете HBase в качестве источника для карты, уменьшите ее и проведете сканирование с соответствующим фильтром (например, по отметке времени, превышающей последний запуск)

0 голосов
/ 27 декабря 2011

Я согласен со всем, что говорит Правин. Я предоставлю конкретный способ, которым я лично обработаю это в моем кластере.


Когда я помещаю файлы в HDFS, я помещаю их в папку по минутам, основываясь на системных часах.

$ hadoop fs -put thisfile1249.txt /tmp/
$ hadoop fs -mv /tmp/thisfile1249.txt `date "+/data/%Y/%m/%d/%H/%M/"`

Посмотрим, как будет выглядеть путь:

$ echo `date "+/data/%Y/%m/%d/%H/%M/"`
/data/2011/12/27/09/49/

Это означает, что по мере поступления файлов они будут попадать в папку с каждой минутой. Поскольку время монотонно увеличивается, когда вы запускаете папку, вы знаете, что вам не придется возвращаться и снова бегать по этой папке. Если вы хотите запускать работу каждый час, вы можете просто указать путь ввода /data/2011/12/27/08. Ежедневно будет /data/2011/12/26 и т. Д.

...