2014-11-28 16 views
38

Tôi đang bối rối về giao dịch với bộ nhớ thực thi và bộ nhớ trình điều khiển trong Spark.Làm thế nào để đối phó với bộ nhớ thực thi và bộ nhớ trình điều khiển trong Spark?

thiết lập môi trường của tôi là như sau:

  • Memory 128 G, 16 CPU cho 9 VM
  • Centos
  • Hadoop 2.5.0-cdh5.2.0
  • Spark 1.1.0

Thông tin dữ liệu đầu vào:

  • 3,5 GB dữ liệu từ tập tin HDFS

Đối với phát triển đơn giản, tôi thực thi mã Python của tôi trong chế độ cụm độc lập (8 công nhân, 20 lõi, 45,3 G bộ nhớ) với spark-submit. Bây giờ tôi muốn thiết lập bộ nhớ thực thi hoặc bộ nhớ trình điều khiển để điều chỉnh hiệu suất.

Từ Spark documentation, định nghĩa cho bộ nhớ thi hành di chúc là

Số lượng bộ nhớ sử dụng cho mỗi quá trình thi hành di chúc, trong định dạng giống như chuỗi ký ức JVM (ví dụ 512M, 2g).

Bộ nhớ trình điều khiển như thế nào?

Trả lời

70

Bộ nhớ bạn cần gán cho trình điều khiển phụ thuộc vào công việc.

Nếu công việc dựa hoàn toàn vào các biến đổi và chấm dứt trên một số hành động đầu ra được phân phối như rdd.saveAsTextFile, rdd.saveToCassandra, ... thì nhu cầu bộ nhớ của trình điều khiển sẽ rất thấp. Rất ít 100 MB sẽ làm. Người lái xe cũng chịu trách nhiệm phân phối tệp và thu thập số liệu, nhưng không được tham gia vào xử lý dữ liệu.

Nếu công việc yêu cầu người lái xe tham gia vào việc tính toán, như ví dụ: một số bản ngã ML cần phải thực hiện các kết quả và phát chúng vào lần lặp tiếp theo, sau đó công việc của bạn trở nên phụ thuộc vào lượng dữ liệu đi qua trình điều khiển. Các hoạt động như .collect, .taketakeSample cung cấp dữ liệu cho trình điều khiển và do đó, trình điều khiển cần đủ bộ nhớ để phân bổ dữ liệu đó.

ví dụ: Nếu bạn có rdd trong 3GB trong cụm và gọi val myresultArray = rdd.collect, thì bạn sẽ cần 3 GB bộ nhớ trong trình điều khiển để giữ dữ liệu đó cộng với một số phòng phụ cho các chức năng được đề cập trong đoạn đầu tiên.

4

Trong ứng dụng Spark, Trình điều khiển chịu trách nhiệm lên lịch công việc và Người thực thi chịu trách nhiệm thực hiện các tác vụ cụ thể trong công việc của bạn.

Nếu bạn đã quen thuộc với MapReduce, nhiệm vụ bản đồ của bạn & giảm nhiệm vụ đều được thực hiện trong Executor (trong Spark, chúng được gọi là ShuffleMapTasks & ResultTasks), và cũng có thể, bất cứ điều gì RDD bạn muốn bộ nhớ cache cũng nằm trong JVM của chấp hành viên của đống & đĩa.

Vì vậy, tôi nghĩ rằng một vài GB sẽ chỉ phù hợp với Trình điều khiển của bạn.

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