Нужно ли устанавливать python (или jython) на каждом трекере задач?
узел
Да, поскольку он выполняется в трекерах задач.
Нужно ли устанавливать модули python (или jython) на каждую задачу?
узел трекера?
Если вы используете сторонний модуль, он также должен быть установлен в трекерах (например, geoip и т. Д.).
Нужно ли узлам трекера задач знать, как найти модули?
Если да, то как вы указываете путь (через переменную среды - как
это сделано для трекера задач)?
Как ответ из книги « Программирование Свинья »:
регистр также используется для поиска ресурсов для пользовательских функций Python, которые вы используете
в ваших свиньях латиницей. В этом случае вы не регистрируете банку, но
скорее сценарий Python, который содержит ваш UDF. Сценарий Python должен
быть в вашем текущем каталоге.
А также это важно:
Предостережение: Pig не отслеживает зависимости внутри ваших скриптов Python
и отправьте необходимые модули Python в ваш кластер Hadoop. Вы
необходимо убедиться, что необходимые вам модули находятся на узлах задач в
ваш кластер и что переменная окружения PYTHONPATH установлена на
эти узлы, так что ваши UDF смогут найти их для импорта.
Эта проблема была исправлена после 0.9, но на момент написания этой статьи еще не
освобожден.
А если вы используете Jython:
Свинья не знает, где в вашей системе находится интерпретатор Jython, поэтому
вы должны включить jython.jar в ваш classpath при вызове Pig. это
это можно сделать, установив переменную окружения PIG_CLASSPATH.
В итоге, если вы используете потоковую передачу, вы можете использовать команду "SHIP" в pig, которая отправит ваши исполняемые файлы в кластер. если вы используете UDF, если он может быть скомпилирован (см. примечание о jython) и в нем нет сторонней зависимости (которую вы еще не поместили в PYTHONPATH / или не установили в кластер), UDF будет быть отправлены в кластер при исполнении. (В качестве подсказки было бы намного проще, если бы при регистрации вы помещали простые зависимости UDF в одну папку со сценарием pig)
Надеюсь, это прояснит ситуацию.