Ответ 1
Зачем рассматривать развертывание пользовательских банок?
- Возможность использования более мощных пользовательских форматов ввода. Для потоковых заданий, даже если вы используете подключаемый ввод/вывод, как он упоминал здесь, вы ограничены ключом и значением (-ами) для вашего картографа/редуктор - текст/строка. Вам нужно будет затратить некоторое количество циклов процессора для преобразования в требуемый тип.
- Ive также слышал, что Hadoop может быть разумным в отношении повторного использования JVM по нескольким заданиям, которые не будут возможны при потоковой передаче (не могут подтвердить это)
Когда использовать свиньи?
- Pig Latin довольно крутой и является языком с более высоким уровнем потока данных, чем java/python или perl. Ваши скрипты Pig будут намного меньше, чем эквивалентная задача, написанная на любом другом языке.
Когда НЕ использовать свинью?
- Несмотря на то, что свиньи очень хорошо разбираются в себе, сколько карт/сокращений и когда нужно создавать карту или уменьшать и несметное количество таких вещей, если вы не уверены, сколько карт вам нужно, и у вас есть очень специфическое вычисление, которое вам нужно делать в своих функциях Map/Reduce, и вы очень конкретно относитесь к производительности, тогда вам следует рассмотреть возможность развертывания своих собственных банок. Эта ссылка показывает, что свиньи может отставать от собственного хаоса M/R в производительности. Вы также можете взглянуть на написание собственного Pig UDFs, которые изолируют некоторую вычислительную интенсивную функцию (и, возможно, даже используют JNI для вызова некоторого собственного C/С++ код внутри UDF)
Примечание о заданиях с привязкой к IO и CPU:
- Технически говоря, весь смысл сокращения и сокращения карты - это распараллеливать вычислительные интенсивные функции, поэтому я предполагаю, что ваша карта и сокращение рабочих мест будут интенсивными. Единственный раз, когда подсистема Hadoop занята, когда IO находится между картой и уменьшает фазу, когда данные отправляются по сети. Также, если у вас большой объем данных, и вы вручную настроили слишком мало карт и уменьшили количество выпадений на диск (хотя слишком много задач приведет к слишком большому количеству времени, затрачиваемому на запуск/остановку JVM и слишком большого количества небольших файлов). В потоковом задании также будут дополнительные накладные расходы на запуск виртуальной машины Python/Perl и копирование данных между JVM и виртуальной машиной сценариев.