Я буду отдельно относиться к Java против Python, а затем отдельно относиться к MR против Hive / Pig - так как я рассматриваю это как две разные проблемы
Hadoop построен на Java и многие его возможности доступны через Java API, а Hadoop в основном можно расширить с помощью классов Java.
Hadoop do имеет возможность работать с заданиями MR, созданными на других языках - это называется потоковой передачей. Эта модель позволяет нам определять маппер и редуктор только с некоторыми ограничениями, отсутствующими в Java. В то же время - форматы ввода / вывода и другие плагины должны быть написаны как java классы
Поэтому я бы определил принятие решений следующим образом:
а) Используйте Java, если у вас нет серьезной кодовой базы, которую вы должны использовать в работе MR.
б) Подумайте об использовании python, когда вам нужно создать несколько простых специальных заданий.
Что касается свиньи / улья - это также java-ориентированные системы более высокого уровня. Hive может использоваться без какого-либо программирования, но он может быть расширен с помощью Java. Свинья требует Java с самого начала. Я думаю, что эти системы почти всегда предпочтительнее, чем MR, в тех случаях, когда их можно применять. Обычно это случаи, когда обработка выполняется как SQL.
Вопросы производительности между потоковой и нативной Java.
Потоковая передача входных данных в маппер через его входной поток. Это межпроцессное взаимодействие, которое по своей природе менее эффективно, чем внутрипроцессные данные, передаваемые между читателем и картографом в случае Java.
Я могу сделать следующие выводы сверху:
а) В случае некоторой обработки света (например, поиск подстроки, подсчет ...) эти издержки могут быть значительными, и решение Java будет более эффективным.
b) В случае некоторой тяжелой обработки, которая потенциально может быть реализована на некотором языке, отличном от Java, более эффективно - потоковое решение может иметь некоторое преимущество.
Особенности производительности свиней / улья.
Pig / Hive оба реализуют примитивы обработки SQL. Другими словами - они реализуют элементы плана выполнения в мире РСУБД. Эти реализации хороши и хорошо настроены. В то же время Hive (что-то, что я знаю лучше) является переводчиком. Он не выполняет генерацию кода - он интрепрпретит план выполнения в предварительно построенных заданиях MR. Это означает, что если у вас есть сложные условия sompe и вы напишете код специально для них - у вас есть все шансы сделать это намного лучше, чем у Hive, что представляет преимущество в производительности компилятора по сравнению с интерпретатором.