2014-09-05 17 views
7

Tôi có một cụm Spark 2 nút với 4 lõi trên mỗi nút.Làm thế nào để Spark paralellize lát cho nhiệm vụ/executors/công nhân?

 MASTER 
(Worker-on-master)    (Worker-on-node1) 

Spark cấu hình:

  • nô lệ: thạc sĩ, node1
  • SPARK_WORKER_INSTANCES = 1

Tôi cố gắng để hiểu được hành vi của Spark paralellize. Ví dụ sparkPi có mã này:

val slices = 8 // my test value for slices 
val n = 100000 * slices 
val count = spark.parallelize(1 to n, slices).map { i => 
    val x = random * 2 - 1 
    val y = random * 2 - 1 
    if (x*x + y*y < 1) 1 else 0 
}.reduce(_ + _) 

Theo tài liệu:

Spark sẽ chạy một nhiệm vụ cho từng lát cluster. Thông thường bạn muốn 2-4 lát cho mỗi CPU trong cụm của bạn.

tôi đặt lát là 8 có nghĩa là thiết lập làm việc sẽ được chia cho các 8 nhiệm vụ trên cụm, lần lượt mỗi nút công nhân được 4 nhiệm vụ (1: 1 cho mỗi lõi)

Câu hỏi:

  1. Tôi có thể xem chi tiết cấp công việc ở đâu? Bên trong các trình thực thi, tôi không thấy phân tích nhiệm vụ vì vậy tôi có thể thấy hiệu ứng của các slice trên giao diện người dùng.

  2. Cách lập trình tìm kích thước bộ làm việc cho chức năng bản đồ ở trên? Tôi giả sử nó là n/slices (100000 ở trên)

  3. Có nhiều tác vụ do một người chạy thi hành chạy tuần tự hoặc song song trong nhiều luồng không?

  4. Lý do đằng sau 2-4 lát trên mỗi CPU.

  5. tôi giả lý tưởng chúng ta nên điều chỉnh SPARK_WORKER_INSTANCES tương ứng với số lượng lõi trong mỗi nút (trong một cụm đồng nhất) để mỗi lõi được chấp hành viên và nhiệm vụ riêng của mình (1: 1: 1)

Trả lời

5

Tôi sẽ cố gắng trả lời câu hỏi của bạn tốt nhất có thể:

1.- Tôi có thể xem chi tiết ở cấp công việc ở đâu?

Khi gửi công việc, Spark lưu trữ thông tin về phân tích nhiệm vụ trên mỗi nút công nhân, ngoài chủ nhân. Dữ liệu này được lưu trữ, tôi tin (tôi chỉ được thử nghiệm với Spark cho EC2), trên thư mục làm việc trong thư mục spark.

2.- Làm thế nào để lập trình tìm kích thước bộ làm việc cho chức năng bản đồ?

Mặc dù tôi không chắc liệu nó có lưu trữ kích thước trong bộ nhớ của các lát hay không, các nhật ký được đề cập trong câu trả lời đầu tiên cung cấp thông tin về số lượng dòng mà mỗi phân vùng RDD chứa.

3.- Có phải nhiều tác vụ được chạy bởi một người thực thi chạy tuần tự hoặc ngang nhau trong nhiều luồng không?

Tôi tin rằng các tác vụ khác nhau bên trong một nút chạy tuần tự. Điều này được hiển thị trên nhật ký được chỉ ra ở trên, cho biết thời gian bắt đầu và kết thúc của mỗi tác vụ.

4.- lý do đằng sau 2-4 lát mỗi CPU

Một số nút kết thúc nhiệm vụ của mình nhanh hơn so với những người khác. Có nhiều lát hơn lõi có sẵn phân phối các tác vụ theo cách cân bằng để tránh thời gian xử lý lâu do các nút chậm hơn.

1

Lấy một đâm ở vị trí thứ 4:

Đối với # 4 đó là đáng chú ý là "lát" và "phân vùng" là những điều tương tự, có một lỗi đệ và những nỗ lực để làm sạch các tài liệu: https://issues.apache.org/jira/browse/SPARK-1701

Dưới đây là một liên kết mà mở rộng lý luận trong # 4: http://spark.apache.org/docs/latest/tuning.html#level-of-parallelism

Cụ nhìn vào dòng:

Nói chung, chúng tôi khuyên 2-3 nhiệm vụ mỗi CPU cốt lõi trong cụm của bạn.

Một lưu ý quan trọng là tránh xáo trộn và thiết lập số lượng lát là một phần trong đó. Đó là một chủ đề phức tạp hơn tôi hoàn toàn hiểu để giải thích đầy đủ ở đây - ý tưởng cơ bản là phân vùng dữ liệu của bạn thành đủ phân vùng/lát lên phía trước để tránh Spark phải trộn lại để có thêm phân vùng sau này.

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