Phân vùng làm sáng tỏ trong Spark



Blog này cho bạn biết tất cả những gì bạn cần biết về phân vùng trong Spark, các loại phân vùng và cách nó cải thiện tốc độ thực thi cho các chuyển đổi dựa trên khóa.

Đóng góp bởi Prithviraj Bose

Spark's Tập dữ liệu được phân phối có khả năng phục hồi (phần trừu tượng lập trình) được đánh giá một cách lười biếng và các phép biến đổi được lưu trữ dưới dạng đồ thị vòng có hướng (DAG). Vì vậy, mọi hành động trên RDD sẽ khiến Spark tính toán lại DAG. Đây là cách đạt được khả năng phục hồi trong Spark vì nếu bất kỳ nút công nhân nào bị lỗi thì DAG chỉ cần được tính toán lại.





Nó cũng là bắt buộc vào bộ nhớ cache (tồn tại với mức lưu trữ thích hợp) RDD sao cho các hành động thường xuyên trên RDD không buộc Spark phải tính toán lại DAG.Các chủ đề được đề cập trong blog này về cơ bản là bắt buộc đối với Chứng nhận Apache Spark và Scala. Các chủ đề được đề cập trong blog này về cơ bản là bắt buộc .

Tại sao lại sử dụng Partitioner?

Trong điện toán cụm, thách thức trung tâm là giảm thiểu lưu lượng mạng. Khi dữ liệu được định hướng khóa-giá trị, việc phân vùng trở nên bắt buộc vì đối với các lần chuyển đổi tiếp theo trên RDD, có một lượng dữ liệu xáo trộn hợp lý trên toàn mạng. Nếu các khóa hoặc dải khóa tương tự được lưu trữ trong cùng một phân vùng thì việc xáo trộn sẽ giảm thiểu và quá trình xử lý trở nên nhanh chóng đáng kể.



Các phép biến đổi yêu cầu xáo trộn dữ liệu giữa các nút công nhân được hưởng lợi rất nhiều từ việc phân vùng. Các phép biến đổi như vậy là cogroup, groupVới, tham gia, leftOuterJoin, rightOuterJoin, groupByKey, ReduceByKey, kết hợpByKeytra cứu .

Các phân vùng có thể được định cấu hình miễn là RDD dựa trên khóa-giá trị.

Thuộc tính của phân vùng

  1. Các bộ dữ liệu trong cùng một phân vùng được đảm bảo nằm trong cùng một máy.
  2. Mỗi nút trong một cụm có thể chứa nhiều hơn một phân vùng.
  3. Tổng số phân vùng có thể định cấu hình, theo mặc định, nó được đặt thành tổng số lõi trên tất cả các nút thực thi.

Các loại phân vùng trong Spark

Spark hỗ trợ hai kiểu phân vùng,

triển khai hàng đợi ưu tiên trong java
  • Phân vùng băm : Sử dụng Java Object.hashCode phương pháp xác định phân vùng là partition = key.hashCode ()% numPartitions.

hash-partitioning-demystifying-partitioning-in-spark



  • Phân vùng phạm vi : Sử dụng một phạm vi để phân phối cho các phân vùng tương ứng các khóa nằm trong một phạm vi. Phương pháp này phù hợp khi có thứ tự tự nhiên trong các phím và các phím không âm. Đoạn mã dưới đây cho thấy việc sử dụng trình phân vùng phạm vi.

Ví dụ về mã

Hãy xem ví dụ về cách phân vùng dữ liệu trên các nút công nhân. Mã Scala đầy đủ có sẵn đây .

Dưới đây là một số dữ liệu thử nghiệm của 12 tọa độ (dưới dạng bộ giá trị),

jit trong java là gì

Tạo ra một org.apache.spark.HashPartitioner có kích thước 2, trong đó các khóa sẽ được phân vùng trên hai phân vùng này dựa trên mã băm của các khóa.

Sau đó, chúng tôi có thể kiểm tra các cặp và thực hiện nhiều phép biến đổi dựa trên chính như foldByKeyReduceByKey.

Tóm lại, phân vùng cải thiện đáng kể tốc độ thực thi cho các phép biến đổi dựa trên khóa.

Có một câu hỏi cho chúng tôi? Vui lòng đề cập đến nó 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:

truyền kiểu rõ ràng trong java

Tại sao bạn nên học Spark sau khi thành thạo Hadoop

Apache Spark Vs Hadoop MapReduce