2017-01-11 27 views
8

Hãy để tôi giúp làm rõ về trộn trong chiều sâu và cách Spark sử dụng shuffle manager. Tôi báo cáo một số tài nguyên rất hữu ích:Tìm hiểu trình quản lý phát ngẫu nhiên trong Spark

https://trongkhoanguyenblog.wordpress.com/

https://0x0fff.com/spark-architecture-shuffle/

https://github.com/JerryLead/SparkInternals/blob/master/markdown/english/4-shuffleDetails.md

Reading họ, tôi hiểu có những nhà quản lý phát ngẫu nhiên khác nhau. Tôi muốn tập trung vào hai trong số đó: hash managersort manager (là trình quản lý mặc định).

Đối phơi bày câu hỏi của tôi, tôi muốn bắt đầu từ một sự chuyển đổi rất phổ biến:

val rdd = reduceByKey(_ + _) 

chuyển đổi này gây đồ-side aggregation và sau đó xáo trộn để đưa tất cả các phím tương tự vào cùng một phân vùng .

Câu hỏi của tôi là:

  • là Map-Side hợp triển khai sử dụng trong nội bộ một chuyển đổi mapPartition và do đó tập hợp tất cả các phím tương tự bằng cách sử dụng chức năng kết hợp hoặc là nó thực hiện với một AppendOnlyMap hoặc ExternalAppendOnlyMap?

  • Nếu AppendOnlyMap hoặc ExternalAppendOnlyMap bản đồ được sử dụng để tập hợp, là họ cũng sử dụng cho giảm phụ hợp điều đó xảy ra vào ResultTask?

  • Mục đích ngoại lệ về hai loại bản đồ này (AppendOnlyMap hoặc ExternalAppendOnlyMap) là gì?

  • Có phải AppendOnlyMap hoặc ExternalAppendOnlyMap được sử dụng từ tất cả các trình quản lý ngẫu nhiên hoặc chỉ từ người quản lý sắp xếp?

  • tôi đọc rằng sau AppendOnlyMap hoặc ExternalAppendOnlyMap có đầy đủ, được đổ vào một tập tin, làm thế nào chính xác không bước này xảy ra?

  • Sử dụng trình quản lý sắp xếp ngẫu nhiên, chúng tôi sử dụng appendOnlyMap để tổng hợp và kết hợp các bản ghi phân vùng, phải không? Sau đó, khi bộ nhớ thực hiện được lấp đầy, chúng tôi bắt đầu phân loại bản đồ, đổ nó vào đĩa và sau đó dọn dẹp bản đồ, câu hỏi của tôi là: sự khác biệt giữa tràn vào đĩa và trộn bài là gì? Chúng bao gồm cơ bản trong việc tạo tập tin trên hệ thống tập tin cục bộ, nhưng chúng được xử lý khác nhau, Shuffle ghi hồ sơ, không được đưa vào appendOnlyMap.

  • Bạn có thể giải thích ở độ sâu điều gì xảy ra khi reduceByKey được thực thi, giải thích cho tôi tất cả các bước liên quan để thực hiện điều đó? Ví dụ như tất cả các bước cho tập hợp bên bản đồ, xáo trộn và vân vân.

+0

@JacekLaskowski Bạn là một chuyên gia trong Spark xáo trộn;) –

+0

Cũng @ 0x0FFF là một chuyên gia trong Spark shuffling – Giorgio

Trả lời

1

Nó sau các mô tả về reduceByKey bước-by-step:

  1. reduceByKey cuộc gọi combineByKeyWithTag, với bộ kết hợp bản sắc và giá trị hợp đồng nhất và tạo ra giá trị
  2. combineByKeyWithClassTag tạo ra một Aggregator và trả ShuffledRDD. Cả hai tập hợp bên "bản đồ" và "giảm" đều sử dụng cơ chế nội bộ và không sử dụng mapPartitions.
  3. Agregator sử dụng ExternalAppendOnlyMap cho cả combineValuesByKey ("giảm phụ bản đồ") và combineCombinersByKey ("giảm giảm phụ")
  4. Cả hai phương pháp sử dụng ExternalAppendOnlyMap.insertAllMethod
  5. ExternalAppendOnlyMapkeeps track of spilled parts và hiện tại trong bộ nhớ đồ (SizeTrackingAppendOnlyMap)
  6. insertAll phương pháp cập nhật bản đồ trong bộ nhớ và checks on insert nếu kích thước ước tính của bản đồ hiện tại vượt quá ngưỡng. Nó sử dụng phương pháp Spillable.maybeSpill được kế thừa. Nếu ngưỡng vượt quá phương pháp này, hãy gọi số spill as a side effectinsertAll khởi tạo sạch SizeTrackingAppendOnlyMap
  7. spill gọi spillMemoryIteratorToDisk which gets DiskBlockObjectWriter object từ trình quản lý khối.

insertAll các bước được áp dụng cho cả bản đồ và giảm tổng hợp phụ với các hàm tương ứng Aggregator với giai đoạn trộn giữa.

Tính đến Spark 2.0 có chỉ loại dựa quản lý: SPARK-14667

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