7

У меня есть установка кластера с использованием Amazon EMR. У меня есть библиотека python (клонирована из github и недоступна на пипе) на S3.AWS EMR импортирует внешнюю библиотеку из S3

Я хочу представить работу свиньи, которая использует udf, которая использует библиотеку, присутствующую в S3.

Я не хочу добавлять библиотеку к системному пути, потому что она будет использоваться только один раз.

Я не смог попробовать что-либо значимое, потому что я нахожусь в недоумении, как подойти к этой проблеме, следовательно, у меня нет образцов кода или методов, которые я пробовал до сих пор. Помощь будет глубоко оценена! :)

ответ

0

внимательно прочитайте следующий материал.

Вызов пользовательских функций из Свиньи:

Pig обеспечивает возможность вызова пользовательских функций (UDF) внутри скриптов Pig. Вы можете сделать это, чтобы реализовать пользовательскую обработку для использования в сценариях Pig. В настоящее время поддерживаются языки Java, Python/Jython и JavaScript. (Хотя поддержка JavaScript все еще экспериментальна.)

В следующих разделах описывается, как зарегистрировать свои функции с помощью Pig, чтобы вы могли называть их либо из оболочки Pig, либо из сценариев Pig. Для получения дополнительной информации об использовании UDF с Pig перейдите на страницу http://pig.apache.org/docs/r0.14.0/udf.html.

вызовов JAR-файлы из Свиньи:

Вы можете использовать пользовательские JAR-файлы с Pig с помощью команды REGISTER в свинью сценария. Файл JAR является локальной или удаленной файловой системой, такой как Amazon S3. Когда скрипт Pig запускается, Amazon EMR загружает JAR-файл автоматически на главный узел, а затем загружает JAR-файл в распределенный кеш Hadoop. Таким образом, файл JAR автоматически используется по мере необходимости всеми экземплярами кластера.

Чтобы использовать JAR-файлы с Свиньи

1.Upload пользовательский JAR файл в Amazon S3.

2.Используйте команду REGISTER в сценарии Pig, чтобы указать ведро на Amazon S3 пользовательского JAR-файла.

REGISTER s3://mybucket/path/mycustomjar.jar; 

вызова Python/Jython скрипты от свинки

Вы можете зарегистрировать скрипты Python с Свиньи, а затем вызывать функции в этих сценариях из оболочки свиньи или в скрипте Pig. Вы делаете это, указав местоположение скрипта с ключевым словом register.

Поскольку Pig написан на Java, он использует механизм сценария Jython для синтаксического анализа скриптов Python. Для получения дополнительной информации о Jython перейдите на страницу http://www.jython.org/.

Для вызова сценария Python/Jython из Свиньи

1.Write Питона скрипт и загрузить скрипт в папку в Amazon S3. Это должно быть ведро, принадлежащее той же учетной записи, которая создает кластер Pig или у которого есть разрешения, поэтому учетная запись, созданная кластером, может получить к ней доступ.В этом примере сценарий загружается в

s3://mybucket/pig/python. 

2.Начать кластер свиней. Если вы будете получать доступ к Pig из оболочки Grunt, запустите интерактивный кластер. Если вы используете команды Pig из сценария, запустите скриптовый кластер Pig. В этом примере мы начнем интерактивный кластер.

3.Потому что мы запустили интерактивный кластер, теперь мы будем использовать SSH в главном узле, где мы можем запустить оболочку Grunt. Для получения дополнительной информации о том, как SSH в главном узле, см. SSH в главный узел.

4. Запустите оболочку Grunt для Pig, набрав свинью в командной строке.

pig 

5.Register библиотеки Jython и ваш сценарий Python с Pig, используя ключевое слово регистра на Грунта командной строки, как показано в следующем, где бы вы указать местоположение вашего скрипта в Amazon S3.

grunt> register 'lib/jython.jar'; 
grunt> register 's3://mybucket/pig/python/myscript.py' using jython as myfunctions; 

6.Загрузить входные данные. Следующий пример загружает данные из местоположения Amazon S3.

grunt> input = load 's3://mybucket/input/data.txt' using TextLoader as (line:chararray); 

7.Вы можете теперь вызывать функции в своем скрипте изнутри Pig, ссылаясь на них, используя myfunctions.

grunt> output=foreach input generate myfunctions.myfunction($1); 
Смежные вопросы