Tôi đang chạy cụm tia lửa trên mã C++ được gói trong python. Tôi hiện đang thử nghiệm các cấu hình khác nhau của các tùy chọn đa luồng (ở cấp độ Python hoặc mức Spark).Apache spark, spark-submit, hành vi của tùy chọn --total-executor-core là gì
Tôi đang sử dụng tia lửa với các tệp nhị phân độc lập, qua cụm HDFS 2.5.4. Cụm này hiện được làm bằng 10 nô lệ, với 4 lõi mỗi.
Từ những gì tôi có thể thấy, theo mặc định, Spark khởi chạy 4 nô lệ mỗi nút (Tôi có 4 python hoạt động trên một nút nô lệ tại một thời điểm).
Tôi làm cách nào để giới hạn số này? Tôi có thể thấy rằng tôi có tùy chọn --total-executor-cores cho "spark-submit", nhưng có rất ít tài liệu về cách nó tác động đến việc phân phối các nhà thực thi trên cụm sao!
Tôi sẽ chạy thử nghiệm để có ý tưởng rõ ràng, nhưng nếu ai đó có kiến thức có đầu mối về tùy chọn này, điều đó có thể hữu ích.
Cập nhật:
tôi đã đi qua tài liệu tia lửa một lần nữa, đây là những gì tôi hiểu:
- Theo mặc định, tôi có một chấp hành viên của mỗi công nhân nút (ở đây nút 10 người lao động, do đó 10 người thi hành)
- Tuy nhiên, mỗi nhân viên có thể chạy một số tác vụ song song. Trong chế độ độc lập, hành vi mặc định là sử dụng tất cả các lõi có sẵn, giải thích tại sao tôi có thể quan sát 4 python.
- Để hạn chế số lượng lõi sử dụng mỗi người lao động, và hạn chế số lượng nhiệm vụ song song, tôi có ít nhất 3 lựa chọn:
- sử dụng
--total-executor-cores
whithspark-submit
(thỏa đáng nhất, vì không có đầu mối về cách các vũng lõi được xử lý) - sử dụng
SPARK_WORKER_CORES
trong file cấu hình - sử dụng
-c
tùy chọn với các kịch bản bắt đầu
- sử dụng
Các dòng sau của tài liệu này http://spark.apache.org/docs/latest/spark-standalone.html giúp tôi tìm ra những gì đang xảy ra:
SPARK_WORKER_INSTANCES
Số trường hợp người lao động để chạy trên mỗi máy (mặc định: 1). Bạn có thể thực hiện điều này nhiều hơn 1 nếu bạn có các máy rất lớn và muốn có nhiều quy trình nhân viên Spark. Nếu bạn thiết lập điều này, hãy chắc chắn cũng đặt SPARK_WORKER_CORES một cách rõ ràng để giới hạn các lõi cho mỗi nhân viên, hoặc người nào khác mỗi nhân viên sẽ cố gắng sử dụng tất cả các lõi.
Điều chưa rõ đối với tôi là lý do tại sao tốt hơn trong trường hợp của tôi là giới hạn số lượng tác vụ song song trên mỗi nút công nhân thành 1 và dựa vào đa luồng mã C++ của tôi. Tôi sẽ cập nhật bài đăng này với kết quả thử nghiệm, khi tôi hoàn thành nghiên cứu của mình.
Từ bản cập nhật của bạn, những gì có vẻ không rõ ràng với tôi là cách bạn đã đạt đến kết luận rằng tốt hơn là giới hạn số tác vụ song song và dựa vào mã đa luồng C++ của bạn. –
Vâng, tôi thực sự đang chạy một tập hợp các thử nghiệm cụ thể, để kiểm tra thời tiết, nó liên tục dựa vào đa luồng thông thường hoặc sử dụng phương pháp tiếp cận Spark. Tôi đang chạy trên google cloud và trong trường hợp xử lý hình ảnh _specific_ của tôi, thỏa hiệp tốt nhất là: đối với một nhân viên có lõi N, có N/2 công việc song song bằng cách sử dụng tia lửa, mỗi công việc đa luồng trên 2 luồng bằng cách sử dụng openMP. Ví dụ: 8 nút công nhân với 16 lõi, thỏa hiệp tốt nhất là 64 công việc song song, và mỗi người trong số họ đa luồng trên 2 lõi. Ngược lại (16 công việc song song, mỗi công việc trên MT trên 8 lõi chậm hơn gấp đôi). – MathiasOrtner
Cảm ơn bạn đã đăng ký. –