2013-04-25 34 views
5

Tôi đang làm việc để thiết lập một cụm hadoop nơi các nút tất cả đều không đồng nhất, nghĩa là mỗi nút có một số lõi khác nhau. Hiện nay tôi phải tự chỉnh sửa các mapred-site.xml trên mỗi nút để điền vào {cores}:Tự động đặt số lượng tác vụ bản đồ tối đa trên mỗi nút cho số lượng lõi?

<property> 
    <name>mapred.tasktracker.map.tasks.maximum</name> 
    <value>{cores}</value> 
</property> 

Có một cách dễ dàng hơn để đến đây khi tôi thêm các nút mới? Hầu hết các giá trị khác là một số mặc định và các tác vụ bản đồ tối đa là điều duy nhất thay đổi từ nút này sang nút khác.

Trả lời

3

Nếu bạn cảm thấy thoải mái với một số kịch bản thì sau đây sẽ cung cấp cho bạn số lượng 'xử lý' cho từng máy (có nghĩa là khác nhau đối với kiến ​​trúc khác nhau nhưng là nhiều hơn hoặc ít hơn những gì bạn muốn):

cat /proc/cpuinfo | grep processor | wc -l 

Sau đó, bạn có thể sử dụng sed hoặc một số tương đương để cập nhật tệp mapred-site.xml của bạn theo đầu ra của điều này.

Vì vậy, việc đưa tất cả điều này với nhau:

CORES=`cat /proc/cpuinfo | grep processor | wc -l` 
sed -i "s/{cores}/$CORES/g" mapred-site.xml 

Một chú thích, nhưng có thể bạn không muốn cấu hình số lượng người vẽ bản đồ và số lượng gia giảm mỗi ứng với số lõi, nhiều hơn như vậy mà bạn có thể muốn chia chúng giữa hai loại và có phụ tùng chính cho nút dữ liệu và trình theo dõi tác vụ, v.v.

+0

Cảm ơn. Tôi biết tôi có thể chạy một số loại kịch bản để làm điều đó, nhưng tôi đã hy vọng cho một số loại biến hadoop mà tôi có thể thả vào. Hoặc ít nhất là một mặc định hợp lý hơn 2. – job

+0

Bạn có thể sửa đổi mã nguồn TaskTracker để giải thích một công thức trong mapred-site.xml (ví dụ '$ CORES/2-1') - nhưng tốt nhất bạn cũng cần phải tìm một cách Java để xác định số lõi. –

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