2015-08-04 22 views
5

Tôi đang viết một tập tin gỗ từ DataFrame đến S3. Khi tôi nhìn vào giao diện người dùng Spark, tôi có thể xem tất cả các tác vụ nhưng 1 hoàn thành nhanh chóng giai đoạn viết (ví dụ: 199/200). Tác vụ cuối cùng này dường như mất vĩnh viễn để hoàn thành, và rất thường xuyên, nó không thành công do vượt quá giới hạn bộ nhớ thi hành.Spark viết Parquet đến S3 nhiệm vụ cuối cùng mất mãi mãi

Tôi muốn biết điều gì đang xảy ra trong nhiệm vụ cuối cùng này. Làm thế nào để tối ưu hóa nó? Cảm ơn.

+0

Tôi nhận thấy rằng người thực hiện nhiệm vụ cuối cùng này có nhiều lượt đọc ngẫu nhiên hơn so với các người thi hành đã hoàn thành khác. Điều này có nghĩa là phân vùng không phải là tối ưu? Làm thế nào để tránh nó? – user2680514

+0

Tôi đang sử dụng Spark 1.3.1 – user2680514

+0

Để xác định xem liệu dữ liệu có bị lệch hay không thì chúng tôi cần thêm thông tin về kích thước của tệp cuối cùng so với các tệp khác. Với những gì bạn nói về lỗi OOM, tôi nghĩ rằng dữ liệu nghiêng là vấn đề. Nếu không có một số mã, sẽ rất khó để giúp đỡ trong bất cứ điều gì nhưng một thử-này thử theo cách đó. – BAR

Trả lời

0

Có vẻ như bạn có dữ liệu nghiêng. Bạn có thể sửa lỗi này bằng cách gọi repartition trên DataFrame trước khi ghi vào S3.

0

Bài viết này - The Bleeding Edge: Spark, Parquet and S3 có rất nhiều thông tin hữu ích về Spark, S3 và Parquet. Đặc biệt, nó nói về cách trình điều khiển kết thúc bằng cách viết ra các tập tin _common_metadata_ và có thể mất khá nhiều thời gian. Có một cách để tắt nó đi.

Thật không may, họ nói rằng họ tiếp tục tự tạo ra siêu dữ liệu chung, nhưng không thực sự nói về cách họ làm như vậy.

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