Giải thích về bộ tích lũy tia lửa: Apache Spark



Blog Apache Spark này giải thích chi tiết về bộ tích lũy Spark. Tìm hiểu cách sử dụng bộ tích điện Spark với các ví dụ. Bộ tích lũy tia lửa giống như bộ đếm Hadoop Mapreduce.

Đóng góp bởi Prithviraj Bose

Đây là blog về những điều bạn cần biết về bộ tích điện Spark.Với là kỹ năng quan trọng mà hầu hết các nhà tuyển dụng CNTT săn lùng, tốc độ tăng trưởng và nhu cầu của nó trong ngành đã tăng theo cấp số nhân kể từ khi thành lập.





Bộ tích lũy là gì?

Bộ tích lũy là các biến được sử dụng để tổng hợp thông tin giữa các bộ thực thi. Ví dụ: thông tin này có thể liên quan đến dữ liệu hoặc chẩn đoán API như số lượng bản ghi bị hỏng hoặc số lần một API thư viện cụ thể đã được gọi.

Để hiểu lý do tại sao chúng ta cần bộ tích lũy, hãy xem một ví dụ nhỏ.



Đây là nhật ký giao dịch tưởng tượng của một chuỗi cửa hàng quanh khu vực trung tâm Kolkata.

logs-Spark-accumulators

Có 4 trường,

Trường 1 -> Thành phố



tìm số lớn nhất trong một mảng

Trường 2 -> Tổ dân phố

vòng đời hoạt động của android

Trường 3 -> Danh mục mặt hàng đã bán

Trường 4 -> Giá trị của mặt hàng đã bán

Tuy nhiên, các bản ghi có thể bị hỏng. Ví dụ: dòng thứ hai là dòng trống, dòng thứ tư báo cáo một số vấn đề về mạng và cuối cùng dòng cuối cùng hiển thị giá trị bán hàng bằng 0 (điều này không thể xảy ra!).

Chúng tôi có thể sử dụng bộ tích lũy để phân tích nhật ký giao dịch để tìm ra số lượng nhật ký trống (dòng trống), số lần mạng bị lỗi, bất kỳ sản phẩm nào không có danh mục hoặc thậm chí số lần doanh số bán hàng không được ghi lại. Toàn bộ nhật ký mẫu có thể được tìm thấy đây .
Bộ tích lũy có thể áp dụng cho bất kỳ hoạt động nào,
1. Giao hoán -> f (x, y) = f (y, x)
2. Liên tưởng -> f (f (x, y), z) = f (f (x, z), y) = f (f (y, z), x)
Ví dụ, Tổngtối đa các hàm thỏa mãn các điều kiện trên trong khi Trung bình cộng không làm.

Tại sao phải sử dụng Bộ tích lũy tia lửa?

Bây giờ tại sao chúng ta cần bộ tích lũy và tại sao không chỉ sử dụng các biến như được hiển thị trong đoạn mã bên dưới.

Vấn đề với đoạn mã trên là khi trình điều khiển in biến blankLines giá trị của nó sẽ bằng không. Điều này là do khi Spark gửi mã này cho mọi người thực thi, các biến trở thành cục bộ cho người thực thi đó và giá trị cập nhật của nó không được chuyển tiếp trở lại trình điều khiển. Để tránh vấn đề này, chúng ta cần thực hiện blankLines một bộ tích lũy để tất cả các cập nhật cho biến này trong mọi trình thực thi được chuyển tiếp trở lại trình điều khiển. Vì vậy, đoạn mã trên phải được viết là,

Điều này đảm bảo rằng bộ tích blankLines được cập nhật trên mọi người thực thi và các bản cập nhật được chuyển tiếp trở lại trình điều khiển.

cách viết một máy quét trong java

Chúng tôi có thể triển khai các bộ đếm khác cho lỗi mạng hoặc giá trị bán hàng bằng không, v.v. Có thể tìm thấy mã nguồn đầy đủ cùng với việc triển khai các bộ đếm khác đây .

Những người quen thuộc với Hadoop Map-Reduce sẽ nhận thấy rằng bộ tích lũy của Spark tương tự như bộ đếm Map-Reduce của Hadoop.

Cảnh báo

Khi sử dụng bộ tích lũy, có một số lưu ý mà chúng ta với tư cách là người lập trình cần lưu ý,

  1. Tính toán bên trong sự biến đổi được đánh giá một cách lười biếng, vì vậy trừ khi một hoạt động xảy ra trên RDD sự biến đổi không được thực hiện. Do đó, bộ tích lũy được sử dụng bên trong các chức năng như bản đồ() hoặc là bộ lọc () sẽ không được thực thi trừ khi một số hoạt động xảy ra trên RDD.
  2. Spark đảm bảo cập nhật bộ tích lũy phía trong hành động chỉ một lần . Vì vậy, ngay cả khi một nhiệm vụ được khởi động lại và dòng truyền thừa được tính lại, các tích lũy sẽ chỉ được cập nhật một lần.
  3. Spark không đảm bảo điều này cho sự biến đổi . Vì vậy, nếu một nhiệm vụ được khởi động lại và dòng truyền thừa được tính toán lại, có khả năng xảy ra các tác dụng phụ không mong muốn khi các bộ tích lũy sẽ được cập nhật nhiều lần.

Để an toàn, luôn CHỈ sử dụng bộ tích điện bên trong các hành động.
Mật mã đây cho thấy một ví dụ đơn giản nhưng hiệu quả về cách đạt được điều này.
Để biết thêm thông tin về bộ tích lũy, hãy đọc điều này .

Có một câu hỏi cho chúng tôi? Đề cập đến họ trong phần bình luận và chúng tôi sẽ liên hệ lại với bạn.

Bài viết liên quan:

Apache Spark kết hợpByKey Giải thích