2016-08-07 47 views
7

Mam konfigurację klastra przy użyciu usługi Amazon EMR. Mam biblioteki Pythona (sklonowany z github i niedostępne na pip) na S3.AWS EMR importuj bibliotekę zewnętrzną od S3

Chcę przesłać pracę świni, która używa udf, który korzysta z biblioteki obecnej w S3.

Nie chcę dodawać biblioteki do ścieżki systemowej, ponieważ będzie ona używana tylko raz.

Nie byłem w stanie wypróbować niczego sensownego, ponieważ jestem zagubiony, jak podejść do tego problemu, dlatego nie mam żadnych próbek kodu ani metod, które próbowałem do tej pory. Pomoc zostanie głęboko doceniona! :)

Odpowiedz

0

uważnie przeczytaj poniższy materiał.

połączeń User Defined Functions z Pig:

Pig zapewnia możliwość wywoływania funkcji zdefiniowanych przez użytkownika (UDF) z poziomu skryptów świni. Możesz to zrobić, aby zaimplementować niestandardowe przetwarzanie do użycia w skryptach Pig. Obecnie obsługiwane języki to Java, Python/Jython i JavaScript. (Chociaż obsługa JavaScript jest nadal eksperymentalna.)

Poniższe sekcje opisują sposób rejestrowania funkcji za pomocą Pig, aby można było wywoływać je z powłoki Pig lub ze skryptów Pig. Aby uzyskać więcej informacji na temat korzystania z funkcji UDF w środowisku Pig, przejdź do strony http://pig.apache.org/docs/r0.14.0/udf.html.

pliki JAR połączeń z Pig:

Można używać plików zwyczaj słoik z Pig używając polecenia REGISTER w skrypcie świni. Plik JAR jest lokalnym lub zdalnym systemem plików, takim jak Amazon S3. Po uruchomieniu skryptu Pig, program Amazon EMR automatycznie pobiera plik JAR do węzła głównego, a następnie przesyła plik JAR do rozproszonej pamięci podręcznej Hadoop. W ten sposób plik JAR jest automatycznie używany w razie potrzeby przez wszystkie wystąpienia w klastrze.

Aby korzystać z plików JAR z Pig

1.Upload niestandardowy plik JAR do Amazon S3.

2. Użyj polecenia REGISTER w skrypcie Pig, aby określić zasobnik na Amazon S3 niestandardowego pliku JAR.

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

połączeń Python/Jython skrypty z Pig

Można zarejestrować skrypty Pythona w Pig a następnie wywołać funkcje w tych skryptów powłoki Pig lub w skrypcie Pig. Robisz to, określając lokalizację skryptu za pomocą słowa kluczowego register.

Ponieważ Pig jest napisany w Javie, wykorzystuje mechanizm skryptowy Jython do analizowania skryptów Python. Aby uzyskać więcej informacji o Jython, przejdź do http://www.jython.org/.

Aby wywołać skrypt Pythona/Jython z Pig

1.Write skrypt Pythona i wgrać skrypt do lokalizacji w Amazon S3. Powinien to być wiadro należące do tego samego konta, które tworzy klaster Pig lub ma ustawione uprawnienia, aby konto, które utworzyło klaster, mogło uzyskać do niego dostęp.W tym przykładzie skrypt jest wysyłany pod numer

2. Uruchomienie klastra wieprzowego. Jeśli będziesz uzyskiwać dostęp do Pig z powłoki Grunt, uruchom interaktywny klaster. Jeśli używasz komend Pig z poziomu skryptu, uruchom skryptowany klaster Pig. W tym przykładzie rozpoczniemy interaktywny klaster.

3.Po uruchomieniu interaktywnego klastra, będziemy teraz SSH do węzła głównego, w którym możemy uruchomić powłokę Grunt. Aby uzyskać więcej informacji o tym, jak SSH do węzła głównego, zobacz SSH do węzła głównego.

4.Run powłoki Chrumka dla świni, wpisując świnia w linii poleceń.

pig 

5.Register biblioteki Jython i skrypt Pythona z Pig używając słowa kluczowego rejestr w Grunt wiersz polecenia, jak pokazano poniżej, w którym należy podać lokalizację skryptu w Amazon S3.

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

6. Załaduj dane wejściowe. Poniższy przykład ładuje dane wejściowe z lokalizacji Amazon S3.

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

7. Możesz teraz wywoływać funkcje w skrypcie z poziomu Pig, odwołując się do nich za pomocą funkcji myfunctions.

grunt> output=foreach input generate myfunctions.myfunction($1);