2016-08-07 20 views
7

Tôi đã thiết lập một cụm bằng cách sử dụng Amazon EMR. Tôi có một thư viện python (nhân bản từ github và không có sẵn trên pip) trên S3.AWS EMR nhập thư viện bên ngoài từ S3

Tôi muốn gửi một tác phẩm lợn sử dụng một udf sử dụng thư viện có trong S3.

Tôi không muốn thêm thư viện vào đường dẫn hệ thống vì nó sẽ chỉ được sử dụng một lần.

Tôi đã không thể thử bất cứ điều gì có ý nghĩa vì tôi đang thua lỗ cách tiếp cận vấn đề này, do đó không có bất kỳ mẫu mã hoặc phương pháp nào tôi đã thử cho đến nay. Trợ giúp sẽ được đánh giá sâu sắc! :)

Trả lời

0

đọc kỹ tài liệu đã cho sau đây.

Gọi User Defined Functions từ Pig:

Pig cung cấp khả năng gọi sử dụng chức năng định nghĩa (UDFs) từ bên trong kịch bản Pig. Bạn có thể làm điều này để thực hiện xử lý tùy chỉnh để sử dụng trong các tập lệnh Pig của bạn. Các ngôn ngữ hiện được hỗ trợ là Java, Python/Jython và JavaScript. (Mặc dù hỗ trợ JavaScript vẫn là thử nghiệm.)

Các phần sau mô tả cách đăng ký các chức năng của bạn với Pig để bạn có thể gọi chúng từ vỏ Pig hoặc từ trong tập lệnh Pig. Để biết thêm thông tin về cách sử dụng UDF với Pig, hãy truy cập http://pig.apache.org/docs/r0.14.0/udf.html.

file Gọi JAR từ Pig:

Bạn có thể sử dụng tập tin tùy chỉnh JAR với lợn bằng cách sử dụng lệnh REGISTER trong kịch bản Pig của bạn. Tệp JAR là cục bộ hoặc một hệ thống tệp từ xa như Amazon S3. Khi tập lệnh Pig chạy, Amazon EMR tự động tải tệp JAR xuống nút chính và sau đó tải tệp JAR lên bộ nhớ cache được phân phối Hadoop. Bằng cách này, tệp JAR được tự động sử dụng khi cần thiết cho tất cả các trường hợp trong cụm.

Để sử dụng các tập tin JAR với Pig

1.Upload tùy chỉnh tập tin JAR của bạn vào Amazon S3.

2.Sử dụng lệnh REGISTER trong tập lệnh Pig của bạn để chỉ định nhóm trên Amazon S3 của tệp JAR tùy chỉnh.

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

Gọi Python/Jython Scripts từ Pig

Bạn có thể đăng ký kịch bản với Pig Python và sau đó gọi hàm trong những kịch bản từ vỏ Pig hoặc trong một kịch bản Pig. Bạn làm điều này bằng cách xác định vị trí của kịch bản với từ khóa đăng ký.

Vì Pig được viết bằng Java, nó sử dụng công cụ tập lệnh Jython để phân tích cú pháp các tập lệnh Python. Để biết thêm thông tin về Jython, hãy truy cập http://www.jython.org/.

Để gọi một kịch bản Python/Jython từ Pig

1.Write một kịch bản Python và tải lên các kịch bản đến một vị trí ở Amazon S3. Đây phải là một nhóm thuộc sở hữu của cùng một tài khoản tạo cụm Pig hoặc có quyền được đặt để tài khoản tạo cụm có thể truy cập vào nhóm đó.Trong ví dụ này, tập lệnh được tải lên

s3://mybucket/pig/python. 

2.Bắt đầu cụm lợn. Nếu bạn sẽ truy cập Pig từ trình vỏ Grunt, hãy chạy một cụm tương tác. Nếu bạn đang chạy lệnh Pig từ một tập lệnh, hãy bắt đầu một cụm Pig theo kịch bản. Trong ví dụ này, chúng ta sẽ bắt đầu một cụm tương tác.

3.Bởi vì chúng tôi đã khởi chạy một cụm tương tác, bây giờ chúng tôi sẽ SSH vào nút chính nơi chúng tôi có thể chạy trình bao Grunt. Để biết thêm thông tin về cách SSH vào nút chính, hãy xem SSH vào Nút chính.

4.Run vỏ Grunt cho Pig bằng cách nhập lợn tại dòng lệnh.

pig 

5.Register thư viện Jython và kịch bản Python của bạn với lợn sử dụng từ khóa đăng ký tại Grunt command prompt, như thể hiện trong những điều sau đây, nơi bạn sẽ xác định vị trí của kịch bản của bạn trong Amazon S3.

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

6. Tải dữ liệu đầu vào. Ví dụ sau tải đầu vào từ vị trí Amazon S3.

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

7.Bây giờ bạn có thể gọi các chức năng trong tập lệnh của mình từ trong Pig bằng cách tham chiếu chúng bằng cách sử dụng các chức năng của tôi.

grunt> output=foreach input generate myfunctions.myfunction($1); 
Các vấn đề liên quan