Công nhân, giám đốc điều hành, lõi trong cụm độc lập Spark là gì?


219

Tôi đã đọc Tổng quan về Chế độ cụm và tôi vẫn không thể hiểu các quy trình khác nhau trong cụm Độc lập Spark và tính song song.

Công nhân có phải là một quy trình JVM hay không? Tôi đã chạy bin\start-slave.shvà thấy rằng nó sinh ra công nhân, thực sự là một JVM.

Theo liên kết trên, một người thi hành là một quá trình được khởi chạy cho một ứng dụng trên nút worker chạy các tác vụ. Một người thi hành cũng là một JVM.

Đây là những câu hỏi của tôi:

  1. Nhân viên điều hành là mỗi ứng dụng. Vậy thì vai trò của một công nhân là gì? Liệu nó có phối hợp với người thi hành và truyền lại kết quả cho người lái xe không? Hay người lái xe trực tiếp nói chuyện với người thi hành? Nếu vậy, mục đích của công nhân là gì?

  2. Làm thế nào để kiểm soát số lượng người thi hành cho một ứng dụng?

  3. Các tác vụ có thể được thực hiện để chạy song song bên trong người thực thi không? Nếu vậy, làm thế nào để cấu hình số lượng chủ đề cho một người thực thi?

  4. Mối quan hệ giữa lõi công nhân, người thi hành và lõi thực thi (--total-execor-core) là gì?

  5. Có nhiều công nhân hơn trên mỗi nút có nghĩa là gì?

Đã cập nhật

Hãy lấy ví dụ để hiểu rõ hơn.

Ví dụ 1: Một cụm độc lập có 5 nút worker (mỗi nút có 8 lõi) Khi tôi khởi động một ứng dụng có cài đặt mặc định.

Ví dụ 2 Cấu hình cụm tương tự như ví dụ 1, nhưng tôi chạy một ứng dụng với các cài đặt sau --executor-lõi 10 --total-execor-lõi 10.

Ví dụ 3 Cấu hình cụm tương tự như ví dụ 1, nhưng tôi chạy một ứng dụng với các cài đặt sau --executor-lõi 10 --total-execor-lõi 50.

Ví dụ 4 Cấu hình cụm tương tự như ví dụ 1, nhưng tôi chạy một ứng dụng với các cài đặt sau --executor-lõi 50 --total-execor-lõi 50.

Ví dụ 5 Cấu hình cụm tương tự như ví dụ 1, nhưng tôi chạy một ứng dụng với các cài đặt sau --executor-lõi 50 --total-execor-lõi 10.

Trong mỗi ví dụ này, có bao nhiêu người thực thi? Có bao nhiêu chủ đề cho mỗi người thi hành? Có bao nhiêu lõi? Làm thế nào là số lượng người thi hành quyết định cho mỗi ứng dụng? Có phải luôn luôn giống như số lượng công nhân?

Câu trả lời:


274

nhập mô tả hình ảnh ở đây

Spark sử dụng kiến ​​trúc chính / nô lệ. Như bạn có thể thấy trong hình, nó có một điều phối viên trung tâm (Người lái xe) giao tiếp với nhiều nhân viên phân phối (người thực thi). Trình điều khiển và mỗi trình thực thi chạy trong các quy trình Java của riêng họ.

NGƯỜI LÁI XE

Trình điều khiển là quá trình mà phương thức chính chạy. Đầu tiên, nó chuyển đổi chương trình người dùng thành các tác vụ và sau đó nó lên lịch các tác vụ trên các trình thực thi.

KIỂM TRA

Các giám đốc điều hành là các quy trình của các nút công nhân chịu trách nhiệm điều hành các tác vụ riêng lẻ trong một công việc Spark nhất định. Chúng được khởi chạy khi bắt đầu ứng dụng Spark và thường chạy trong toàn bộ vòng đời của ứng dụng. Một khi họ đã chạy nhiệm vụ, họ gửi kết quả cho người lái xe. Họ cũng cung cấp lưu trữ trong bộ nhớ cho RDD được lưu trữ bởi các chương trình người dùng thông qua Trình quản lý khối.

HOA HỒNG ỨNG DỤNG

Với ý nghĩ này, khi bạn gửi một ứng dụng đến cụm với tia lửa, đây là điều xảy ra trong nội bộ:

  1. Một ứng dụng độc lập khởi động và khởi tạo một SparkContextthể hiện (và chỉ sau đó khi bạn có thể gọi ứng dụng đó là trình điều khiển).
  2. Chương trình điều khiển yêu cầu tài nguyên cho trình quản lý cụm để khởi chạy các tệp thực thi.
  3. Trình quản lý cụm khởi chạy.
  4. Quá trình điều khiển chạy qua ứng dụng người dùng. Tùy thuộc vào các hành động và chuyển đổi qua nhiệm vụ RDD được gửi đến người thi hành.
  5. Giám đốc điều hành chạy các nhiệm vụ và lưu kết quả.
  6. Nếu bất kỳ công nhân nào gặp sự cố, các nhiệm vụ của nó sẽ được gửi đến các nhà thi hành khác nhau để được xử lý lại. Trong cuốn sách "Học Spark: Phân tích dữ liệu lớn nhanh như chớp", họ nói về Spark và Fault Tolerance:

Spark tự động xử lý các máy bị lỗi hoặc chậm bằng cách thực hiện lại các tác vụ thất bại hoặc chậm. Ví dụ: nếu nút chạy phân vùng của hoạt động map () gặp sự cố, Spark sẽ chạy lại nó trên một nút khác; và ngay cả khi nút không gặp sự cố nhưng đơn giản là chậm hơn nhiều so với các nút khác, Spark có thể khởi chạy một bản sao nhiệm vụ đầu cơ của một nhiệm vụ trên một nút khác và kết quả của nó nếu kết thúc.

  1. Với SparkContext.stop () từ trình điều khiển hoặc nếu phương thức chính thoát / sự cố, tất cả các trình thực thi sẽ bị chấm dứt và tài nguyên cụm sẽ được trình quản lý cụm giải phóng.

NHỮNG CÂU HỎI CỦA BẠN

  1. Khi người thực thi được bắt đầu, họ tự đăng ký với tài xế và từ đó họ liên lạc trực tiếp. Các công nhân chịu trách nhiệm truyền đạt cho người quản lý cụm sự sẵn có của các tài nguyên của họ.

  2. Trong cụm YARN, bạn có thể làm điều đó với --num-exec. Trong một cụm độc lập, bạn sẽ nhận được một người thi hành cho mỗi nhân viên trừ khi bạn chơi với spark.executor.cores và một công nhân có đủ lõi để chứa nhiều hơn một người thi hành. (Như @JacekLaskowski chỉ ra, --num-Chấp hành viên không còn được sử dụng trong sợi https://github.com/apache/spark/commit/16b6d18613e150c7038c613992d80a7828413e66 )

  3. Bạn có thể chỉ định số lượng lõi cho mỗi người thi hành với --executor-lõi

  4. --total-execor-core là số lượng lõi thực thi tối đa trên mỗi ứng dụng

  5. Như Sean Owen đã nói trong chủ đề này : "không có lý do chính đáng để chạy nhiều hơn một công nhân trên mỗi máy". Bạn sẽ có nhiều JVM ngồi trong một máy chẳng hạn.

CẬP NHẬT

Tôi chưa thể kiểm tra kịch bản này, nhưng theo tài liệu:

VÍ DỤ 1: Spark sẽ tham lam thu được càng nhiều lõi và người thi hành theo yêu cầu của người lập lịch. Vì vậy, cuối cùng bạn sẽ nhận được 5 người thực thi với 8 lõi mỗi lõi.

VÍ DỤ 2 đến 5: Spark sẽ không thể phân bổ số lượng lõi theo yêu cầu trong một công nhân, do đó sẽ không có người thực thi nào được khởi chạy.


Cảm ơn @Marco. Vì vậy, thông thường, người ta không nên lo lắng về bộ nhớ heap trên worker vì nó chỉ quản lý tài nguyên nút?
Manikandan Kannan

8
Thật là một câu trả lời tuyệt vời! Cảm ơn @Marco. Theo github.com/apache/spark/commit/, --num-executors không còn được sử dụng trong YARN.
Jacek Laskowski

1
@Marco cảm ơn vì câu trả lời tuyệt vời. Bạn có thể mở rộng vai trò liên tục của trình quản lý cụm trong khi trình điều khiển chạy không? ... Nó phải xử lý trường hợp tài xế hoặc công nhân hoặc cả hai gặp sự cố hoặc ngừng phản ứng, để biết tài nguyên nào có sẵn.
Iain

1
@lain trình điều khiển liên hệ với người quản lý cụm để phân bổ tài nguyên và cũng yêu cầu mgr cụm để khởi chạy các trình thực thi
Aravind Yarram

2
Câu trả lời chính xác. Bạn có thể tìm thấy thông tin chi tiết về tia lửa điện bên trong tại đây github.com/JerryLead/SparkIternals/blob/master/EnglishVersion/
Kẻ

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.