Тестирование Hadoop с использованием MRUnit
Я модифицирую кучу существующих модульных тестов Hadoop, которые ранее выполнялись в кластере в памяти (используя MiniMRCluster), в MRUnit. Существующие тестовые сценарии, по сути, предоставляют входные данные для фазы Map, а затем тестируют выходные данные для фазы Reduce.
У меня три вопроса, и лучший ответ на любой из них будет отвечать:
1) Что я теряю, архитектурно, модульным тестированием с MRUnit вместо кластера в памяти?
2) Стоит ли разбивать существующие тестовые примеры на тесты только по карте и тесты только по сокращению или нет? Есть ли случаи, когда мне пришлось бы их разбивать?
3) Существуют ли какие-либо сценарии тестирования, которые MRUnit не может охватить?
2 ответа
Процесс модернизации научил меня некоторым потенциальным ответам, которые я собираюсь опубликовать здесь. Я все же предпочел бы услышать, что говорят другие, поэтому я не приму этот ответ.
1) Я теряю как минимум две вещи. Во-первых, сантехника МР издевается. Таким образом, есть вероятность, что некоторые из "насмешек" скрывают проблему, которая может существовать в работе MR. Во-вторых, задание MR состоит из ввода из файловой системы и вывода в файловую систему, в дополнение к разбиению и упорядочению между картой и фазой сокращения. MRUnit не полностью обрабатывает эти аспекты Hadoop, поэтому, если работа MR зависит от этих функций, они не могут быть протестированы. Тем не менее, все еще можно переписать тесты, чтобы протестировать только части Map/Reduce.
2) По большей части не стоит разбивать существующие тесты. Если существующий тест зависит, например, от разделителя, то может иметь смысл разбить тест, чтобы можно было протестировать Map и Reduce без участия разделителя. В целом, однако, не стоит делать "просто делать это".
3) Да - разделители на одного. Выходные форматы для другого. Это может быть не так уж важно для некоторых людей, но многие из наших существующих работ основаны на этих двух функциях, и, поскольку модульные тесты соответствуют окончательному выводу из выходного формата, мне приходится переписывать довольно много тестов. заставить их работать.
[редактировать]
просто прочитайте сообщение в блоге от Cloudera, в котором также содержится ответ:
http://www.cloudera.com/blog/2009/07/debugging-mapreduce-programs-with-mrunit/
Взгляните на MRUNIT-101, примерно через неделю мы добавим возможность тестировать реальные выходные форматы.