Ví dụ: Tôi cần để có được một danh sách của tất cả các nhà điều hành có sẵn và khả năng đa luồng tương ứng của họ (KHÔNG phải tổng công suất đa luồng, sc.defaultParallelism đã xử lý).Phương pháp để lấy số lõi cho một người thực hiện trên một nút tác vụ?
Do tham số này phụ thuộc vào triển khai thực hiện (YARN và độc lập tia lửa có chiến lược khác nhau để phân bổ lõi) và tình huống (có thể dao động do phân bổ động và chạy công việc dài hạn). Tôi không thể sử dụng phương pháp khác để ước tính điều này. Có cách nào để lấy thông tin này bằng cách sử dụng API Spark trong một chuyển đổi được phân phối không? (Ví dụ TaskContext, SparkEnv)
CẬP NHẬT Đối với Spark 1.6, tôi đã thử các phương pháp sau đây:
1) chạy một công việc 1 sân khấu với nhiều phân vùng (>> defaultParallelism) và đếm số threadIDs biệt cho mỗi executorID:
val n = sc.defaultParallelism * 16
sc.parallelize(n, n).map(v => SparkEnv.get.executorID -> Thread.currentThread().getID)
.groupByKey()
.mapValue(_.distinct)
.collect()
Tuy nhiên điều này dẫn đến một ước tính cao hơn so với khả năng xử lý đa luồng thực tế bởi vì mỗi người thi hành Spark sử dụng một hồ bơi thread overprovisioned.
2) Tương tự như 1, ngoại trừ n = defaultParallesim, và trong mọi tác vụ, tôi thêm thời gian trễ để ngăn người đàm phán tài nguyên mất cân bằng (nút nhanh hoàn thành nhiệm vụ của nó và yêu cầu nhiều hơn trước khi các nút chậm có thể bắt đầu chạy):
val n = sc.defaultParallelism
sc.parallelize(n, n).map{
v =>
Thread.sleep(5000)
SparkEnv.get.executorID -> Thread.currentThread().getID
}
.groupByKey()
.mapValue(_.distinct)
.collect()
nó hoạt động phần lớn thời gian, nhưng chậm hơn nhiều so với mức cần thiết và có thể bị hỏng do cụm mất cân bằng hoặc công việc đầu cơ.
3) Tôi chưa thử: sử dụng phản chiếu java để đọc BlockManager.numUsableCores, đây rõ ràng không phải là giải pháp ổn định, việc triển khai nội bộ có thể thay đổi bất kỳ lúc nào.
Hãy cho tôi biết nếu bạn đã tìm thấy điều gì đó tốt hơn.
Cảm ơn bạn Paul, đây là cho scala, tôi đăng nó vào ban đêm vì vậy đã không viết xuống điều tra của tôi, sẽ thêm lên sau này – tribbloid
@Paul cập nhật, là nó đủ tốt? – tribbloid
Có vẻ tốt hơn rất nhiều. – Paul