2017-03-06 24 views
9

Tôi đang chạy một công việc Spark rất đơn giản trên AWS EMR và dường như không nhận được bất kỳ kết xuất nhật ký nào từ tập lệnh của tôi.AWS EMR Ghi nhật ký tia lửa ảo

Tôi đã thử với in ấn để stderr:

from pyspark import SparkContext 
import sys 

if __name__ == '__main__': 
    sc = SparkContext(appName="HelloWorld") 
    print('Hello, world!', file=sys.stderr) 
    sc.stop() 

Và sử dụng logger tia lửa như here:

from pyspark import SparkContext 

if __name__ == '__main__': 
    sc = SparkContext(appName="HelloWorld") 

    log4jLogger = sc._jvm.org.apache.log4j 
    logger = log4jLogger.LogManager.getLogger(__name__) 
    logger.error('Hello, world!') 

    sc.stop() 

EMR mang lại cho tôi hai tập tin log sau khi công việc chạy: controllerstderr . Nhật ký không chứa chuỗi "Hello, world!". Đó là sự hiểu biết của tôi stdout được chuyển hướng đến stderr trong tia lửa. Nhật ký stderr cho thấy công việc được chấp nhận, chạy và hoàn tất thành công.

Vì vậy, câu hỏi của tôi là, tôi có thể xem đầu ra nhật ký của tập lệnh của mình ở đâu? Hoặc những gì tôi nên thay đổi trong kịch bản của tôi để đăng nhập một cách chính xác?

Edit: Tôi sử dụng lệnh này để gửi các bước:

aws emr add-steps --region us-west-2 --cluster-id x-XXXXXXXXXXXXX --steps Type=spark,Name=HelloWorld,Args=[--deploy-mode,cluster,--master,yarn,--conf,spark.yarn.submit.waitAppCompletion=true,s3a://path/to/simplejob.py],ActionOnFailure=CONTINUE 
+0

Bạn đã gửi công việc nào cho EMR với thông số nào? – user3154952

+1

Tôi đã tìm thấy rằng việc ghi nhật ký các bước cụ thể gần như không bao giờ tăng lên trong nhật ký bộ điều khiển hoặc bản ghi nhật ký mà bảng điều khiển EMR kéo dọc theo bước. Thông thường tôi tìm thấy những gì tôi muốn trong các bản ghi container của công việc (và thường là nó trong stdout). Chúng thường ở một đường dẫn như 's3: // mybucket/logs/emr/spark/j-XXXXXX/containers/application_XXXXXXXXX/container_XXXXXXX/...' –

+0

@GregReda Tôi tìm thấy nhật ký ở đó. Cảm ơn bạn! Nếu bạn đăng nó như là câu trả lời tôi sẽ chấp nhận nó. – jarbaugh

Trả lời

4

tôi đã tìm thấy rằng khai thác gỗ EMR cho bước cụ thể hầu như không bao giờ gió lên trong điều khiển hoặc stderr các bản ghi mà có được kéo cùng với các bước trong Bảng điều khiển AWS.

Thông thường tôi tìm thấy những gì tôi muốn trong các nhật ký container của công việc (và thường là ở chế độ stdout).

Đây thường là đường dẫn như s3://mybucket/logs/emr/spark/j-XXXXXX/containers/application‌​_XXXXXXXXX/container‌​_XXXXXXX/.... Bạn có thể cần phải poke xung quanh trong các thư mục application_...container_... khác nhau trong phạm vi containers.

Thư mục vùng chứa cuối cùng phải có stdout.logstderr.log.

0

Để bắt đầu ra của kịch bản bạn có thể thử một cái gì đó như dưới đây cũng

/usr/bin/spark-submit --master yarn --num-executors 300 myjob.py param1 > s3://databucket/log.out 2>&1 & 

này sẽ viết ra kịch bản vào một file log ở vị trí s3.

Các vấn đề liên quan