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: controller
và stderr
. 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
Bạn đã gửi công việc nào cho EMR với thông số nào? – user3154952
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/...' –
@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