2014-09-14 40 views
42

Spark research paper đã quy định một mô hình lập trình phân tán mới trên MapReduce Hadoop cổ điển, tuyên bố đơn giản hóa và tăng hiệu suất lớn trong nhiều trường hợp đặc biệt trên Máy học. Tuy nhiên, tài liệu để khám phá số internal mechanics trên Resilient Distributed Datasets với Directed Acyclic Graph có vẻ thiếu trong bài viết này.DAG hoạt động như thế nào dưới các bìa trong RDD?

Có nên học tốt hơn bằng cách điều tra mã nguồn không?

Trả lời

97

Thậm chí tôi đã tìm kiếm trên web để tìm hiểu về cách tia lửa tính toán DAG từ RDD và sau đó thực hiện nhiệm vụ.

Ở mức cao, khi có bất kỳ hành động nào được gọi trên RDD, Spark tạo DAG và gửi nó tới bộ lập lịch DAG.

  • Trình lập lịch biểu DAG chia toán tử thành các giai đoạn nhiệm vụ. Một giai đoạn bao gồm các nhiệm vụ dựa trên các phân vùng của dữ liệu đầu vào. Các tuyến đường dẫn DAG lập trình cùng nhau. Ví dụ: Nhiều toán tử bản đồ có thể được lên lịch trong một giai đoạn. Kết quả cuối cùng của bộ lập lịch DAG là một tập hợp các giai đoạn.

  • Các giai đoạn được chuyển sang Task Scheduler. Công cụ lập lịch tác vụ khởi chạy tác vụ thông qua trình quản lý cụm (Spark Standalone/Yarn/Mesos). Trình lên lịch tác vụ không biết về các phụ thuộc của các giai đoạn.

  • Công nhân thực hiện các tác vụ trên Slave.

Hãy đến cách Spark xây dựng DAG.

Ở mức cao, có hai phép biến đổi có thể được áp dụng cho RDD, cụ thể là chuyển đổi hẹp và chuyển đổi rộng. Biến đổi rộng về cơ bản dẫn đến ranh giới giai đoạn.

thu hẹp chuyển đổi - không yêu cầu dữ liệu được xáo trộn trên phân vùng. ví dụ, Bản đồ, lọc vv ..

rộng chuyển đổi - đòi hỏi dữ liệu được xáo trộn ví dụ, reduceByKey vv ..

Hãy lấy một ví dụ về đếm có bao nhiêu thông điệp đăng nhập xuất hiện ở từng cấp mức độ nghiêm trọng,

Tiếp theo là file log mà bắt đầu với mức độ nghiêm trọng,

INFO I'm Info message 
WARN I'm a Warn message 
INFO I'm another Info message 

và tạo mã scala sau để giải nén như nhau,

val input = sc.textFile("log.txt") 
val splitedLines = input.map(line => line.split(" ")) 
         .map(words => (words(0), 1)) 
         .reduceByKey{(a,b) => a + b} 

Chuỗi lệnh này ngầm định nghĩa một DAG của các đối tượng RDD (dòng RDD) sẽ được sử dụng sau khi một hành động được gọi. Mỗi RDD duy trì một con trỏ đến một hoặc nhiều cha mẹ cùng với siêu dữ liệu về loại mối quan hệ mà nó có với cha mẹ. Ví dụ: khi chúng tôi gọi số val b = a.map() trên RDD, RDD b giữ tham chiếu đến số gốc a, đó là dòng truyền thừa.

Để hiển thị dòng truyền thừa của RDD, Spark cung cấp phương pháp gỡ lỗi toDebugString().Ví dụ thực hiện toDebugString() trên splitedLines RDD, sẽ ra như sau:

(2) ShuffledRDD[6] at reduceByKey at <console>:25 [] 
    +-(2) MapPartitionsRDD[5] at map at <console>:24 [] 
    | MapPartitionsRDD[4] at map at <console>:23 [] 
    | log.txt MapPartitionsRDD[1] at textFile at <console>:21 [] 
    | log.txt HadoopRDD[0] at textFile at <console>:21 [] 

Dòng đầu tiên (từ dưới lên) cho thấy RDD đầu vào. Chúng tôi đã tạo RDD này bằng cách gọi sc.textFile(). Dưới đây là khung nhìn sơ đồ hơn về đồ thị DAG được tạo từ RDD đã cho.

RDD DAG graph

Khi DAG là xây dựng, chức năng lịch Spark tạo ra một kế hoạch thực hiện vật lý. Như đã đề cập ở trên, bộ lập lịch DAG chia biểu đồ thành nhiều giai đoạn, các giai đoạn được tạo dựa trên các phép biến đổi. Các phép biến đổi hẹp sẽ được nhóm lại với nhau thành một giai đoạn duy nhất. Vì vậy, ví dụ của chúng tôi, Spark sẽ tạo ra hai giai đoạn thực hiện như sau:

Stages

Các DAG scheduler đó sẽ trình các giai đoạn vào lịch công việc. Số lượng tác vụ được gửi phụ thuộc vào số lượng phân vùng có trong textFile. Ví dụ Fox xem xét chúng ta có 4 phân vùng trong ví dụ này, sau đó sẽ có 4 bộ nhiệm vụ được tạo và gửi song song với điều kiện là có đủ nô lệ/lõi. Sơ đồ dưới đây minh họa điều này một cách chi tiết hơn:

Task execustion

Để biết thông tin chi tiết hơn tôi đề nghị bạn phải đi qua các đoạn video youtube sau đó những người sáng tạo Spark nhượng bộ chi tiết sâu về DAG và kế hoạch thực hiện và tuổi thọ.

  1. Advanced Apache Spark- Sameer Farooqui (Databricks)
  2. A Deeper Understanding of Spark Internals - Aaron Davidson (Databricks)
  3. Introduction to AmpLab Spark Internals
3

Bắt đầu từ Spark 1.4 trực quan của dữ liệu đã được thêm vào thông qua ba thành phần sau đây nó cũng cung cấp một đại diện đồ họa rõ ràng về DAG.

  • xem Timeline của các sự kiện Spark

  • Thực hiện DAG

  • Visualization thống kê Truyền Spark

Tham khảo link để biết thêm thông tin.

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