2017-07-05 21 views
6

Tôi có 10 nút trong cụm hadoop có RAM 32 GB và một nút có 64 GB.Giới hạn các thùng chứa YARN theo lập trình

Đối với những 10 nút nút hạn yarn.nodemanager.resource.memory-mb được thiết lập để 26GB và 64GB nút để 52GB (có một số công việc đòi hỏi 50GB cho giảm tốc duy nhất, họ chạy trên nút này)

Vấn đề là, khi tôi chạy cơ bản công việc đòi hỏi phải nói 8GB cho người lập bản đồ, các nút 32GB tạo ra 3 trình lập bản đồ song song (26/8 = 3) và nút 64GB sinh ra 6 người lập bản đồ. Nút này thường kết thúc cuối cùng, vì tải CPU.

Tôi muốn giới hạn tài nguyên vùng chứa công việc theo lập trình, ví dụ: đặt giới hạn vùng chứa thành 26 GB cho hầu hết các công việc. Nó được hoàn thiện bằng cách nào?

Trả lời

2

Trước hết yarn.nodemanager.resource.memory-mb (Memory), yarn.nodemanager.resource.cpu-vcores (vcore) là Nodemanager thuộc tính cấu hình daemon/dịch vụ và không thể được overriden trong các ứng dụng SỢI khách hàng. Bạn cần phải khởi động lại dịch vụ nodemanager nếu bạn thay đổi các thuộc tính cấu hình này.

Vì CPU là nút cổ chai trong trường hợp của bạn, Khuyến nghị của tôi là thay đổi chiến lược lập lịch YARN thành Fairscheduler với chính sách lập lịch DRF (Dominant Resource Fairness) ở cấp cụm sao cho bạn linh hoạt chỉ định vùng chứa ứng dụng kích thước về cả bộ nhớ và lõi cpu. Số lượng thùng chứa ứng dụng đang chạy (mapper/reducer/AM/tasks) sẽ dựa trên vcores có sẵn mà bạn xác định

Chính sách lập lịch biểu có thể được đặt ở mức hàng đợi/cấp độ công bằng lên lịch.

lập lịchPolicy: để đặt chính sách lập lịch của bất kỳ hàng đợi nào. Các giá trị cho phép là “FIFO”/“công bằng”/“DRF”

Xem this apache doc để biết thêm chi tiết -

Khi bạn đã tạo mới Hội chợ hàng đợi scheduler/hồ bơi với chính sách kế hoạch DRF, cả hai bộ nhớ có thể cpu lõi có thể được đặt trong chương trình như sau.

Cấu hình conf = new Configuration();

Cách xác định kích thước vùng chứa trong ứng dụng tạo bản đồ.

Configuration conf = new Configuration(); 

conf.set("mapreduce.map.memory.mb","4096"); 
conf.set(mapreduce.reduce.memory.mb","4096"); 

conf.set(mapreduce.map.cpu.vcores","1"); 
conf.set(mapreduce.reduce.cpu.vcores","1"); 

Reference - https://hadoop.apache.org/docs/r2.7.2/hadoop-mapreduce-client/hadoop-mapreduce-client-core/mapred-default.xml

Mặc định giá trị giao cpu.vcores cho mapper/giảm tốc sẽ là 1, Bạn có thể tăng giá trị này nếu đó là một ứng dụng chuyên sâu CPU. Hãy nhớ Nếu bạn tăng giá trị này, số nhiệm vụ bản đồ/giảm tốc chạy song song cũng sẽ bị giảm.

+0

hmm, tôi nghĩ rằng toàn bộ nội dung với các bộ lập lịch không phải là mong muốn, nhưng cpu này.vcores thiết lập thực sự có thể giúp, bởi vì mặc dù số lượng RAM là khác nhau cho các nút, nhưng lõi CPU là như nhau, vì vậy tôi có thể thiết lập 2 vcores cho mapper và nó sẽ đẻ trứng cùng một số lượng bản đồ cho các nút khác nhau. Tôi sẽ thử nó – AdamSkywalker

+0

Âm thanh tốt, có thể hoạt động, Nếu tổng số container đang chạy đạt dung lượng cụm của bạn. – sachin

+0

Xin lỗi vì lỗi đánh máy trong nhận xét trước, Giới hạn vcores Cpu sẽ không được kiểm tra trong chính sách lập kế hoạch không phải là DRF. – sachin

0

Bạn phải đặt cấu hình như thế này. Hãy thử điều này

// create a configuration 
Configuration conf = new Configuration(); 
// create a new job based on the configuration 
Job job = new Job(conf); 
// here you have to put your mapper class 
job.setMapperClass(Mapper.class); 
// here you have to put your reducer class 
job.setReducerClass(Reducer.class); 
// here you have to set the jar which is containing your 
// map/reduce class, so you can use the mapper class 
job.setJarByClass(Mapper.class); 
// key/value of your reducer output 
job.setOutputKeyClass(Text.class); 
job.setOutputValueClass(Text.class); 
// this is setting the format of your input, can be TextInputFormat 
job.setInputFormatClass(SequenceFileInputFormat.class); 
// same with output 
job.setOutputFormatClass(TextOutputFormat.class); 
// here you can set the path of your input 
SequenceFileInputFormat.addInputPath(job, new Path("files/toMap/")); 
// this deletes possible output paths to prevent job failures 
FileSystem fs = FileSystem.get(conf); 
Path out = new Path("files/out/processed/"); 
fs.delete(out, true); 
// finally set the empty out path 
TextOutputFormat.setOutputPath(job, out); 

// this waits until the job completes and prints debug out to STDOUT or whatever 
// has been configured in your log4j properties. 
job.waitForCompletion(true); 

Vì YARN, các cấu hình sau cần được đặt.

// this should be like defined in your yarn-site.xml 
conf.set("yarn.resourcemanager.address", "yarn-manager.com:50001"); 

//For set to 26GB 
conf.set("yarn.nodemanager.resource.memory-mb", "26624"); 


// framework is now "yarn", should be defined like this in mapred-site.xm 
conf.set("mapreduce.framework.name", "yarn"); 

// like defined in hdfs-site.xml 
conf.set("fs.default.name", "hdfs://namenode.com:9000"); 
+0

sợi.nodemanager.resource.memory-mb thuộc tính không thể được đặt theo chương trình. – sachin

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