2015-04-29 21 views
9

Tôi có một ứng dụng Apache Spark đang chạy trên một cụm YARN (tia lửa có 3 nút trên cụm này) trên chế độ cụm.Apache Spark: cài đặt các phiên bản thực thi không thay đổi các trình thực thi

Khi ứng dụng đang chạy Spark-UI cho thấy 2 người thực thi (mỗi người chạy trên một nút khác) và trình điều khiển đang chạy trên nút thứ ba. Tôi muốn các ứng dụng để sử dụng nhiều Chấp hành viên vì vậy tôi cố gắng thêm đối số --num-Chấp hành viên để Spark-nộp và đặt nó là 6.

spark-submit --driver-memory 3G --num-executors 6 --class main.Application --executor-memory 11G --master yarn-cluster myJar.jar <arg1> <arg2> <arg3> ...

Tuy nhiên, số lượng Chấp hành viên vẫn 2.

Trên giao diện người dùng Spark, tôi có thể thấy rằng tham số spark.executor.instances là 6, giống như tôi dự định và bằng cách nào đó vẫn chỉ có 2 trình thực thi.

Tôi thậm chí còn cố gắng thiết lập thông số này từ mã

sparkConf.set("spark.executor.instances", "6") 

Một lần nữa, tôi có thể thấy rằng các thông số đã được thiết lập đến 6, nhưng vẫn chỉ có 2 Chấp hành viên.

Có ai biết tại sao tôi không thể tăng số lượng người thực thi của mình không?

yarn.nodemanager.resource.memory-mb là 12g trong sợi-site.xml

+0

giá trị của sợi.nodemanager.resource.memory-mb trong fibre-site.xml ?? – banjara

+0

Yarn.nodemanager.resource.memory-mb là 12GiB – user4688877

Trả lời

9

Tăng yarn.nodemanager.resource.memory-mb trong yarn-site.xml

Với 12g mỗi nút bạn chỉ có thể khởi chạy trình điều khiển (3g) và 2 Chấp hành viên (11g).

node1 - tài xế 3g (+ 7% chi phí)

node2 - executor1 11g (+ 7% chi phí)

Node3 - executor2 11g (+ 7% chi phí)

bây giờ bạn đang yêu cầu cho executor3 của 11g và không có nút nào có bộ nhớ 11g.

7% chi phí tham khảo spark.yarn.executor.memoryOverhead và spark.yarn.driver.memoryOverhead trong https://spark.apache.org/docs/1.2.0/running-on-yarn.html

+1

Tôi không thể tăng tham số này vì tôi không có đủ RAM, nhưng tôi đã thử nó trên một ứng dụng tia lửa khác mà không cần nhiều bộ nhớ thực thi và nó hoạt động, cảm ơn – user4688877

+0

Tôi đã đau đớn vì một vấn đề tương tự trong một vài ngày.Cảm ơn bạn đã trả lời, làm việc như một sự quyến rũ! – nooblar

1

Bạn chỉ có 3 nút trong cluster, và ai sẽ được sử dụng làm tài xế, bạn có chỉ còn lại 2 nút, bạn có thể tạo 6 trình thực thi như thế nào?

Tôi nghĩ bạn nhầm lẫn --num-executors với --executor-cores.

Để tăng tính tương tranh, bạn cần thêm lõi, bạn muốn sử dụng tất cả các CPU trong cụm của bạn.

+0

Vì vậy, chỉ có thể có một người thực thi cho mỗi nút? – user4688877

+0

không, bạn có bộ nhớ 12g có sẵn trên mỗi nút và một người thực hiện đang dùng 11g, vì vậy bạn không thể khởi chạy trình xử lý thứ hai trên cùng một nút. bạn có thể tăng sợi.nodemanager.resource.memory-mb hoặc giảm - bộ nhớ -xuất hiện để khởi chạy nhiều trình thực hiện trên cùng một nút – banjara

0

Để sử dụng cụm tia lửa với dung lượng đầy đủ, bạn cần đặt giá trị cho --num-executors, --exectoror-core và --exectoror-memory theo cụm của bạn.

Cờ lệnh dòng lệnh --num-executors hoặc spark.executor.instances thuộc tính cấu hình kiểm soát số lượng người thực thi được yêu cầu.

Cờ lệnh dòng lệnh --executor-cores hoặc thuộc tính cấu hình spark.executor.cores kiểm soát số lượng tác vụ đồng thời mà người thực thi có thể chạy.

Cờ lệnh dòng lệnh -executor-memory hoặc thuộc tính cấu hình spark.executor.memory kiểm soát kích thước heap.

1

Lưu ý rằng yarn.nodemanager.resource.memory-mbtổng bộ nhớ rằng một đơn NodeManager có thể phân bổ trên khắp tất cả container trên một nút.

Trong trường hợp của bạn, kể từ yarn.nodemanager.resource.memory-mb = 12G, nếu bạn thêm bộ nhớ được cấp cho tất cả các vùng chứa YARN trên bất kỳ nút nào, nó không thể vượt quá 12G.

Bạn đã yêu cầu 11G (-executor-memory 11G) cho mỗi Spark Executor container. Mặc dù 11G là ít hơn 12G, điều này vẫn sẽ không hoạt động. Tại sao ?

  • Bởi vì bạn phải chiếm spark.yarn.executor.memoryOverhead, đó là min(executorMemory * 0.10, 384) (bởi mặc định, trừ khi bạn ghi đè lên nó).

Vì vậy, toán sau đây phải giữ đúng:

spark.executor.memory + spark.yarn.executor.memoryOverhead< =yarn.nodemanager.resource.memory-mb

Xem: https://spark.apache.org/docs/latest/running-on-yarn.html cho tài liệu mới nhất về spark.yarn.executor.memoryOverhead

Hơn nữa, spark.executor.instanceschỉ yêu cầu. Spark ApplicationMaster cho ứng dụng của bạn sẽ yêu cầu YARN ResourceManager cho số vùng chứa = spark.executor.instances. Yêu cầu sẽ được cấp bởi ResourceManager trên nút NodeManager dựa trên:

  • Khả năng sẵn có của tài nguyên trên nút. Lịch trình YARN có các sắc thái riêng - this là một mồi tốt về cách hoạt động của YARN FairScheduler.
  • yarn.nodemanager.resource.memory-mb ngưỡng chưa được vượt quá vào nút:
    • (số container tia lửa đang chạy trên nút * (spark.executor.memory + spark.yarn.executor.memoryOverhead)) < =yarn.nodemanager.resource.memory-mb *

Nếu yêu cầu không được cấp, yêu cầu sẽ được xếp hàng đợi và được cấp khi các điều kiện trên được đáp ứng.

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