Tôi đang làm việc trên dự án phát trực tuyến Scala (2.11)/Spark (1.6.1) và sử dụng mapWithState()
để theo dõi dữ liệu đã xem từ các đợt trước.Spark Bản đồ phát trực tuyếnWithState dường như xây dựng lại trạng thái hoàn chỉnh theo định kỳ
Trạng thái được phân phối trong 20 phân vùng trên nhiều nút, được tạo bằng StateSpec.function(trackStateFunc _).numPartitions(20)
. Trong trạng thái này, chúng tôi chỉ có một vài phím (~ 100) được ánh xạ tới Sets
với hơn ~ 160.000 mục, tăng lên trong toàn bộ ứng dụng. Toàn bộ tiểu bang lên đến 3GB
, có thể được xử lý bởi mỗi nút trong cụm. Trong mỗi lô, một số dữ liệu được thêm vào trạng thái nhưng không bị xóa cho đến khi kết thúc quá trình, nghĩa là ~ 15 phút.
Trong khi theo dõi giao diện người dùng ứng dụng, mỗi lần xử lý của lô thứ 10 rất cao so với các lô khác. Xem hình ảnh:
Các trường vàng đại diện cho thời gian xử lý cao.
Một chi tiết hơn xem công việc cho thấy rằng trong những đợt xảy ra tại một điểm nhất định, chính xác khi nào tất cả 20 phân vùng đã được "bỏ qua". Hoặc đây là những gì giao diện người dùng nói.
sự hiểu biết của tôi về skipped
là mỗi phân vùng nhà nước là một trong những nhiệm vụ càng tốt mà không được thực hiện, như nó không cần phải được tính toán lại. Tuy nhiên, tôi không hiểu tại sao số lượng skips
thay đổi trong mỗi Công việc và tại sao Công việc cuối cùng đòi hỏi quá trình xử lý nhiều. Thời gian xử lý cao hơn xảy ra bất kể kích thước của nhà nước, nó chỉ ảnh hưởng đến thời gian.
Đây có phải là lỗi trong chức năng mapWithState()
hoặc là hành vi dự định này không? Cấu trúc dữ liệu cơ bản có yêu cầu một số loại thay đổi lại không, Set
trong tiểu bang có cần sao chép dữ liệu không? Hoặc là nó có nhiều khả năng là một lỗ hổng trong ứng dụng của tôi?
Trong trường hợp của tôi, tôi có thể thấy rằng mọi công việc đều được kiểm tra trong lô. Tại sao không chỉ là công việc cuối cùng? Giải pháp của bạn để theo dõi quy mô của tiểu bang là gì? Để có thể tối ưu hóa nó. – crak
@crak Khoảng thời gian kiểm tra của bạn là gì? Và làm thế nào bạn thấy rằng mọi công việc đều kiểm tra dữ liệu? –
Cứ 10 lô. Mắt tôi đã bị lạm dụng, tôi có 12 công việc trên 16 mà làm checkpoint. Và đó là logic, tôi có 12 mapWithState, tôi có thể thấy dấu chân trong tia lửa. Nhưng không biết cái nào có kích thước lớn nhất. mapWithState lưu trữ chỉ cần nhà nước không giống như cấy ghép trước đó? – crak